import {useMutation, useQuery} from "@apollo/client"; import {AddIcon} from "@chakra-ui/icons"; import {Stack} from "@chakra-ui/layout"; import { Badge, Button, Checkbox, HStack, IconButton, Image, Select, Table, Tag, Tbody, Td, Text, Th, Thead, Tr, useToast } from "@chakra-ui/react"; import {capitalCase, snakeCase} from "change-case"; import React, {useEffect, useState} from "react"; import {deleteIcon, editIcon} from '../../images'; import {Col, TableType} from "../intefaces/interfaces"; import {deleteRecordByPrimaryKey, getSearchQuery} from "../utils/GenericQueries"; import ConfirmDialog from "./ConfirmDialog"; import CustomEditModal from "./CustomEditModal"; import {getSinglePrimaryKey} from "./CustomeTableUtils"; import FilterInput from "./FilterInput"; import MultipleDisplay from "./MultipleDisplay"; import ForeignKeyDisplay from "./ForeignKeyDisplay"; function DelightTable(props: TableType) { const toast = useToast() const { primaryColor, secondaryColor, isModal, title, tablename, colorRow, bgRow, fontFamily, fontSizeRow, fontSizeHeader, fontWeightRow = "400", showAllBorders = false, showRoundedTitle = true, showControls = true, showSearch = false, showPagination = false, showBackground = true, selectableRows = false, col, panels, addEditDisplayType, recordsDisplayType, searchByCol, } = props; const searchQuery = getSearchQuery(tablename, col) const {loading, error, data, refetch} = useQuery(searchQuery); const [displayRecords, setDisplayRecords] = useState([]); const [formdata, setFormData] = useState(null) //delete const [itemToBeDeleted, setItemToBeDeleted] = useState(null) const [isDialogOpen, setDialogOpen] = useState(false); //delete row const [deleteRow] = useMutation(deleteRecordByPrimaryKey(tablename, col)) //modal const [isAddEdit, setIsAddEdit] = useState(false); const [isUpdate, setIsUpdate] = useState(false); const [selectedRows, setSelectedRows]: any[] = useState([]); useEffect(() => { if (data) { setDisplayRecords(data[tablename]) } }, [data]) function handleActionSelected(e: any) { const {value} = e.target if (value === 'delete') { deleteMultipleItems(selectedRows) } } function getDisplayStyle(mycol: Col, columnValue: string) { if (mycol.displayProperties) { let conditionalStyle = mycol.displayProperties.conditions.find(c => c.value == columnValue); if (conditionalStyle) { return conditionalStyle.styles; } //default chips style // return mycol.displayProperties.styles } } function displayType(mycol: Col) { return mycol?.displayProperties?.displayType ?? "default" } const addRecord = () => { let item: any = {} for (let i = 0; i < col.length; i++) { item[snakeCase(col[i].name)] = '' } setFormData(item) setIsUpdate(false) setIsAddEdit(true) } const editRecord = (item: any) => { setFormData(item) setIsUpdate(true) setIsAddEdit(true) } const deleteRecord = (item: any) => { setItemToBeDeleted(item); setDialogOpen(true); } async function deleteMultipleItems(items: any) { toast({ description: `Deleting ${selectedRows.length} rows...`, status: "info", duration: 5000, position: "bottom", isClosable: false }) for (let i = 0; i < items.length; i++) { let item: any = items[i]; let primaryKey = getSinglePrimaryKey(col) let deleteObj = { [primaryKey]: item[primaryKey] } await deleteRow({ variables: deleteObj }).then(r => { refetch() console.log("Deleted ", item) }).catch(e => { console.log("error ", e) }) } setSelectedRows([]); } function deleteCallBack(shouldItemBeDeleted: any) { setDialogOpen(false); if (itemToBeDeleted == null) return; if (shouldItemBeDeleted) { let primaryKey = getSinglePrimaryKey(col) let deleteObj = { [primaryKey]: itemToBeDeleted[primaryKey] } deleteRow({ variables: deleteObj }).then(r => { refetch() }).catch(e => { console.log("error ", e) toast({ title: "Error", description: e.message, status: "error", duration: 9000, isClosable: true }) }) } } if (loading) { return
| Select | } {col.map((item: any) => { return{capitalCase(item.name)} | })}Actions | |||
|---|---|---|---|---|---|
|
|
}
{col.map((mycol: Col) => {
return displayType(mycol) === "chip" ?
|
:
displayType(mycol) === "badge" ?
|
:
mycol.hasManyRelationship ?
|
:
{
mycol.type === "image" ?
|
})}
|