@ackplus/react-tanstack-data-table 1.0.31 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/lib/components/headers/draggable-header.d.ts +1 -0
- package/src/lib/components/headers/draggable-header.js +3 -1
- package/src/lib/components/headers/table-header.d.ts +1 -0
- package/src/lib/components/headers/table-header.js +25 -4
- package/src/lib/components/rows/data-table-row.js +13 -1
- package/src/lib/components/table/data-table.js +31 -15
- package/src/lib/components/table/data-table.types.d.ts +1 -0
- package/src/lib/examples/server-side-fetching-example.js +0 -7
- package/src/lib/examples/simple-local-example.js +2 -4
- package/src/lib/types/export.types.d.ts +2 -0
- package/src/lib/utils/special-columns.utils.d.ts +1 -1
- package/src/lib/utils/special-columns.utils.js +2 -2
- package/src/lib/utils/styling-helpers.d.ts +8 -3
- package/src/lib/utils/styling-helpers.js +8 -6
package/package.json
CHANGED
|
@@ -14,4 +14,5 @@ interface DraggableHeaderProps<T> {
|
|
|
14
14
|
[key: string]: any;
|
|
15
15
|
}
|
|
16
16
|
export declare function DraggableHeader<T>(props: DraggableHeaderProps<T>): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>> | import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare const DraggableHeaderMemo: typeof DraggableHeader;
|
|
17
18
|
export {};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DraggableHeaderMemo = void 0;
|
|
3
4
|
exports.DraggableHeader = DraggableHeader;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
7
|
const icons_material_1 = require("@mui/icons-material");
|
|
7
8
|
const material_1 = require("@mui/material");
|
|
8
9
|
const react_table_1 = require("@tanstack/react-table");
|
|
9
|
-
const react_1 = require("react");
|
|
10
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
10
11
|
const slot_helpers_1 = require("../../utils/slot-helpers");
|
|
11
12
|
function DraggableHeader(props) {
|
|
12
13
|
const { header, enableSorting = true, draggable = false, onColumnReorder, containerSx, sortIconProps, alignment, slots, slotProps } = props, otherProps = tslib_1.__rest(props, ["header", "enableSorting", "draggable", "onColumnReorder", "containerSx", "sortIconProps", "alignment", "slots", "slotProps"]);
|
|
@@ -204,3 +205,4 @@ function DraggableHeader(props) {
|
|
|
204
205
|
gap: 1,
|
|
205
206
|
}, children: [(0, react_table_1.flexRender)(header.column.columnDef.header, header.getContext()), getSortIcon()] }) })));
|
|
206
207
|
}
|
|
208
|
+
exports.DraggableHeaderMemo = react_1.default.memo(DraggableHeader);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TableHeaderMemo = void 0;
|
|
3
4
|
exports.TableHeader = TableHeader;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
8
|
const material_1 = require("@mui/material");
|
|
7
9
|
const draggable_header_1 = require("./draggable-header");
|
|
8
10
|
const data_table_context_1 = require("../../contexts/data-table-context");
|
|
@@ -22,16 +24,21 @@ function TableHeader(props) {
|
|
|
22
24
|
sx: containerSx,
|
|
23
25
|
}, headerSlotProps, otherProps);
|
|
24
26
|
const mergedHeaderRowProps = (0, slot_helpers_1.mergeSlotProps)({}, headerRowSlotProps, headerRowProps || {});
|
|
25
|
-
const renderHeaderCell = (header) => {
|
|
27
|
+
const renderHeaderCell = (0, react_1.useCallback)((header) => {
|
|
26
28
|
const isPinned = header.column.getIsPinned();
|
|
27
29
|
const pinnedPosition = isPinned ? header.column.getStart('left') : undefined;
|
|
28
30
|
const pinnedRightPosition = isPinned === 'right' ? header.column.getAfter('right') : undefined;
|
|
29
31
|
const alignment = (0, utils_1.getColumnAlignment)(header.column.columnDef);
|
|
30
32
|
const enableSorting = header.column.getCanSort();
|
|
33
|
+
const minSize = header.column.columnDef.minSize;
|
|
34
|
+
const maxSize = header.column.columnDef.maxSize;
|
|
35
|
+
const columnSize = enableColumnResizing ? header.getSize() : (fitToScreen ? 'auto' : header.getSize());
|
|
31
36
|
const mergedHeaderCellProps = (0, slot_helpers_1.mergeSlotProps)({
|
|
32
37
|
align: alignment,
|
|
33
38
|
sx: Object.assign({}, (0, utils_1.getPinnedColumnStyle)({
|
|
34
|
-
width:
|
|
39
|
+
width: columnSize,
|
|
40
|
+
minWidth: minSize !== undefined ? minSize : undefined,
|
|
41
|
+
maxWidth: maxSize !== undefined ? maxSize : undefined,
|
|
35
42
|
isPinned,
|
|
36
43
|
pinnedPosition,
|
|
37
44
|
isLastLeftPinnedColumn: isPinned === 'left' && header.column.getIsLastColumn('left'),
|
|
@@ -49,6 +56,20 @@ function TableHeader(props) {
|
|
|
49
56
|
} }, resizeHandleSx),
|
|
50
57
|
});
|
|
51
58
|
return ((0, jsx_runtime_1.jsxs)(HeaderCellSlot, Object.assign({}, mergedHeaderCellProps, { children: [(0, jsx_runtime_1.jsx)(draggable_header_1.DraggableHeader, { header: header, enableSorting: enableSorting, draggable: !!(draggable && !isPinned), onColumnReorder: onColumnReorder, slots: slots, slotProps: slotProps, alignment: alignment }), enableColumnResizing && header.column.getCanResize() ? ((0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({}, mergedResizeHandleProps))) : null] }), header.id));
|
|
52
|
-
}
|
|
53
|
-
|
|
59
|
+
}, [
|
|
60
|
+
fitToScreen,
|
|
61
|
+
enableColumnResizing,
|
|
62
|
+
enableStickyHeader,
|
|
63
|
+
headerCellSlotProps,
|
|
64
|
+
headerCellProps,
|
|
65
|
+
resizeHandleSx,
|
|
66
|
+
theme,
|
|
67
|
+
draggable,
|
|
68
|
+
onColumnReorder,
|
|
69
|
+
slots,
|
|
70
|
+
slotProps,
|
|
71
|
+
]);
|
|
72
|
+
const headerGroups = (0, react_1.useMemo)(() => table.getHeaderGroups(), [table]);
|
|
73
|
+
return ((0, jsx_runtime_1.jsx)(HeaderSlot, Object.assign({}, mergedHeaderProps, { children: headerGroups.map(headerGroup => ((0, jsx_runtime_1.jsx)(HeaderRowSlot, Object.assign({}, mergedHeaderRowProps, { children: headerGroup.headers.map(renderHeaderCell) }), headerGroup.id))) })));
|
|
54
74
|
}
|
|
75
|
+
exports.TableHeaderMemo = react_1.default.memo(TableHeader);
|
|
@@ -17,20 +17,32 @@ function DataTableRow(props) {
|
|
|
17
17
|
const TableRowSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'row', material_1.TableRow);
|
|
18
18
|
const mergedRowProps = (0, slot_helpers_1.mergeSlotProps)({
|
|
19
19
|
hover: enableHover,
|
|
20
|
-
sx: Object.assign({
|
|
20
|
+
sx: (theme) => (Object.assign(Object.assign(Object.assign({ '--row-bg': enableStripes && isOdd
|
|
21
|
+
? theme.palette.action.hover
|
|
22
|
+
: theme.palette.background.paper, backgroundColor: 'var(--row-bg)' }, (enableHover && {
|
|
23
|
+
'&:hover': { '--row-bg': theme.palette.action.hover },
|
|
24
|
+
})), { [`&.${material_1.tableRowClasses.selected}`]: {
|
|
25
|
+
'--row-bg': (0, material_1.alpha)(theme.palette.primary.dark, 0.08),
|
|
26
|
+
backgroundColor: 'var(--row-bg)',
|
|
27
|
+
} }), containerSx)),
|
|
21
28
|
}, rowSlotProps, otherProps);
|
|
22
29
|
const mergedExpandedRowProps = (0, slot_helpers_1.mergeSlotProps)({
|
|
23
30
|
sx: expandedContainerSx,
|
|
24
31
|
}, expandedRowSlotProps, expandedRowProps || {});
|
|
25
32
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableRowSlot, Object.assign({}, mergedRowProps, { children: row.getVisibleCells().map(cell => {
|
|
33
|
+
var _a;
|
|
26
34
|
const isPinned = cell.column.getIsPinned();
|
|
27
35
|
const pinnedPosition = isPinned ? cell.column.getStart('left') : undefined;
|
|
28
36
|
const pinnedRightPosition = isPinned === 'right' ? cell.column.getAfter('right') : undefined;
|
|
29
37
|
const alignment = (0, utils_1.getColumnAlignment)(cell.column.columnDef);
|
|
38
|
+
const minSize = (_a = cell.column.columnDef) === null || _a === void 0 ? void 0 : _a.minSize;
|
|
39
|
+
const maxSize = cell.column.columnDef.maxSize;
|
|
30
40
|
const mergedCellProps = (0, slot_helpers_1.mergeSlotProps)({
|
|
31
41
|
align: alignment,
|
|
32
42
|
sx: Object.assign({}, (0, utils_1.getPinnedColumnStyle)({
|
|
33
43
|
width: cell.column.getSize() || 'auto',
|
|
44
|
+
minWidth: minSize !== undefined ? minSize : undefined,
|
|
45
|
+
maxWidth: maxSize !== undefined ? maxSize : undefined,
|
|
34
46
|
isPinned,
|
|
35
47
|
pinnedPosition,
|
|
36
48
|
pinnedRightPosition,
|
|
@@ -33,6 +33,7 @@ const DEFAULT_INITIAL_STATE = {
|
|
|
33
33
|
right: [],
|
|
34
34
|
},
|
|
35
35
|
columnVisibility: {},
|
|
36
|
+
columnSizing: {},
|
|
36
37
|
columnFilter: {
|
|
37
38
|
filters: [],
|
|
38
39
|
logic: 'AND',
|
|
@@ -40,7 +41,7 @@ const DEFAULT_INITIAL_STATE = {
|
|
|
40
41
|
pendingLogic: 'AND',
|
|
41
42
|
},
|
|
42
43
|
};
|
|
43
|
-
exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, columns, data = [], totalRow = 0, idKey = 'id', extraFilter = null, footerFilter = null, dataMode = 'client', initialLoadData = true, onFetchData, onDataStateChange, enableRowSelection = false, enableMultiRowSelection = true, selectMode = 'page', isRowSelectable, onSelectionChange, enableBulkActions = false, bulkActions, enableColumnResizing = false, columnResizeMode = 'onChange', enableColumnDragging = false, onColumnDragEnd, enableColumnPinning = false, onColumnPinningChange, onColumnVisibilityChange, enableColumnVisibility = true, enableExpanding = false, getRowCanExpand, renderSubComponent, enablePagination = false, paginationMode = 'client', enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client', enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, enableHover = true, enableStripes = false, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium', enableStickyHeaderOrFooter = false, maxHeight = '400px', enableVirtualization = false, estimateRowHeight = 52, enableTableSizeControl = true, enableExport = false, enableReset = true, loading = false, emptyMessage = 'No data available', skeletonRows = 5, onColumnFiltersChange, onPaginationChange, onGlobalFilterChange, slots = {}, slotProps = {}, logging, }, ref) {
|
|
44
|
+
exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, columns, data = [], totalRow = 0, idKey = 'id', extraFilter = null, footerFilter = null, dataMode = 'client', initialLoadData = true, onFetchData, onDataStateChange, enableRowSelection = false, enableMultiRowSelection = true, selectMode = 'page', isRowSelectable, onSelectionChange, enableBulkActions = false, bulkActions, enableColumnResizing = false, columnResizeMode = 'onChange', onColumnSizingChange, enableColumnDragging = false, onColumnDragEnd, enableColumnPinning = false, onColumnPinningChange, onColumnVisibilityChange, enableColumnVisibility = true, enableExpanding = false, getRowCanExpand, renderSubComponent, enablePagination = false, paginationMode = 'client', enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client', enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, enableHover = true, enableStripes = false, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium', enableStickyHeaderOrFooter = false, maxHeight = '400px', enableVirtualization = false, estimateRowHeight = 52, enableTableSizeControl = true, enableExport = false, enableReset = true, loading = false, emptyMessage = 'No data available', skeletonRows = 5, onColumnFiltersChange, onPaginationChange, onGlobalFilterChange, slots = {}, slotProps = {}, logging, }, ref) {
|
|
44
45
|
var _a;
|
|
45
46
|
const isServerMode = dataMode === 'server';
|
|
46
47
|
const isServerPagination = paginationMode === 'server' || isServerMode;
|
|
@@ -69,7 +70,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
69
70
|
}
|
|
70
71
|
return config;
|
|
71
72
|
}, [initialState, logger]);
|
|
72
|
-
console.log('initialStateConfig', initialStateConfig);
|
|
73
73
|
const [sorting, setSorting] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.sorting) || DEFAULT_INITIAL_STATE.sorting);
|
|
74
74
|
const [pagination, setPagination] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.pagination) || DEFAULT_INITIAL_STATE.pagination);
|
|
75
75
|
const [globalFilter, setGlobalFilter] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.globalFilter) || DEFAULT_INITIAL_STATE.globalFilter);
|
|
@@ -79,6 +79,8 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
79
79
|
const [tableSize, setTableSize] = (0, react_1.useState)(initialTableSize || 'medium');
|
|
80
80
|
const [columnOrder, setColumnOrder] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.columnOrder) || DEFAULT_INITIAL_STATE.columnOrder);
|
|
81
81
|
const [columnPinning, setColumnPinning] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.columnPinning) || DEFAULT_INITIAL_STATE.columnPinning);
|
|
82
|
+
const [columnVisibility, setColumnVisibility] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.columnVisibility) || DEFAULT_INITIAL_STATE.columnVisibility);
|
|
83
|
+
const [columnSizing, setColumnSizing] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.columnSizing) || DEFAULT_INITIAL_STATE.columnSizing);
|
|
82
84
|
const [serverData, setServerData] = (0, react_1.useState)(null);
|
|
83
85
|
const [serverTotal, setServerTotal] = (0, react_1.useState)(0);
|
|
84
86
|
const [exportController, setExportController] = (0, react_1.useState)(null);
|
|
@@ -153,7 +155,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
153
155
|
pagination,
|
|
154
156
|
columnFilter,
|
|
155
157
|
sorting }, overrides);
|
|
156
|
-
console.log('filters', filters);
|
|
157
158
|
if (logger.isLevelEnabled('info')) {
|
|
158
159
|
logger.info('Requesting data', { filters });
|
|
159
160
|
}
|
|
@@ -217,7 +218,9 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
217
218
|
sorting,
|
|
218
219
|
pagination,
|
|
219
220
|
columnOrder,
|
|
220
|
-
columnPinning
|
|
221
|
+
columnPinning,
|
|
222
|
+
columnVisibility,
|
|
223
|
+
columnSizing }, overrides);
|
|
221
224
|
if (logger.isLevelEnabled('debug')) {
|
|
222
225
|
logger.debug('Emitting tableStateChange', currentState);
|
|
223
226
|
}
|
|
@@ -230,6 +233,8 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
230
233
|
pagination,
|
|
231
234
|
columnOrder,
|
|
232
235
|
columnPinning,
|
|
236
|
+
columnVisibility,
|
|
237
|
+
columnSizing,
|
|
233
238
|
logger,
|
|
234
239
|
]);
|
|
235
240
|
const handleSortingChange = (0, react_1.useCallback)((updaterOrValue) => {
|
|
@@ -295,12 +300,10 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
295
300
|
}
|
|
296
301
|
}, [onColumnPinningChange, columnPinning]);
|
|
297
302
|
const handleColumnVisibilityChange = (0, react_1.useCallback)((updater) => {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
const currentVisibility = tableInstance.getState().columnVisibility;
|
|
303
|
-
const newVisibility = typeof updater === 'function' ? updater(currentVisibility) : updater;
|
|
303
|
+
const newVisibility = typeof updater === 'function'
|
|
304
|
+
? updater(columnVisibility)
|
|
305
|
+
: updater;
|
|
306
|
+
setColumnVisibility(newVisibility);
|
|
304
307
|
if (onColumnVisibilityChange) {
|
|
305
308
|
setTimeout(() => {
|
|
306
309
|
onColumnVisibilityChange(newVisibility);
|
|
@@ -311,7 +314,23 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
311
314
|
tableStateChange({ columnVisibility: newVisibility });
|
|
312
315
|
}, 0);
|
|
313
316
|
}
|
|
314
|
-
}, [onColumnVisibilityChange, onDataStateChange, tableStateChange]);
|
|
317
|
+
}, [onColumnVisibilityChange, onDataStateChange, tableStateChange, columnVisibility]);
|
|
318
|
+
const handleColumnSizingChange = (0, react_1.useCallback)((updater) => {
|
|
319
|
+
const newSizing = typeof updater === 'function'
|
|
320
|
+
? updater(columnSizing)
|
|
321
|
+
: updater;
|
|
322
|
+
setColumnSizing(newSizing);
|
|
323
|
+
if (onColumnSizingChange) {
|
|
324
|
+
setTimeout(() => {
|
|
325
|
+
onColumnSizingChange(newSizing);
|
|
326
|
+
}, 0);
|
|
327
|
+
}
|
|
328
|
+
if (onDataStateChange) {
|
|
329
|
+
setTimeout(() => {
|
|
330
|
+
tableStateChange({ columnSizing: newSizing });
|
|
331
|
+
}, 0);
|
|
332
|
+
}
|
|
333
|
+
}, [onColumnSizingChange, onDataStateChange, tableStateChange, columnSizing]);
|
|
315
334
|
const handlePaginationChange = (0, react_1.useCallback)((updater) => {
|
|
316
335
|
const newPagination = typeof updater === 'function' ? updater(pagination) : updater;
|
|
317
336
|
if (logger.isLevelEnabled('debug')) {
|
|
@@ -321,7 +340,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
321
340
|
serverSide: isServerMode || isServerPagination,
|
|
322
341
|
});
|
|
323
342
|
}
|
|
324
|
-
console.log('newPagination', newPagination);
|
|
325
343
|
setPagination(newPagination);
|
|
326
344
|
onPaginationChange === null || onPaginationChange === void 0 ? void 0 : onPaginationChange(newPagination);
|
|
327
345
|
if (logger.isLevelEnabled('debug')) {
|
|
@@ -430,7 +448,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
430
448
|
}
|
|
431
449
|
}, 0);
|
|
432
450
|
}, [isServerFiltering, fetchData, tableStateChange]);
|
|
433
|
-
const table = (0, react_table_1.useReactTable)(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ _features: [column_filter_feature_1.ColumnFilterFeature, features_1.SelectionFeature], data: tableData, columns: enhancedColumns, initialState: Object.assign({}, DEFAULT_INITIAL_STATE), state: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (enableSorting ? { sorting } : {})), (enablePagination ? { pagination } : {})), (enableGlobalFilter ? { globalFilter } : {})), (enableExpanding ? { expanded } : {})), (enableColumnDragging ? { columnOrder } : {})), (enableColumnPinning ? { columnPinning } : {})), (enableColumnFilter ? { columnFilter } : {})), (enableRowSelection ? { selectionState } : {})), selectMode: selectMode, enableAdvanceSelection: !!enableRowSelection, isRowSelectable: isRowSelectable }, (enableRowSelection ? { onSelectionStateChange: handleSelectionStateChange } : {})), { enableAdvanceColumnFilter: enableColumnFilter, onColumnFilterChange: onColumnFilterChangeHandler, onColumnFilterApply: onColumnFilterApplyHandler }), (enableSorting ? { onSortingChange: handleSortingChange } : {})), (enablePagination ? { onPaginationChange: handlePaginationChange } : {})), (enableRowSelection ? { onRowSelectionChange: handleSelectionStateChange } : {})), (enableGlobalFilter ? { onGlobalFilterChange: handleGlobalFilterChange } : {})), (enableExpanding ? { onExpandedChange: setExpanded } : {})), (enableColumnDragging ? { onColumnOrderChange: handleColumnOrderChange } : {})), (enableColumnPinning ? { onColumnPinningChange: handleColumnPinningChange } : {})), (enableColumnVisibility ? { onColumnVisibilityChange: handleColumnVisibilityChange } : {})), { getCoreRowModel: (0, react_table_1.getCoreRowModel)() }), (enableSorting ? { getSortedRowModel: (0, react_table_1.getSortedRowModel)() } : {})), (enableColumnFilter ? { getFilteredRowModel: (0, column_filter_feature_1.getCombinedFilteredRowModel)() } : {})), (enablePagination ? { getPaginationRowModel: (0, react_table_1.getPaginationRowModel)() } : {})), { enableSorting: enableSorting, manualSorting: isServerSorting, manualFiltering: isServerFiltering, enableColumnResizing: enableColumnResizing, columnResizeMode: columnResizeMode, enableColumnPinning: enableColumnPinning }), (enableExpanding ? { getRowCanExpand: getRowCanExpand } : {})), { manualPagination: isServerPagination, autoResetPageIndex: false, rowCount: tableTotalRow, getRowId: (row, index) => (0, utils_1.generateRowId)(row, index, idKey), debugAll: false }));
|
|
451
|
+
const table = (0, react_table_1.useReactTable)(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ _features: [column_filter_feature_1.ColumnFilterFeature, features_1.SelectionFeature], data: tableData, columns: enhancedColumns, initialState: Object.assign({}, DEFAULT_INITIAL_STATE), state: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (enableSorting ? { sorting } : {})), (enablePagination ? { pagination } : {})), (enableGlobalFilter ? { globalFilter } : {})), (enableExpanding ? { expanded } : {})), (enableColumnDragging ? { columnOrder } : {})), (enableColumnPinning ? { columnPinning } : {})), (enableColumnVisibility ? { columnVisibility } : {})), (enableColumnResizing ? { columnSizing } : {})), (enableColumnFilter ? { columnFilter } : {})), (enableRowSelection ? { selectionState } : {})), selectMode: selectMode, enableAdvanceSelection: !!enableRowSelection, isRowSelectable: isRowSelectable }, (enableRowSelection ? { onSelectionStateChange: handleSelectionStateChange } : {})), { enableAdvanceColumnFilter: enableColumnFilter, onColumnFilterChange: onColumnFilterChangeHandler, onColumnFilterApply: onColumnFilterApplyHandler }), (enableSorting ? { onSortingChange: handleSortingChange } : {})), (enablePagination ? { onPaginationChange: handlePaginationChange } : {})), (enableRowSelection ? { onRowSelectionChange: handleSelectionStateChange } : {})), (enableGlobalFilter ? { onGlobalFilterChange: handleGlobalFilterChange } : {})), (enableExpanding ? { onExpandedChange: setExpanded } : {})), (enableColumnDragging ? { onColumnOrderChange: handleColumnOrderChange } : {})), (enableColumnPinning ? { onColumnPinningChange: handleColumnPinningChange } : {})), (enableColumnVisibility ? { onColumnVisibilityChange: handleColumnVisibilityChange } : {})), (enableColumnResizing ? { onColumnSizingChange: handleColumnSizingChange } : {})), { getCoreRowModel: (0, react_table_1.getCoreRowModel)() }), (enableSorting ? { getSortedRowModel: (0, react_table_1.getSortedRowModel)() } : {})), (enableColumnFilter ? { getFilteredRowModel: (0, column_filter_feature_1.getCombinedFilteredRowModel)() } : {})), (enablePagination ? { getPaginationRowModel: (0, react_table_1.getPaginationRowModel)() } : {})), { enableSorting: enableSorting, manualSorting: isServerSorting, manualFiltering: isServerFiltering, enableColumnResizing: enableColumnResizing, columnResizeMode: columnResizeMode, enableColumnPinning: enableColumnPinning }), (enableExpanding ? { getRowCanExpand: getRowCanExpand } : {})), { manualPagination: isServerPagination, autoResetPageIndex: false, rowCount: tableTotalRow, getRowId: (row, index) => (0, utils_1.generateRowId)(row, index, idKey), debugAll: false }));
|
|
434
452
|
const rows = ((_a = table.getRowModel()) === null || _a === void 0 ? void 0 : _a.rows) || [];
|
|
435
453
|
const rowVirtualizer = (0, react_virtual_1.useVirtualizer)({
|
|
436
454
|
count: rows.length,
|
|
@@ -449,8 +467,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
449
467
|
const newPagination = { pageIndex: 0, pageSize: pagination.pageSize };
|
|
450
468
|
setPagination(newPagination);
|
|
451
469
|
onPaginationChange === null || onPaginationChange === void 0 ? void 0 : onPaginationChange(newPagination);
|
|
452
|
-
console.log('newPagination', newPagination);
|
|
453
|
-
console.log('onPaginationChange', onPaginationChange);
|
|
454
470
|
return newPagination;
|
|
455
471
|
};
|
|
456
472
|
const handleColumnReorder = (0, react_1.useCallback)((draggedColumnId, targetColumnId) => {
|
|
@@ -57,6 +57,7 @@ export interface DataTableProps<T> {
|
|
|
57
57
|
bulkActions?: (selectionState: SelectionState) => ReactNode;
|
|
58
58
|
enableColumnResizing?: boolean;
|
|
59
59
|
columnResizeMode?: ColumnResizeMode;
|
|
60
|
+
onColumnSizingChange?: (sizing: Record<string, number>) => void;
|
|
60
61
|
enableColumnDragging?: boolean;
|
|
61
62
|
onColumnDragEnd?: (columnOrder: string[]) => void;
|
|
62
63
|
enableColumnPinning?: boolean;
|
|
@@ -151,35 +151,30 @@ function ServerSideFetchingExample() {
|
|
|
151
151
|
id: 'name',
|
|
152
152
|
accessorKey: 'name',
|
|
153
153
|
header: 'Name',
|
|
154
|
-
size: 200,
|
|
155
154
|
enableGlobalFilter: true,
|
|
156
155
|
},
|
|
157
156
|
{
|
|
158
157
|
id: 'email',
|
|
159
158
|
accessorKey: 'email',
|
|
160
159
|
header: 'Email',
|
|
161
|
-
size: 250,
|
|
162
160
|
enableGlobalFilter: true,
|
|
163
161
|
},
|
|
164
162
|
{
|
|
165
163
|
id: 'department',
|
|
166
164
|
accessorKey: 'department',
|
|
167
165
|
header: 'Department',
|
|
168
|
-
size: 150,
|
|
169
166
|
enableGlobalFilter: true,
|
|
170
167
|
},
|
|
171
168
|
{
|
|
172
169
|
id: 'role',
|
|
173
170
|
accessorKey: 'role',
|
|
174
171
|
header: 'Role',
|
|
175
|
-
size: 120,
|
|
176
172
|
enableGlobalFilter: true,
|
|
177
173
|
},
|
|
178
174
|
{
|
|
179
175
|
id: 'salary',
|
|
180
176
|
accessorKey: 'salary',
|
|
181
177
|
header: 'Salary',
|
|
182
|
-
size: 120,
|
|
183
178
|
accessorFn: (row) => `$${row.salary.toLocaleString()}`,
|
|
184
179
|
hideInExport: true,
|
|
185
180
|
},
|
|
@@ -187,7 +182,6 @@ function ServerSideFetchingExample() {
|
|
|
187
182
|
id: 'isActive',
|
|
188
183
|
accessorKey: 'isActive',
|
|
189
184
|
header: 'Status',
|
|
190
|
-
size: 100,
|
|
191
185
|
accessorFn: (row) => row.isActive ? 'Active' : 'Inactive',
|
|
192
186
|
cell: ({ getValue }) => ((0, jsx_runtime_1.jsx)(material_1.Chip, { label: getValue() ? 'Active' : 'Inactive', color: getValue() ? 'success' : 'default', size: "small" })),
|
|
193
187
|
},
|
|
@@ -195,7 +189,6 @@ function ServerSideFetchingExample() {
|
|
|
195
189
|
id: 'joinDate',
|
|
196
190
|
accessorKey: 'joinDate',
|
|
197
191
|
header: 'Join Date',
|
|
198
|
-
size: 120,
|
|
199
192
|
accessorFn: (row) => new Date(row.joinDate).toLocaleDateString(),
|
|
200
193
|
},
|
|
201
194
|
];
|
|
@@ -28,30 +28,28 @@ const columns = [
|
|
|
28
28
|
{
|
|
29
29
|
accessorKey: 'name',
|
|
30
30
|
header: 'Product Name',
|
|
31
|
-
size: 180,
|
|
32
31
|
},
|
|
33
32
|
{
|
|
34
33
|
accessorKey: 'category',
|
|
35
34
|
header: 'Category',
|
|
36
|
-
size: 120,
|
|
37
35
|
cell: ({ getValue }) => ((0, jsx_runtime_1.jsx)(material_1.Chip, { label: getValue(), size: "small", variant: "outlined", color: "primary" })),
|
|
38
36
|
},
|
|
39
37
|
{
|
|
40
38
|
accessorKey: 'price',
|
|
41
39
|
header: 'Price',
|
|
42
|
-
size: 100,
|
|
43
40
|
cell: ({ getValue }) => `$${getValue().toFixed(2)}`,
|
|
44
41
|
},
|
|
45
42
|
{
|
|
46
43
|
accessorKey: 'inStock',
|
|
47
44
|
header: 'In Stock',
|
|
48
|
-
size: 100,
|
|
49
45
|
cell: ({ getValue }) => ((0, jsx_runtime_1.jsx)(material_1.Chip, { label: getValue() ? 'Yes' : 'No', color: getValue() ? 'success' : 'error', size: "small" })),
|
|
50
46
|
},
|
|
51
47
|
{
|
|
52
48
|
accessorKey: 'rating',
|
|
53
49
|
header: 'Rating',
|
|
54
50
|
size: 100,
|
|
51
|
+
minSize: 100,
|
|
52
|
+
maxSize: 100,
|
|
55
53
|
cell: ({ getValue }) => `⭐ ${getValue().toFixed(1)}`,
|
|
56
54
|
},
|
|
57
55
|
];
|
|
@@ -62,6 +62,8 @@ export interface ChunkProcessingConfig {
|
|
|
62
62
|
}
|
|
63
63
|
export interface PinnedColumnStyleOptions {
|
|
64
64
|
width?: number | string;
|
|
65
|
+
minWidth?: number;
|
|
66
|
+
maxWidth?: number;
|
|
65
67
|
isPinned?: 'left' | 'right' | false;
|
|
66
68
|
pinnedPosition?: number;
|
|
67
69
|
pinnedRightPosition?: number;
|
|
@@ -2,5 +2,5 @@ import { DataTableColumn } from '../types';
|
|
|
2
2
|
export interface SelectionColumnConfig<T> {
|
|
3
3
|
multiSelect?: boolean;
|
|
4
4
|
}
|
|
5
|
-
export declare const createSelectionColumn: <T>(config: Partial<DataTableColumn<T>> & SelectionColumnConfig<T>) => DataTableColumn<T>;
|
|
5
|
+
export declare const createSelectionColumn: <T>(config: Partial<DataTableColumn<T>> & SelectionColumnConfig<T>) => DataTableColumn<T, any>;
|
|
6
6
|
export declare const createExpandingColumn: <T>(config: Partial<DataTableColumn<T>>) => DataTableColumn<T>;
|
|
@@ -5,7 +5,7 @@ const icons_material_1 = require("@mui/icons-material");
|
|
|
5
5
|
const material_1 = require("@mui/material");
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const types_1 = require("../types");
|
|
8
|
-
const createSelectionColumn = (config) => (Object.assign({ id: types_1.DEFAULT_SELECTION_COLUMN_NAME, size: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: ({ table }) => {
|
|
8
|
+
const createSelectionColumn = (config) => (Object.assign({ id: types_1.DEFAULT_SELECTION_COLUMN_NAME, size: 60, minSize: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: ({ table }) => {
|
|
9
9
|
var _a, _b;
|
|
10
10
|
if (!config.multiSelect)
|
|
11
11
|
return null;
|
|
@@ -44,7 +44,7 @@ const createSelectionColumn = (config) => (Object.assign({ id: types_1.DEFAULT_S
|
|
|
44
44
|
});
|
|
45
45
|
} }, config));
|
|
46
46
|
exports.createSelectionColumn = createSelectionColumn;
|
|
47
|
-
const createExpandingColumn = (config) => (Object.assign({ id: types_1.DEFAULT_EXPANDING_COLUMN_NAME, size: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: '', cell: ({ row }) => (0, react_1.createElement)(material_1.IconButton, {
|
|
47
|
+
const createExpandingColumn = (config) => (Object.assign({ id: types_1.DEFAULT_EXPANDING_COLUMN_NAME, size: 60, minSize: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: '', cell: ({ row }) => (0, react_1.createElement)(material_1.IconButton, {
|
|
48
48
|
onClick: row.getToggleExpandedHandler(),
|
|
49
49
|
size: 'small',
|
|
50
50
|
sx: { p: 0 },
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import type { DataTableColumn, PinnedColumnStyleOptions } from '../types';
|
|
2
2
|
export declare function getPinnedColumnStyle(options: PinnedColumnStyleOptions): {
|
|
3
|
-
boxShadow: string;
|
|
4
3
|
backgroundColor: string;
|
|
4
|
+
backgroundClip: string;
|
|
5
|
+
boxShadow: string;
|
|
6
|
+
willChange: string;
|
|
7
|
+
transform: string;
|
|
5
8
|
left?: number;
|
|
6
9
|
right?: number;
|
|
7
10
|
zIndex?: number;
|
|
8
|
-
width: string | number;
|
|
9
|
-
maxWidth: string | number;
|
|
10
11
|
overflow: string;
|
|
11
12
|
whiteSpace: string;
|
|
13
|
+
textOverflow: string;
|
|
14
|
+
maxWidth?: string | number;
|
|
15
|
+
minWidth: number;
|
|
16
|
+
width: string | number;
|
|
12
17
|
};
|
|
13
18
|
export declare const tableCellStyles: {
|
|
14
19
|
readonly sticky: {
|
|
@@ -13,9 +13,9 @@ const getBoxShadow = (isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn
|
|
|
13
13
|
return 'none';
|
|
14
14
|
};
|
|
15
15
|
function getPinnedColumnStyle(options) {
|
|
16
|
-
const { width = 'auto', isPinned, pinnedPosition, pinnedRightPosition, isLastLeftPinnedColumn, isFirstRightPinnedColumn, zIndex = 1, disableStickyHeader = false, } = options;
|
|
16
|
+
const { width = 'auto', minWidth, maxWidth, isPinned, pinnedPosition, pinnedRightPosition, isLastLeftPinnedColumn, isFirstRightPinnedColumn, zIndex = 1, disableStickyHeader = false, } = options;
|
|
17
17
|
const needsPinnedPositioning = isPinned;
|
|
18
|
-
const shouldBeSticky = isPinned;
|
|
18
|
+
const shouldBeSticky = !!isPinned;
|
|
19
19
|
let positionStyle = {};
|
|
20
20
|
if (shouldBeSticky) {
|
|
21
21
|
positionStyle = { position: 'sticky' };
|
|
@@ -23,13 +23,15 @@ function getPinnedColumnStyle(options) {
|
|
|
23
23
|
else if (!disableStickyHeader) {
|
|
24
24
|
positionStyle = { position: 'relative' };
|
|
25
25
|
}
|
|
26
|
-
return Object.assign(Object.assign(Object.assign(Object.assign({ width, maxWidth: width, overflow: 'hidden', whiteSpace: 'nowrap' }, positionStyle), (needsPinnedPositioning ? {
|
|
26
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ width }, (minWidth !== undefined && { minWidth })), (maxWidth !== undefined ? { maxWidth } : width !== 'auto' ? { maxWidth: width } : {})), { overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }), positionStyle), (needsPinnedPositioning ? {
|
|
27
27
|
left: isPinned === 'left' ? pinnedPosition : undefined,
|
|
28
28
|
right: isPinned === 'right' ? pinnedRightPosition : undefined,
|
|
29
29
|
zIndex,
|
|
30
|
-
} : {})), (isPinned &&
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
} : {})), { backgroundColor: isPinned ? 'background.paper' : 'var(--row-bg, var(--mui-palette-background-paper))', backgroundClip: 'padding-box', boxShadow: isPinned === 'left' && isLastLeftPinnedColumn
|
|
31
|
+
? 'inset -1px 0 0 var(--palette-TableCell-border), 6px 0 6px -4px rgba(0,0,0,.18)'
|
|
32
|
+
: isPinned === 'right' && isFirstRightPinnedColumn
|
|
33
|
+
? 'inset 1px 0 0 var(--palette-TableCell-border), -6px 0 6px -4px rgba(0,0,0,.18)'
|
|
34
|
+
: undefined, willChange: 'transform', transform: 'translateZ(0)' });
|
|
33
35
|
}
|
|
34
36
|
exports.tableCellStyles = {
|
|
35
37
|
sticky: {
|