import { ActionIcon, Group, Tooltip } from '@mantine/core' import { useMediaQuery } from '@mantine/hooks' import { IconEdit, IconEye, IconTrash } from '@tabler/icons-react' import { useContextMenu } from 'mantine-contextmenu' import { DataTable, DataTableColumn } from 'mantine-datatable' import Router from 'next/router' import { useState } from 'react' import { openSelectModal } from '../../MyModal' import { MyTableEntity } from './interface' function MyTable(props: MyTableEntity) { const { showContextMenu } = useContextMenu() const isTouch = useMediaQuery('(pointer: coarse)') const { query, columns, baseURL, selectedMutation, multiSelectedMutation, showModalDetail, isEdit = true, isDeleted = true, ...otherProps } = props const { data, total, isFetching } = query const [selectedRecords, setSelectedRecords] = useState([]) // custom columns const defaultColumns: DataTableColumn[] = [ ...columns, { accessor: 'actions', title: 'Actions', textAlign: 'center', width: 100, render: (info) => { const id = String(info.id) return ( {/* Check Edit */} {isEdit && ( )} {/* Check Deleted */} {isDeleted && ( openSelectModal({ id, mutation: selectedMutation, query }) } > )} ) }, }, ] let newColumns: DataTableColumn[] = [] if (!isEdit && !isDeleted) { newColumns = [...columns] } else { newColumns = defaultColumns } return ( // @ts-expect-error showContextMenu([ { key: 'detail', icon: , onClick: () => showModalDetail(record), }, { key: 'edit', icon: , hidden: !isEdit, onClick: () => Router.push(`${baseURL}/${record.id}/edit`), }, { key: 'divider' }, { key: 'delete', icon: , color: 'red', hidden: !isDeleted || (selectedRecords.length !== 0 && selectedRecords.length > 1), onClick: () => openSelectModal({ id: record.id, mutation: selectedMutation, query, }), }, ])(event) } {...otherProps} /> ) } export default MyTable