{"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 {height: tableHeight} = useResizeObserver(tableRef);\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","_a","handleResetFilters","handleEdit","handleDelete","handleDeleteRequest","handleEditRequest","useEdit","captionId","Fragment","jsx","FilterDialog","EditDialog","_b","DeleteDialog","_c","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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"}