import { MRT_ColumnDef, type MRT_Cell, type MRT_Row, type MRT_TableInstance, MRT_TableState, MantineReactTable, useMantineReactTable, } from "mantine-react-table"; import { type OnChangeFn, type RowSelectionState } from "@tanstack/table-core"; import { Text } from "@mantine/core"; export type RowActionsProps = (props: { cell: MRT_Cell; row: MRT_Row; table: MRT_TableInstance; }) => React.ReactNode; export type DetailPanelProps = (props: { row: MRT_Row; table: MRT_TableInstance; }) => React.ReactNode; export type TopToolbarCustomActionsProps = (props: { table: MRT_TableInstance; }) => React.ReactNode; interface Props { columns: MRT_ColumnDef[]; data: T[]; renderRowActions?: RowActionsProps | undefined; renderDetailPanel?: DetailPanelProps | undefined; renderTopToolbarCustomActions?: TopToolbarCustomActionsProps | undefined; state?: Partial> | undefined; enableRowSelection?: boolean; onRowSelectionChange?: OnChangeFn | undefined; getRowId?: | (( originalRow: T, index: number, parentRow: MRT_Row ) => string | undefined) | undefined; enablePagination?: boolean; columnPinningColumns?: string; enableStickyHeader?: boolean; enableStickyFooter?: boolean; enableGlobalFilter?: boolean; enableColumnFilters?: boolean; } export default function Table({ columns, data, renderRowActions, renderDetailPanel, renderTopToolbarCustomActions, state, enableRowSelection = false, onRowSelectionChange, getRowId, enablePagination = true, columnPinningColumns = "", enableStickyHeader = false, enableStickyFooter = false, enableGlobalFilter = true, enableColumnFilters = true, }: Props) { const table = useMantineReactTable({ columns, data, columnFilterDisplayMode: "popover", enableRowActions: renderRowActions ? true : false, enableExpanding: renderDetailPanel ? true : false, enablePinning: true, positionActionsColumn: "last", renderRowActions, renderDetailPanel, renderTopToolbarCustomActions, enableRowSelection, onRowSelectionChange, getRowId, enableStickyHeader: enableStickyHeader, enableStickyFooter: enableStickyFooter, enableGlobalFilter: enableGlobalFilter, enableColumnFilters: enableColumnFilters, mantinePaperProps: { shadow: "none", withBorder: false, }, initialState: { columnPinning: { right: ["mrt-row-actions"], left: [columnPinningColumns], }, columnVisibility: { // assigned_to: false, }, density: "xs", }, state: { ...state, }, // enableRowNumbers: true, enableGlobalFilterRankedResults: true, rowNumberMode: "original", paginationDisplayMode: "pages", enablePagination: enablePagination, renderEmptyRowsFallback: ({ table }) => ( No records to display ), }); return ; }