{"version":3,"file":"DataTable.cjs","sources":["../../../../src/lib/DataTable/DataTable.tsx"],"sourcesContent":["import type {ReactNode} from 'react';\nimport {forwardRef, Fragment, useCallback, useMemo, useRef} from 'react';\nimport classNames from 'classnames';\nimport type {\n    ColumnPinningState,\n    PaginationState,\n    SortingState,\n    ColumnFiltersState,\n    RowSelectionState,\n    ColumnDef,\n} from '@tanstack/react-table';\nimport {\n    flexRender,\n    getCoreRowModel,\n    getPaginationRowModel,\n    getSortedRowModel,\n    useReactTable,\n    getFilteredRowModel,\n} from '@tanstack/react-table';\nimport {useLocalTheme} from 'css-vars-hook';\n\nimport {useResizeObserver} from '@/internal/hooks/useResizeObserverNew.ts';\nimport {useInternalRef} from '@/internal/hooks/useInternalRef.ts';\nimport type {DataAttributes, LibraryProps} from '@/internal/LibraryAPI';\nimport {useBrowserLocale} from '@/internal/locale';\nimport type {Locale} from '@/internal/locale';\nimport {I, Table, Button} from '@/lib';\nimport {useInternalId} from '@/internal/hooks/useInternalId.ts';\nimport {IconFilterOff} from '@/internal/Icons';\n\nimport {useColumnFilters} from './tableFeatures/useColumnFilters.ts';\nimport classes from './DataTable.module.css';\nimport type {EditState, TableData, TableRow, Column} from './types.ts';\nimport {ProcessingModes, RenderModes} from './types.ts';\n// import {columns} from './columns.tsx';\nimport {useColumnPinning} from './tableFeatures/useColumnPinning.ts';\nimport {TableCell} from './TableCell.tsx';\nimport {useVirtualRows} from './tableFeatures/useVirtualRows.ts';\nimport {useTableData} from './tableFeatures/useTableData.ts';\nimport {Pagination} from './Pagination.tsx';\nimport {usePagination} from './tableFeatures/usePagination.ts';\nimport {useSorting} from './tableFeatures/useSorting.ts';\nimport type {FilterConfig} from './dialogs/FilterDialog.tsx';\nimport {FilterDialog} from './dialogs/FilterDialog.tsx';\nimport {useRowSelection} from './tableFeatures/useRowSelection.ts';\nimport {useTableHeight} from './tableFeatures/useTableHeight.ts';\nimport {DeleteDialog} from './dialogs/DeleteDialog.tsx';\nimport {EditDialog} from './dialogs/EditDialog.tsx';\nimport {SelectableActions} from './SelectableActions.tsx';\nimport {useEdit} from './tableFeatures/useEdit.ts';\nimport {useTableColumns} from './tableFeatures/useTableColumns.tsx';\nimport {isInDateRange, isInPercentRange} from './filterFns.ts';\n\nexport type Props = DataAttributes &\n    LibraryProps & {\n        children?: ReactNode;\n        /**\n         * Provide table columns configuration\n         * @see Column\n         */\n        columns: Column[];\n        /**\n         * Provide data for the table\n         * @see TableData\n         */\n        tableData: TableData;\n        /**\n         * Provide a callback to capture table data changes\n         * @see EditState\n         */\n        onEdit?: (editState: EditState) => void;\n        /**\n         * Control column pinning state externally\n         * @see ColumnPinningState\n         */\n        columnPinning?: ColumnPinningState;\n        /**\n         * Control pagination state externally\n         * @see PaginationState\n         */\n        pagination?: PaginationState;\n        /**\n         * Provide a callback to capture pagination changes\n         * @see PaginationState\n         */\n        onPaginationChange?: (paginationState: PaginationState) => void;\n        /**\n         * Manage column filters externally\n         * @see ColumnFiltersState\n         */\n        columnFilters?: ColumnFiltersState;\n        /**\n         * Provide a callback to capture column filters changes\n         * @see ColumnFiltersState\n         */\n        onFiltersChange?: (filterState: ColumnFiltersState) => void;\n        /**\n         * Manage row selection externally\n         * @see RowSelectionState\n         */\n        rowSelection?: RowSelectionState;\n        /**\n         * Provide a callback to capture row selection changes\n         * @see RowSelectionState\n         */\n        onRowSelect?: (selectionState: RowSelectionState) => void;\n        /**\n         * Control table data sorting externally\n         * @see SortingState\n         */\n        sorting?: SortingState;\n        /**\n         * Provide a callback to capture table data sorting changes\n         * @see SortingState\n         */\n        onSortingChange?: (sortingState: SortingState) => void;\n        /**\n         * Configure how table data is processed inside or outside the component\n         * @see ProcessingModes\n         */\n        processingMode?: keyof typeof ProcessingModes;\n        /**\n         * Select which type of table to render\n         * @see RenderModes\n         */\n        renderMode?: keyof typeof RenderModes;\n        /**\n         * Set a controlled page count number for pagination. Required for renderMode=\"paginated-controlled\"\n         * @see https://morewings.github.io/koval-ui/?path=/story/components-datatable--paginated-controlled&args=tableData:rows100\n         */\n        pageCount?: number;\n        /**\n         * Provide a string with a BCP 47 language tag or an Intl.Locale instance,\n         * or an array of such locale identifiers.\n         * Used to format dates, numbers, and units.\n         * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales\n         * @see Locale\n         */\n        locale?: Locale;\n        /**\n         * Enable column selection\n         */\n        selectable?: boolean;\n        /**\n         * Set a height constrain to the data table. 'full' sets to 100% of viewport height\n         */\n        tableHeight?: number | 'full';\n        /**\n         * Set a caption text to render below the table\n         */\n        caption?: string;\n    };\n\nconst CELL_HEIGHT = 42;\n\nconst OVERSCAN = 6;\n\nconst defaultPages = {\n    pageIndex: 0,\n    pageSize: 10,\n};\n\nconst defaultSorting: SortingState = [];\n\nconst defaultFilters: ColumnFiltersState = [];\n\nconst defaultSelection: RowSelectionState = {};\n\nexport const DataTable = forwardRef<HTMLTableElement, Props>(\n    (\n        {\n            children,\n            className,\n            tableData: tableDataProp = [],\n            columnPinning: columnPinningProp,\n            renderMode = RenderModes.virtual,\n            pagination: paginationProp = defaultPages,\n            onPaginationChange = () => {},\n            onSortingChange = () => {},\n            onFiltersChange = () => {},\n            onRowSelect = () => {},\n            onEdit = () => {},\n            rowSelection: rowSelectionProp = defaultSelection,\n            pageCount,\n            sorting: sortingProp = defaultSorting,\n            processingMode = ProcessingModes.internal,\n            columnFilters: columnFiltersProp = defaultFilters,\n            locale: localeProp,\n            selectable = false,\n            tableHeight: tableHeightProp = 'full',\n            caption,\n            columns: columnsProp = [],\n            id: idProp,\n            ...nativeProps\n        },\n        ref\n    ) => {\n        const id = useInternalId(idProp);\n\n        const {tableData, setTableData} = useTableData(tableDataProp);\n\n        const tableRef = useInternalRef(ref);\n\n        const wrapperRef = useRef(null);\n\n        const tableRect = useResizeObserver(tableRef);\n\n        const tableHeight = tableRect?.height;\n\n        const {LocalRoot} = useLocalTheme();\n\n        const maxHeight = useTableHeight({tableHeightProp});\n\n        const theme = useMemo(\n            () => ({\n                ...(tableHeight && {'table-height': tableHeight}),\n                'cell-height': CELL_HEIGHT,\n                'max-height': maxHeight,\n            }),\n            [maxHeight, tableHeight]\n        );\n\n        const {columnPinning, setColumnPinning} = useColumnPinning({\n            columnPinningProp,\n            hasSelectableColumn: selectable,\n        });\n\n        const {pagination, setPagination, currentPage, setCurrentPage, setPageSize} = usePagination(\n            {tableData, paginationProp, onPaginationChange}\n        );\n\n        const {sorting, setSorting} = useSorting({sortingProp, onSortingChange});\n\n        const {columnFilters, setColumnFilters} = useColumnFilters({\n            columnFiltersProp,\n            onFiltersChange,\n        });\n\n        const browserLocale = useBrowserLocale();\n\n        const {rowSelection, setRowSelection, clearSelection} = useRowSelection({\n            rowSelectionProp,\n            onRowSelect,\n            processingMode,\n        });\n\n        const {columns, editableColumns} = useTableColumns({\n            columnsProp,\n            selectable,\n        });\n\n        const table = useReactTable({\n            meta: {\n                locale: localeProp || browserLocale,\n                editModalId: `edit-modal-${id}`,\n                filterModalId: `filter-modal-${id}`,\n                deleteModalId: `delete-modal-${id}`,\n            },\n            data: tableData,\n            columns: columns as ColumnDef<TableRow>[],\n            getCoreRowModel: getCoreRowModel(),\n            onColumnPinningChange: setColumnPinning,\n            getPaginationRowModel:\n                renderMode === RenderModes.paginated ? getPaginationRowModel() : undefined,\n            onPaginationChange: renderMode === RenderModes.paginated ? setPagination : undefined,\n            state: {\n                pagination: renderMode === RenderModes.paginated ? pagination : undefined,\n                columnPinning,\n                sorting,\n                columnFilters,\n                rowSelection,\n            },\n            manualPagination: processingMode === ProcessingModes.external,\n            pageCount: processingMode === ProcessingModes.external ? pageCount : undefined,\n            getSortedRowModel: getSortedRowModel(),\n            onSortingChange: setSorting,\n            // Disabled until proper implementation\n            enableMultiSort: false,\n            manualSorting: processingMode === ProcessingModes.external,\n            getFilteredRowModel: getFilteredRowModel(),\n            onColumnFiltersChange: setColumnFilters,\n            manualFiltering: processingMode === ProcessingModes.external,\n            enableRowSelection: true,\n            onRowSelectionChange: setRowSelection,\n            filterFns: {\n                isInDateRange,\n                isInPercentRange,\n            },\n        });\n\n        const {rows} = table.getRowModel();\n\n        const {before, after, virtualRows} = useVirtualRows({\n            rowsCount: rows.length,\n            scrollRef: wrapperRef,\n            overscan: OVERSCAN,\n            cellHeight: CELL_HEIGHT,\n        });\n\n        const handleSetFilter = useCallback(\n            ({filter, column}: FilterConfig) => {\n                table.getColumn(column!)?.setFilterValue(filter);\n            },\n            [table]\n        );\n\n        const handleResetFilters = useCallback(() => {\n            table.resetColumnFilters();\n        }, [table]);\n\n        const {handleEdit, handleDelete, handleDeleteRequest, handleEditRequest} = useEdit({\n            rowSelection,\n            onEdit,\n            clearSelection,\n            setTableData,\n            table,\n            tableData,\n            processingMode,\n        });\n\n        const captionId = `caption-${id}`;\n\n        return (\n            <Fragment>\n                <FilterDialog\n                    tableContext={table}\n                    id={table.options.meta?.filterModalId as string}\n                    onApplyFiler={handleSetFilter}\n                    columnFilters={columnFilters}\n                />\n                <EditDialog\n                    id={table.options.meta?.editModalId as string}\n                    selectionAmount={Object.keys(rowSelection).length}\n                    columnsConfig={editableColumns}\n                    onEdit={handleEdit}\n                />\n                <DeleteDialog\n                    id={table.options.meta?.deleteModalId as string}\n                    selectionAmount={Object.keys(rowSelection).length}\n                    onDeleteConfirmation={handleDelete}\n                />\n                <LocalRoot theme={theme} className={classes.heightContainer}>\n                    {selectable && (\n                        <SelectableActions\n                            selectedRows={Object.keys(rowSelection).length}\n                            totalRows={table.getPreFilteredRowModel().rows.length}\n                            onDeleteRequest={handleDeleteRequest}\n                            onEditRequest={handleEditRequest}\n                            onClear={clearSelection}\n                        />\n                    )}\n                    <Table\n                        aria-describedby={caption && captionId}\n                        wrapperRef={wrapperRef}\n                        wrapperClassName={classNames(classes.tableWrapper, {\n                            // Needed to apply calculated height to the table to show small tables properly\n                            [classes.paginated]: renderMode === RenderModes.paginated,\n                            [classes.selectable]: selectable,\n                            [classes.hasCaption]: Boolean(caption),\n                        })}\n                        {...nativeProps}\n                        id={id}\n                        className={classNames(classes.dataTable, className)}\n                        ref={tableRef}>\n                        <thead className={classes.tableHeader}>\n                            {table.getHeaderGroups().map(headerGroup => (\n                                <tr key={headerGroup.id}>\n                                    {headerGroup.headers.map((header, i, array) => {\n                                        const fixLeft = i > 0 ? i + 1 : 0;\n                                        const fixRight =\n                                            i === array.length ? 0 : array.length - (i + 1);\n                                        return (\n                                            <TableCell\n                                                as=\"th\"\n                                                key={header.id}\n                                                leftMargin={\n                                                    header.column.getStart('left') + fixLeft\n                                                }\n                                                rightMargin={\n                                                    header.column.getAfter('right') + fixRight\n                                                }\n                                                isPinned={header.column.getIsPinned()}>\n                                                {header.isPlaceholder\n                                                    ? null\n                                                    : flexRender(\n                                                          header.column.columnDef.header,\n                                                          header.getContext()\n                                                      )}\n                                            </TableCell>\n                                        );\n                                    })}\n                                </tr>\n                            ))}\n                        </thead>\n                        {renderMode === RenderModes.virtual && (\n                            <tbody>\n                                <Fragment>\n                                    {before > 0 && (\n                                        <tr>\n                                            <td colSpan={columns.length} style={{height: before}} />\n                                        </tr>\n                                    )}\n                                    {virtualRows.map(virtualRow => {\n                                        const row = rows[virtualRow.index];\n                                        return (\n                                            <tr\n                                                key={row.id}\n                                                style={{\n                                                    height: `${virtualRow.size}px`,\n                                                }}>\n                                                {row.getVisibleCells().map((cell, i, array) => {\n                                                    const fixLeft = i > 0 ? i + 1 : 0;\n                                                    const fixRight =\n                                                        i === array.length\n                                                            ? 0\n                                                            : array.length - (i + 1);\n                                                    return (\n                                                        <TableCell\n                                                            isHighlighted={Boolean(\n                                                                cell.column.getIsSorted()\n                                                            )}\n                                                            as=\"td\"\n                                                            key={cell.id}\n                                                            leftMargin={\n                                                                cell.column.getStart('left') +\n                                                                fixLeft\n                                                            }\n                                                            rightMargin={\n                                                                cell.column.getAfter('right') +\n                                                                fixRight\n                                                            }\n                                                            isPinned={cell.column.getIsPinned()}>\n                                                            {flexRender(\n                                                                cell.column.columnDef.cell,\n                                                                cell.getContext()\n                                                            )}\n                                                        </TableCell>\n                                                    );\n                                                })}\n                                            </tr>\n                                        );\n                                    })}\n                                    {after > 0 && (\n                                        <tr>\n                                            <td colSpan={columns.length} style={{height: after}} />\n                                        </tr>\n                                    )}\n                                </Fragment>\n                            </tbody>\n                        )}\n                        {renderMode === RenderModes.paginated && (\n                            <tbody>\n                                {rows.map(row => (\n                                    <tr key={row.id}>\n                                        {row.getVisibleCells().map((cell, i, array) => {\n                                            const fixLeft = i > 0 ? i + 1 : 0;\n                                            const fixRight =\n                                                i === array.length ? 0 : array.length - (i + 1);\n                                            return (\n                                                <TableCell\n                                                    isHighlighted={Boolean(\n                                                        cell.column.getIsSorted()\n                                                    )}\n                                                    as=\"td\"\n                                                    key={cell.id}\n                                                    leftMargin={\n                                                        cell.column.getStart('left') + fixLeft\n                                                    }\n                                                    rightMargin={\n                                                        cell.column.getAfter('right') + fixRight\n                                                    }\n                                                    isPinned={cell.column.getIsPinned()}>\n                                                    {flexRender(\n                                                        cell.column.columnDef.cell,\n                                                        cell.getContext()\n                                                    )}\n                                                </TableCell>\n                                            );\n                                        })}\n                                    </tr>\n                                ))}\n                            </tbody>\n                        )}\n                        {rows.length === 0 && (\n                            <tbody>\n                                <tr className={classes.noDataRow}>\n                                    <td\n                                        className={classes.noDataCell}\n                                        colSpan={table.getAllColumns().length}>\n                                        <div className={classes.noDataWarning}>\n                                            <span>No data to render.</span>\n                                            {columnFilters.length > 0 && (\n                                                <Button\n                                                    onClick={handleResetFilters}\n                                                    prefix={IconFilterOff}\n                                                    size=\"small\"\n                                                    variant=\"link\">\n                                                    Reset all filters\n                                                </Button>\n                                            )}\n                                        </div>\n                                    </td>\n                                </tr>\n                            </tbody>\n                        )}\n                        <tfoot className={classes.tableFooter}>\n                            {table.getFooterGroups().map(footerGroup => (\n                                <tr key={footerGroup.id}>\n                                    {footerGroup.headers.map((header, i, array) => {\n                                        const fixLeft = i > 0 ? i + 1 : 0;\n                                        const fixRight =\n                                            i === array.length ? 0 : array.length - (i + 1);\n                                        return (\n                                            <TableCell\n                                                as=\"th\"\n                                                key={header.id}\n                                                leftMargin={\n                                                    header.column.getStart('left') + fixLeft\n                                                }\n                                                rightMargin={\n                                                    header.column.getAfter('right') + fixRight\n                                                }\n                                                isPinned={header.column.getIsPinned()}>\n                                                {header.isPlaceholder\n                                                    ? null\n                                                    : flexRender(\n                                                          header.column.columnDef.footer,\n                                                          header.getContext()\n                                                      )}\n                                            </TableCell>\n                                        );\n                                    })}\n                                </tr>\n                            ))}\n                        </tfoot>\n                    </Table>\n                    {renderMode === RenderModes.paginated && (\n                        <Pagination\n                            rowsCount={tableData.length}\n                            onPageSizeChange={setPageSize}\n                            currentPage={currentPage}\n                            pagesAmount={table.getPageCount()}\n                            pageSize={pagination.pageSize}\n                            setCurrentPage={setCurrentPage}\n                        />\n                    )}\n                    {caption && (\n                        <div id={captionId} className={classes.tableCaption}>\n                            <I>{caption}</I>\n                        </div>\n                    )}\n                </LocalRoot>\n            </Fragment>\n        );\n    }\n);\n\nDataTable.displayName = 'DataTable';\n"],"names":["CELL_HEIGHT","OVERSCAN","defaultPages","defaultSorting","defaultFilters","defaultSelection","DataTable","forwardRef","children","className","tableDataProp","columnPinningProp","renderMode","RenderModes","paginationProp","onPaginationChange","onSortingChange","onFiltersChange","onRowSelect","onEdit","rowSelectionProp","pageCount","sortingProp","processingMode","ProcessingModes","columnFiltersProp","localeProp","selectable","tableHeightProp","caption","columnsProp","idProp","nativeProps","ref","id","useInternalId","tableData","setTableData","useTableData","tableRef","useInternalRef","wrapperRef","useRef","tableHeight","useResizeObserver","LocalRoot","useLocalTheme","maxHeight","useTableHeight","theme","useMemo","columnPinning","setColumnPinning","useColumnPinning","pagination","setPagination","currentPage","setCurrentPage","setPageSize","usePagination","sorting","setSorting","useSorting","columnFilters","setColumnFilters","useColumnFilters","browserLocale","useBrowserLocale","rowSelection","setRowSelection","clearSelection","useRowSelection","columns","editableColumns","useTableColumns","table","useReactTable","getCoreRowModel","getPaginationRowModel","getSortedRowModel","getFilteredRowModel","isInDateRange","isInPercentRange","rows","before","after","virtualRows","useVirtualRows","handleSetFilter","useCallback","filter","column","handleResetFilters","handleEdit","handleDelete","handleDeleteRequest","handleEditRequest","useEdit","captionId","Fragment","jsx","FilterDialog","EditDialog","DeleteDialog","jsxs","classes","SelectableActions","Table","classNames","headerGroup","header","i","array","fixLeft","fixRight","TableCell","flexRender","virtualRow","row","cell","Button","IconFilterOff","footerGroup","Pagination","I"],"mappings":"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"}