{"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"}