{"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","showEditDialog","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,CACT,KAAM,CAAC,WAAYC,CAAA,EAA0BC,EAAAA,eACzCP,EAAM,QAAQ,MAAM,aAAA,EAElB,CAAC,WAAYQ,GAAkBD,EAAAA,eAAeP,EAAM,QAAQ,MAAM,WAAqB,EAEvFS,EAAsBC,EAAAA,YAAY,IAAM,CAC1CJ,EAAA,CACJ,EAAG,CAACA,CAAsB,CAAC,EAErBK,EAAoBD,EAAAA,YAAY,IAAM,CACxCF,EAAe,CAAC,gBAAiB,OAAO,KAAKT,CAAY,EAAE,OAAO,CACtE,EAAG,CAACA,EAAcS,CAAc,CAAC,EAE3BI,EAAeC,EAAAA,QACjB,IAAM,OAAO,KAAKd,CAAY,EAAE,IAAIe,GAAY,OAAOA,CAAQ,CAAC,EAChE,CAACf,CAAY,CAAA,EAGXgB,EAAWL,EAAAA,YACb,CAACT,EAAsBe,EAAsBC,EAAkBC,IAAsB,CAEjF,MAAMC,EAAoB,CAAC,GAAGlB,CAAS,EACvC,OAAAe,EAAW,QAAQF,GAAY,CAE3B,MAAMM,EAAOpB,EAAM,UAAUiB,CAAQ,GAAG,UAAU,MAAM,YACxDI,EAAAA,IAAIF,EAAOL,CAAQ,EAAGM,EAAMF,CAAK,CACrC,CAAC,EACMC,CACX,EACA,CAACnB,CAAK,CAAA,EAGJsB,EAAaZ,EAAAA,YACf,CAACO,EAAkBC,IAA2B,CAC1C,MAAMK,EAAgBR,EAASd,EAAWW,EAAcK,EAAUC,CAAK,EACjEM,EAAuB,OAAO,YAChCZ,EAAa,IAAIE,GAAY,CAACA,EAAUS,EAAcT,CAAQ,CAAC,CAAC,CAAA,EAEpEZ,IAAmBuB,EAAAA,gBAAgB,UAAYtB,EAAaoB,CAAa,EACzEnB,EAAOoB,CAAS,EAEhBnB,EAAA,CACJ,EACA,CAACA,EAAgBU,EAAUX,EAAQF,EAAgBU,EAAcT,EAAcF,CAAS,CAAA,EAGtFyB,EAAahB,EAAAA,YAAY,CAACT,EAAsB0B,IAC3C1B,EAAU,OAAO,CAAC2B,EAAGC,IAAM,CAACF,EAAY,IAAIE,CAAC,CAAC,EACtD,CAAA,CAAE,EAECC,EAAepB,EAAAA,YAAY,IAAM,CACnC,MAAMa,EAAgBG,EAAWzB,EAAW,IAAI,IAAIW,CAAY,CAAC,EACjEV,IAAmBuB,EAAAA,gBAAgB,UAAYtB,EAAaoB,CAAa,EACzEnB,EAAO,CAAA,CAAE,EAETC,EAAA,CACJ,EAAG,CAACqB,EAAYzB,EAAWW,EAAcV,EAAgBC,EAAcC,EAAQC,CAAc,CAAC,EAE9F,MAAO,CAAC,oBAAAI,EAAqB,aAAAqB,EAAc,WAAAR,EAAY,kBAAAX,CAAA,CAC3D"}