import { createColumnHelper } from '@tanstack/react-table'; import { Trash2 } from 'lucide-react'; import { Button } from '@@/buttons'; import { NEW_ROW_ID, UNSET_EDITABLE_ROW, } from '@@/datatables/editable/EditableDatatable'; import { isEditableTableMeta } from '@@/datatables/editable/isEditableTableMeta'; function defaultIsNewRow(row: unknown): boolean { return (row as { Id: number }).Id === NEW_ROW_ID; } export function actionsColumn( onRemove: (item: T) => void, isNewRow: (row: T) => boolean = defaultIsNewRow ) { const columnHelper = createColumnHelper(); return columnHelper.accessor(() => '', { header: 'Actions', id: 'actions', enableSorting: false, cell: ({ row: { original, index }, table }) => { if (!isEditableTableMeta(table.options.meta)) { return null; } const { editRow, updateRow, getEditableRow, getEditableRowOriginalData, revertRow, acceptRow, } = table.options.meta; const editableRowIndex = getEditableRow(); return index === editableRowIndex || isNewRow(original) ? ( { if (isNewRow(original)) { acceptRow(); } else { editRow(UNSET_EDITABLE_ROW, undefined); } }} revertRow={() => { if (isNewRow(original)) { revertRow(); } else { updateRow(index, getEditableRowOriginalData()); editRow(UNSET_EDITABLE_ROW, undefined); } }} /> ) : ( onRemove={onRemove} editableRow={editableRowIndex} editRow={editRow} row={original} rowIndex={index} /> ); }, }); } function ActionsCell({ onRemove, editRow, editableRow, row, rowIndex, }: { onRemove: (item: T) => void; editRow: (index: number, original: T | undefined) => void; editableRow: number; row: T; rowIndex: number; }) { return (
); } function EditActionsCell({ acceptRow, revertRow, }: { acceptRow: () => void; revertRow: () => void; }) { return (
); }