UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 5.49 kB
{"version":3,"file":"useEdit.cjs","sources":["../../../../../src/lib/DataTable/tableFeatures/useEdit.ts"],"sourcesContent":["import type {SetStateAction} from 'react';\nimport {useCallback, useMemo} from 'react';\nimport type {RowSelectionState, Table} from '@tanstack/react-table';\n\nimport {useDialogState} from '@/lib';\nimport {set} from '@/internal/utils/set.ts';\n\nimport type {TableData, TableRow, TableValue, EditState} from './../types.ts';\nimport {ProcessingModes} from './../types.ts';\n\nexport type Props = {\n rowSelection: RowSelectionState;\n table: Table<TableRow>;\n tableData: TableData;\n processingMode: keyof typeof ProcessingModes;\n setTableData: (value: SetStateAction<TableRow[]>) => void;\n onEdit: (editState: EditState) => void;\n clearSelection: () => void;\n};\n\nexport const useEdit = ({\n rowSelection,\n table,\n tableData,\n processingMode,\n setTableData,\n onEdit,\n clearSelection,\n}: Props) => {\n const {openDialog: showDeleteConfirmation} = useDialogState(\n table.options.meta?.deleteModalId as string\n );\n const {openDialog: showEditDialog} = useDialogState(table.options.meta?.editModalId as string);\n\n const handleDeleteRequest = useCallback(() => {\n showDeleteConfirmation();\n }, [showDeleteConfirmation]);\n\n const handleEditRequest = useCallback(() => {\n showEditDialog({selectionAmount: Object.keys(rowSelection).length});\n }, [rowSelection, showEditDialog]);\n\n const selectedRows = useMemo(\n () => Object.keys(rowSelection).map(rowIndex => Number(rowIndex)),\n [rowSelection]\n );\n\n const editRows = useCallback(\n (tableData: TableData, editedRows: number[], columnId: string, value: TableValue) => {\n // needs to be a copy to preserve immutability\n const result: TableData = [...tableData];\n editedRows.forEach(rowIndex => {\n // TODO: remove\n const path = table.getColumn(columnId)?.columnDef.meta?.accessorKey as string;\n set(result[rowIndex], path, value);\n });\n return result;\n },\n [table]\n );\n\n const handleEdit = useCallback(\n (columnId: string, value: string | number) => {\n const nextTableData = editRows(tableData, selectedRows, columnId, value);\n const editState: EditState = Object.fromEntries(\n selectedRows.map(rowIndex => [rowIndex, nextTableData[rowIndex]])\n );\n processingMode === ProcessingModes.internal && setTableData(nextTableData);\n onEdit(editState);\n\n clearSelection();\n },\n [clearSelection, editRows, onEdit, processingMode, selectedRows, setTableData, tableData]\n );\n\n const deleteRows = useCallback((tableData: TableData, deletedRows: Set<number>) => {\n return tableData.filter((_, i) => !deletedRows.has(i));\n }, []);\n\n const handleDelete = useCallback(() => {\n const nextTableData = deleteRows(tableData, new Set(selectedRows));\n processingMode === ProcessingModes.internal && setTableData(nextTableData);\n onEdit({});\n\n clearSelection();\n }, [deleteRows, tableData, selectedRows, processingMode, setTableData, onEdit, clearSelection]);\n\n return {handleDeleteRequest, handleDelete, handleEdit, handleEditRequest};\n};\n"],"names":["useEdit","rowSelection","table","tableData","processingMode","setTableData","onEdit","clearSelection","showDeleteConfirmation","useDialogState","_a","showEditDialog","_b","handleDeleteRequest","useCallback","handleEditRequest","selectedRows","useMemo","rowIndex","editRows","editedRows","columnId","value","result","path","set","handleEdit","nextTableData","editState","ProcessingModes","deleteRows","deletedRows","_","i","handleDelete"],"mappings":"oRAoBaA,EAAU,CAAC,CACpB,aAAAC,EACA,MAAAC,EACA,UAAAC,EACA,eAAAC,EACA,aAAAC,EACA,OAAAC,EACA,eAAAC,CACJ,IAAa,SACH,KAAA,CAAC,WAAYC,CAAA,EAA0BC,EAAA,gBACzCC,EAAAR,EAAM,QAAQ,OAAd,YAAAQ,EAAoB,aACxB,EACM,CAAC,WAAYC,GAAkBF,EAAAA,gBAAeG,EAAAV,EAAM,QAAQ,OAAd,YAAAU,EAAoB,WAAqB,EAEvFC,EAAsBC,EAAAA,YAAY,IAAM,CACnBN,EAAA,CAAA,EACxB,CAACA,CAAsB,CAAC,EAErBO,EAAoBD,EAAAA,YAAY,IAAM,CACxCH,EAAe,CAAC,gBAAiB,OAAO,KAAKV,CAAY,EAAE,OAAO,CAAA,EACnE,CAACA,EAAcU,CAAc,CAAC,EAE3BK,EAAeC,EAAA,QACjB,IAAM,OAAO,KAAKhB,CAAY,EAAE,IAAIiB,GAAY,OAAOA,CAAQ,CAAC,EAChE,CAACjB,CAAY,CACjB,EAEMkB,EAAWL,EAAA,YACb,CAACX,EAAsBiB,EAAsBC,EAAkBC,IAAsB,CAE3E,MAAAC,EAAoB,CAAC,GAAGpB,CAAS,EACvC,OAAAiB,EAAW,QAAoBF,GAAA,SAE3B,MAAMM,GAAOZ,GAAAF,EAAAR,EAAM,UAAUmB,CAAQ,IAAxB,YAAAX,EAA2B,UAAU,OAArC,YAAAE,EAA2C,YACxDa,EAAAA,IAAIF,EAAOL,CAAQ,EAAGM,EAAMF,CAAK,CAAA,CACpC,EACMC,CACX,EACA,CAACrB,CAAK,CACV,EAEMwB,EAAaZ,EAAA,YACf,CAACO,EAAkBC,IAA2B,CAC1C,MAAMK,EAAgBR,EAAShB,EAAWa,EAAcK,EAAUC,CAAK,EACjEM,EAAuB,OAAO,YAChCZ,EAAa,IAAgBE,GAAA,CAACA,EAAUS,EAAcT,CAAQ,CAAC,CAAC,CACpE,EACmBd,IAAAyB,EAAA,gBAAgB,UAAYxB,EAAasB,CAAa,EACzErB,EAAOsB,CAAS,EAEDrB,EAAA,CACnB,EACA,CAACA,EAAgBY,EAAUb,EAAQF,EAAgBY,EAAcX,EAAcF,CAAS,CAC5F,EAEM2B,EAAahB,EAAAA,YAAY,CAACX,EAAsB4B,IAC3C5B,EAAU,OAAO,CAAC6B,EAAGC,IAAM,CAACF,EAAY,IAAIE,CAAC,CAAC,EACtD,EAAE,EAECC,EAAepB,EAAAA,YAAY,IAAM,CACnC,MAAMa,EAAgBG,EAAW3B,EAAW,IAAI,IAAIa,CAAY,CAAC,EAC9CZ,IAAAyB,EAAA,gBAAgB,UAAYxB,EAAasB,CAAa,EACzErB,EAAO,CAAA,CAAE,EAEMC,EAAA,CAAA,EAChB,CAACuB,EAAY3B,EAAWa,EAAcZ,EAAgBC,EAAcC,EAAQC,CAAc,CAAC,EAE9F,MAAO,CAAC,oBAAAM,EAAqB,aAAAqB,EAAc,WAAAR,EAAY,kBAAAX,CAAiB,CAC5E"}