@ackplus/react-tanstack-data-table 1.0.19-beta-0.9 → 1.0.19-beta-0.12

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.
Files changed (38) hide show
  1. package/README.md +4 -4
  2. package/package.json +1 -1
  3. package/src/index.d.ts +1 -0
  4. package/src/index.js +3 -1
  5. package/src/lib/components/table/data-table.d.ts +2 -1
  6. package/src/lib/components/table/data-table.js +141 -121
  7. package/src/lib/components/table/data-table.types.d.ts +9 -9
  8. package/src/lib/components/toolbar/bulk-actions-toolbar.d.ts +1 -1
  9. package/src/lib/components/toolbar/column-filter-control.d.ts +1 -0
  10. package/src/lib/components/toolbar/{column-custom-filter-control.js → column-filter-control.js} +22 -20
  11. package/src/lib/components/toolbar/data-table-toolbar.js +2 -2
  12. package/src/lib/components/toolbar/index.d.ts +1 -0
  13. package/src/lib/components/toolbar/index.js +3 -1
  14. package/src/lib/components/toolbar/table-export-control.d.ts +4 -4
  15. package/src/lib/components/toolbar/table-export-control.js +18 -6
  16. package/src/lib/contexts/data-table-context.d.ts +8 -8
  17. package/src/lib/contexts/data-table-context.js +5 -5
  18. package/src/lib/examples/index.d.ts +1 -0
  19. package/src/lib/examples/index.js +3 -1
  20. package/src/lib/examples/server-side-fetching-example.d.ts +1 -0
  21. package/src/lib/examples/server-side-fetching-example.js +250 -0
  22. package/src/lib/examples/server-side-test.d.ts +1 -0
  23. package/src/lib/examples/server-side-test.js +9 -0
  24. package/src/lib/features/{custom-column-filter.feature.d.ts → column-filter.feature.d.ts} +14 -14
  25. package/src/lib/features/{custom-column-filter.feature.js → column-filter.feature.js} +51 -26
  26. package/src/lib/features/index.d.ts +2 -2
  27. package/src/lib/features/index.js +6 -6
  28. package/src/lib/features/{custom-selection.feature.d.ts → selection.feature.d.ts} +8 -8
  29. package/src/lib/features/{custom-selection.feature.js → selection.feature.js} +22 -10
  30. package/src/lib/hooks/use-data-table-api.d.ts +6 -6
  31. package/src/lib/hooks/use-data-table-api.js +20 -20
  32. package/src/lib/types/data-table-api.d.ts +4 -4
  33. package/src/lib/types/table.types.d.ts +4 -4
  34. package/src/lib/utils/column-helpers.d.ts +1 -2
  35. package/src/lib/utils/column-helpers.js +3 -2
  36. package/src/lib/utils/export-utils.d.ts +4 -4
  37. package/src/lib/utils/export-utils.js +47 -24
  38. package/src/lib/components/toolbar/column-custom-filter-control.d.ts +0 -1
package/README.md CHANGED
@@ -7,7 +7,7 @@ A powerful, feature-rich, and highly customizable React data table component bui
7
7
  - 🚀 **High Performance**: Built on TanStack Table for excellent performance with large datasets
8
8
  - 🎨 **Material Design**: Beautiful UI components using MUI with consistent design system
9
9
  - 📱 **Responsive**: Mobile-friendly responsive design with adaptive layouts
10
- - 🔍 **Advanced Filtering**: Global search, column filters, and custom filter components
10
+ - 🔍 **Advanced Filtering**: Global search, column filters, and filter components
11
11
  - 📊 **Multi-Column Sorting**: Powerful sorting with multiple columns support
12
12
  - 📄 **Flexible Pagination**: Client-side and server-side pagination options
13
13
  - 🎯 **Column Management**: Show/hide, resize, reorder, and pin columns
@@ -328,7 +328,7 @@ function SelectableTable() {
328
328
  }
329
329
  ```
330
330
 
331
- ### Custom Column Filters
331
+ ### Column Filters
332
332
 
333
333
  ```tsx
334
334
  const columns = [
@@ -573,10 +573,10 @@ If you find this package helpful and want to support its development, consider m
573
573
 
574
574
  <div align="center">
575
575
 
576
- [![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/my/profile)
576
+ [![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/ckhandla94)
577
577
  [![Razorpay](https://img.shields.io/badge/Razorpay-02042B?style=for-the-badge&logo=razorpay&logoColor=white)](https://razorpay.me/@ackplus)
578
578
 
579
- **[💳 PayPal](https://www.paypal.com/paypalme/my/profile)** • **[💳 Razorpay](https://razorpay.me/@ackplus)**
579
+ **[💳 PayPal](https://www.paypal.com/paypalme/ckhandla94)** • **[💳 Razorpay](https://razorpay.me/@ackplus)**
580
580
 
581
581
  </div>
582
582
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ackplus/react-tanstack-data-table",
3
3
  "type": "commonjs",
4
- "version": "1.0.19-beta-0.9",
4
+ "version": "1.0.19-beta-0.12",
5
5
  "description": "A powerful React data table component built with MUI and TanStack Table",
6
6
  "keywords": [
7
7
  "react",
package/src/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export * from './lib/hooks';
14
14
  export * from './lib/types';
15
15
  export type { Column, ColumnDef, Row, Table, Header, Cell, SortingState, ColumnFiltersState, VisibilityState, ColumnOrderState, ColumnPinningState, PaginationState, } from '@tanstack/react-table';
16
16
  export * from './lib/features';
17
+ export { ServerSideTest } from './lib/examples/server-side-test';
17
18
  export { CustomColumnFilterExample } from './lib/examples/custom-column-filter-example';
18
19
  export { SimpleLocalExample } from './lib/examples/simple-local-example';
19
20
  export { AdvancedFeaturesExample } from './lib/examples/advanced-features-example';
package/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AdvancedFeaturesExample = exports.SimpleLocalExample = exports.CustomColumnFilterExample = exports.DataTableToolbar = exports.BulkActionsToolbar = exports.TableSizeControl = exports.TableExportControl = exports.ColumnResetControl = exports.ColumnPinningControl = exports.ColumnVisibilityControl = exports.DataTable = void 0;
3
+ exports.AdvancedFeaturesExample = exports.SimpleLocalExample = exports.CustomColumnFilterExample = exports.ServerSideTest = exports.DataTableToolbar = exports.BulkActionsToolbar = exports.TableSizeControl = exports.TableExportControl = exports.ColumnResetControl = exports.ColumnPinningControl = exports.ColumnVisibilityControl = exports.DataTable = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var table_1 = require("./lib/components/table");
6
6
  Object.defineProperty(exports, "DataTable", { enumerable: true, get: function () { return table_1.DataTable; } });
@@ -23,6 +23,8 @@ tslib_1.__exportStar(require("./lib/utils/table-helpers"), exports);
23
23
  tslib_1.__exportStar(require("./lib/hooks"), exports);
24
24
  tslib_1.__exportStar(require("./lib/types"), exports);
25
25
  tslib_1.__exportStar(require("./lib/features"), exports);
26
+ var server_side_test_1 = require("./lib/examples/server-side-test");
27
+ Object.defineProperty(exports, "ServerSideTest", { enumerable: true, get: function () { return server_side_test_1.ServerSideTest; } });
26
28
  var custom_column_filter_example_1 = require("./lib/examples/custom-column-filter-example");
27
29
  Object.defineProperty(exports, "CustomColumnFilterExample", { enumerable: true, get: function () { return custom_column_filter_example_1.CustomColumnFilterExample; } });
28
30
  var simple_local_example_1 = require("./lib/examples/simple-local-example");
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { DataTableProps } from './data-table.types';
2
3
  import { DataTableApi } from '../../types/data-table-api';
3
- export declare const DataTable: import("react").ForwardRefExoticComponent<DataTableProps<any> & import("react").RefAttributes<DataTableApi<any>>>;
4
+ export declare const DataTable: React.ForwardRefExoticComponent<DataTableProps<any> & React.RefAttributes<DataTableApi<any>>>;
@@ -5,7 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const material_1 = require("@mui/material");
7
7
  const react_table_1 = require("@tanstack/react-table");
8
- const custom_column_filter_feature_1 = require("../../features/custom-column-filter.feature");
8
+ const column_filter_feature_1 = require("../../features/column-filter.feature");
9
9
  const features_1 = require("../../features");
10
10
  const react_virtual_1 = require("@tanstack/react-virtual");
11
11
  const react_1 = require("react");
@@ -40,40 +40,108 @@ const DEFAULT_INITIAL_STATE = {
40
40
  pendingLogic: 'AND',
41
41
  },
42
42
  };
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 = null, enableColumnResizing = false, columnResizeMode = 'onChange', enableColumnDragging = false, onColumnDragEnd, enableColumnPinning = false, onColumnPinningChange, enableExpanding = false, getRowCanExpand, renderSubComponent, enablePagination = true, paginationMode = 'client', enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client', enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, enableHover = true, enableStripes = false, tableContainerProps = {}, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium', enableStickyHeaderOrFooter = false, maxHeight = '400px', enableVirtualization = false, estimateRowHeight = 52, enableColumnVisibility = true, enableTableSizeControl = true, enableExport = true, enableReset = true, loading = false, emptyMessage = 'No data available', skeletonRows = 5, onColumnFiltersChange, onDataChange, slots = {}, slotProps = {}, }, ref) {
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, enableExpanding = false, getRowCanExpand, renderSubComponent, enablePagination = true, paginationMode = 'client', enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client', enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, enableHover = true, enableStripes = false, tableContainerProps = {}, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium', enableStickyHeaderOrFooter = false, maxHeight = '400px', enableVirtualization = false, estimateRowHeight = 52, enableColumnVisibility = true, enableTableSizeControl = true, enableExport = true, enableReset = true, loading = false, emptyMessage = 'No data available', skeletonRows = 5, onColumnFiltersChange, onDataChange, slots = {}, slotProps = {}, }, ref) {
44
44
  var _a;
45
45
  const isServerMode = dataMode === 'server';
46
46
  const isServerPagination = paginationMode === 'server' || isServerMode;
47
47
  const isServerFiltering = filterMode === 'server' || isServerMode;
48
48
  const isServerSorting = sortingMode === 'server' || isServerMode;
49
- const tableContainerRef = (0, react_1.useRef)(null);
50
- const initialStateConfig = (0, react_1.useMemo)(() => {
51
- return Object.assign(Object.assign({}, DEFAULT_INITIAL_STATE), initialState);
52
- }, [initialState]);
53
- const [sorting, setSorting] = (0, react_1.useState)(initialStateConfig.sorting);
54
- const [pagination, setPagination] = (0, react_1.useState)(initialStateConfig.pagination);
55
- const [globalFilter, setGlobalFilter] = (0, react_1.useState)(initialStateConfig.globalFilter);
49
+ const [sorting, setSorting] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.sorting);
50
+ const [pagination, setPagination] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.pagination);
51
+ const [globalFilter, setGlobalFilter] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.globalFilter);
56
52
  const [selectionState, setSelectionState] = (0, react_1.useState)((initialState === null || initialState === void 0 ? void 0 : initialState.selectionState) || { ids: [], type: 'include' });
57
- const [customColumnsFilter, setCustomColumnsFilter] = (0, react_1.useState)({
53
+ const [columnFilter, setColumnFilter] = (0, react_1.useState)({
58
54
  filters: [],
59
55
  logic: 'AND',
60
56
  pendingFilters: [],
61
57
  pendingLogic: 'AND'
62
58
  });
63
- const [expanded, setExpanded] = (0, react_1.useState)(initialStateConfig.expanded);
59
+ const [expanded, setExpanded] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.expanded);
64
60
  const [tableSize, setTableSize] = (0, react_1.useState)(initialTableSize);
65
- const [columnOrder, setColumnOrder] = (0, react_1.useState)(initialStateConfig.columnOrder);
66
- const [columnPinning, setColumnPinning] = (0, react_1.useState)(initialStateConfig.columnPinning);
67
- const internalApiRef = (0, react_1.useRef)(null);
68
- const { debouncedFetch, isLoading: fetchLoading } = (0, debounced_fetch_utils_1.useDebouncedFetch)(onFetchData);
61
+ const [columnOrder, setColumnOrder] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.columnOrder);
62
+ const [columnPinning, setColumnPinning] = (0, react_1.useState)(DEFAULT_INITIAL_STATE.columnPinning);
69
63
  const [serverData, setServerData] = (0, react_1.useState)([]);
70
64
  const [serverTotal, setServerTotal] = (0, react_1.useState)(0);
65
+ const [exportController, setExportController] = (0, react_1.useState)(null);
66
+ const tableContainerRef = (0, react_1.useRef)(null);
67
+ const internalApiRef = (0, react_1.useRef)(null);
68
+ const initialStateConfig = (0, react_1.useMemo)(() => {
69
+ return Object.assign(Object.assign({}, DEFAULT_INITIAL_STATE), initialState);
70
+ }, [initialState]);
71
+ (0, react_1.useEffect)(() => {
72
+ setSorting(initialStateConfig.sorting);
73
+ setPagination(initialStateConfig.pagination);
74
+ setGlobalFilter(initialStateConfig.globalFilter);
75
+ setExpanded(initialStateConfig.expanded);
76
+ setColumnOrder(initialStateConfig.columnOrder);
77
+ setColumnPinning(initialStateConfig.columnPinning);
78
+ }, [initialStateConfig]);
79
+ const { debouncedFetch, isLoading: fetchLoading } = (0, debounced_fetch_utils_1.useDebouncedFetch)(onFetchData);
80
+ const tableData = (0, react_1.useMemo)(() => onFetchData ? serverData : data, [onFetchData, serverData, data]);
81
+ const tableTotalRow = (0, react_1.useMemo)(() => onFetchData ? serverTotal : totalRow, [onFetchData, serverTotal, totalRow]);
82
+ const tableLoading = (0, react_1.useMemo)(() => onFetchData ? (loading || fetchLoading) : loading, [onFetchData, loading, fetchLoading]);
83
+ const enhancedColumns = (0, react_1.useMemo)(() => {
84
+ let columnsMap = [...columns];
85
+ if (enableExpanding) {
86
+ const expandingColumnMap = (0, special_columns_utils_1.createExpandingColumn)(Object.assign({}, ((slotProps === null || slotProps === void 0 ? void 0 : slotProps.expandColumn) || {})));
87
+ columnsMap = [expandingColumnMap, ...columnsMap];
88
+ }
89
+ if (enableRowSelection) {
90
+ const selectionColumnMap = (0, special_columns_utils_1.createSelectionColumn)(Object.assign(Object.assign({}, ((slotProps === null || slotProps === void 0 ? void 0 : slotProps.selectionColumn) || {})), { multiSelect: enableMultiRowSelection }));
91
+ columnsMap = [selectionColumnMap, ...columnsMap];
92
+ }
93
+ return columnsMap;
94
+ }, [
95
+ columns,
96
+ slotProps === null || slotProps === void 0 ? void 0 : slotProps.selectionColumn,
97
+ slotProps === null || slotProps === void 0 ? void 0 : slotProps.expandColumn,
98
+ enableRowSelection,
99
+ enableExpanding,
100
+ enableMultiRowSelection,
101
+ ]);
102
+ const isExporting = (0, react_1.useMemo)(() => exportController !== null, [exportController]);
103
+ const isSomeRowsSelected = (0, react_1.useMemo)(() => {
104
+ if (!enableBulkActions || !enableRowSelection)
105
+ return false;
106
+ if (selectionState.type === 'exclude') {
107
+ return selectionState.ids.length < tableTotalRow;
108
+ }
109
+ else {
110
+ return selectionState.ids.length > 0;
111
+ }
112
+ }, [enableBulkActions, enableRowSelection, selectionState, tableTotalRow]);
113
+ const selectedRowCount = (0, react_1.useMemo)(() => {
114
+ if (!enableBulkActions || !enableRowSelection)
115
+ return 0;
116
+ if (selectionState.type === 'exclude') {
117
+ return tableTotalRow - selectionState.ids.length;
118
+ }
119
+ else {
120
+ return selectionState.ids.length;
121
+ }
122
+ }, [enableBulkActions, enableRowSelection, selectionState, tableTotalRow]);
123
+ const tableWidth = (0, react_1.useMemo)(() => {
124
+ if (fitToScreen) {
125
+ return '100%';
126
+ }
127
+ if (enableColumnResizing) {
128
+ return table.getCenterTotalSize();
129
+ }
130
+ return '100%';
131
+ }, [
132
+ fitToScreen,
133
+ enableColumnResizing,
134
+ ]);
135
+ const tableStyle = (0, react_1.useMemo)(() => ({
136
+ width: tableWidth,
137
+ minWidth: '100%',
138
+ }), [tableWidth]);
71
139
  const fetchData = (0, react_1.useCallback)((...args_1) => tslib_1.__awaiter(this, [...args_1], void 0, function* (overrides = {}) {
72
140
  if (!onFetchData)
73
141
  return;
74
142
  const filters = Object.assign({ globalFilter,
75
143
  pagination,
76
- customColumnsFilter,
144
+ columnFilter,
77
145
  sorting }, overrides);
78
146
  const result = yield debouncedFetch(filters);
79
147
  if ((result === null || result === void 0 ? void 0 : result.data) && (result === null || result === void 0 ? void 0 : result.total) !== undefined) {
@@ -84,59 +152,39 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
84
152
  onFetchData,
85
153
  globalFilter,
86
154
  pagination,
87
- customColumnsFilter,
155
+ columnFilter,
88
156
  sorting,
89
157
  debouncedFetch,
90
158
  ]);
91
159
  const fetchDataRef = (0, react_1.useRef)(fetchData);
92
160
  fetchDataRef.current = fetchData;
93
- const tableData = (0, react_1.useMemo)(() => onFetchData ? serverData : data, [onFetchData, serverData, data]);
94
- const tableTotalRow = (0, react_1.useMemo)(() => onFetchData ? serverTotal : totalRow, [onFetchData, serverTotal, totalRow]);
95
- const tableLoading = (0, react_1.useMemo)(() => onFetchData ? (loading || fetchLoading) : loading, [onFetchData, loading, fetchLoading]);
96
161
  const handleSelectionStateChange = (0, react_1.useCallback)((updaterOrValue) => {
97
162
  setSelectionState((prevState) => {
98
163
  const newSelectionState = typeof updaterOrValue === 'function'
99
164
  ? updaterOrValue(prevState)
100
165
  : updaterOrValue;
101
- if (onSelectionChange) {
102
- onSelectionChange(newSelectionState);
103
- }
166
+ setTimeout(() => {
167
+ if (onSelectionChange) {
168
+ onSelectionChange(newSelectionState);
169
+ }
170
+ }, 0);
104
171
  return newSelectionState;
105
172
  });
106
173
  }, [onSelectionChange]);
107
174
  const handleColumnFilterStateChange = (0, react_1.useCallback)((filterState) => {
108
175
  if (filterState && typeof filterState === 'object') {
109
- setCustomColumnsFilter(filterState);
110
- if (onColumnFiltersChange) {
111
- onColumnFiltersChange(filterState);
112
- }
113
- }
114
- }, [
115
- onColumnFiltersChange,
116
- ]);
117
- const enhancedColumns = (0, react_1.useMemo)(() => {
118
- let columnsMap = [...columns];
119
- if (enableExpanding) {
120
- const expandingColumnMap = (0, special_columns_utils_1.createExpandingColumn)(Object.assign({}, ((slotProps === null || slotProps === void 0 ? void 0 : slotProps.expandColumn) || {})));
121
- columnsMap = [expandingColumnMap, ...columnsMap];
122
- }
123
- if (enableRowSelection) {
124
- const selectionColumnMap = (0, special_columns_utils_1.createSelectionColumn)(Object.assign(Object.assign({}, ((slotProps === null || slotProps === void 0 ? void 0 : slotProps.selectionColumn) || {})), { multiSelect: enableMultiRowSelection }));
125
- columnsMap = [selectionColumnMap, ...columnsMap];
176
+ setColumnFilter(filterState);
177
+ setTimeout(() => {
178
+ if (onColumnFiltersChange) {
179
+ onColumnFiltersChange(filterState);
180
+ }
181
+ }, 0);
126
182
  }
127
- return columnsMap;
128
- }, [
129
- columns,
130
- slotProps === null || slotProps === void 0 ? void 0 : slotProps.selectionColumn,
131
- slotProps === null || slotProps === void 0 ? void 0 : slotProps.expandColumn,
132
- enableRowSelection,
133
- enableExpanding,
134
- enableMultiRowSelection,
135
- ]);
183
+ }, [onColumnFiltersChange]);
136
184
  const notifyDataStateChange = (0, react_1.useCallback)((overrides = {}) => {
137
185
  if (onDataStateChange) {
138
186
  const currentState = Object.assign({ globalFilter,
139
- customColumnsFilter,
187
+ columnFilter,
140
188
  sorting,
141
189
  pagination,
142
190
  columnOrder,
@@ -146,7 +194,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
146
194
  }, [
147
195
  onDataStateChange,
148
196
  globalFilter,
149
- customColumnsFilter,
197
+ columnFilter,
150
198
  sorting,
151
199
  pagination,
152
200
  columnOrder,
@@ -171,7 +219,9 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
171
219
  });
172
220
  }
173
221
  else if (onDataStateChange) {
174
- stateChangeRef.current({ sorting: newSorting });
222
+ setTimeout(() => {
223
+ stateChangeRef.current({ sorting: newSorting });
224
+ }, 0);
175
225
  }
176
226
  }, [
177
227
  sorting,
@@ -181,17 +231,23 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
181
231
  onDataStateChange,
182
232
  ]);
183
233
  const handleColumnOrderChange = (0, react_1.useCallback)((updatedColumnOrder) => {
184
- setColumnOrder(updatedColumnOrder);
234
+ const newColumnOrder = typeof updatedColumnOrder === 'function'
235
+ ? updatedColumnOrder(columnOrder)
236
+ : updatedColumnOrder;
237
+ setColumnOrder(newColumnOrder);
185
238
  if (onColumnDragEnd) {
186
- onColumnDragEnd(updatedColumnOrder);
239
+ onColumnDragEnd(newColumnOrder);
187
240
  }
188
- }, [onColumnDragEnd]);
241
+ }, [onColumnDragEnd, columnOrder]);
189
242
  const handleColumnPinningChange = (0, react_1.useCallback)((updatedColumnPinning) => {
190
- setColumnPinning(updatedColumnPinning);
243
+ const newColumnPinning = typeof updatedColumnPinning === 'function'
244
+ ? updatedColumnPinning(columnPinning)
245
+ : updatedColumnPinning;
246
+ setColumnPinning(newColumnPinning);
191
247
  if (onColumnPinningChange) {
192
- onColumnPinningChange(updatedColumnPinning);
248
+ onColumnPinningChange(newColumnPinning);
193
249
  }
194
- }, [onColumnPinningChange]);
250
+ }, [onColumnPinningChange, columnPinning]);
195
251
  const handlePaginationChange = (0, react_1.useCallback)((updater) => {
196
252
  setPagination(updater);
197
253
  const newPagination = typeof updater === 'function' ? updater(pagination) : updater;
@@ -213,15 +269,19 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
213
269
  : updaterOrValue;
214
270
  setGlobalFilter(newFilter);
215
271
  if (isServerMode || isServerFiltering) {
216
- stateChangeRef.current({ globalFilter: newFilter });
217
- fetchDataRef === null || fetchDataRef === void 0 ? void 0 : fetchDataRef.current({ globalFilter: newFilter });
272
+ setTimeout(() => {
273
+ stateChangeRef.current({ globalFilter: newFilter });
274
+ fetchDataRef === null || fetchDataRef === void 0 ? void 0 : fetchDataRef.current({ globalFilter: newFilter });
275
+ }, 0);
218
276
  }
219
277
  else if (onDataStateChange) {
220
- stateChangeRef.current({ globalFilter: newFilter });
278
+ setTimeout(() => {
279
+ stateChangeRef.current({ globalFilter: newFilter });
280
+ }, 0);
221
281
  }
222
282
  }, [globalFilter, isServerMode, isServerFiltering, onDataStateChange]);
223
- const onCustomColumnFilterChangeHandler = (0, react_1.useCallback)((updater) => {
224
- const currentState = customColumnsFilter;
283
+ const onColumnFilterChangeHandler = (0, react_1.useCallback)((updater) => {
284
+ const currentState = columnFilter;
225
285
  const newState = typeof updater === 'function'
226
286
  ? updater(currentState)
227
287
  : updater;
@@ -232,8 +292,8 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
232
292
  pendingLogic: newState.pendingLogic
233
293
  };
234
294
  handleColumnFilterStateChange(legacyFilterState);
235
- }, [customColumnsFilter, handleColumnFilterStateChange]);
236
- const onCustomColumnFilterApplyHandler = (0, react_1.useCallback)((appliedState) => {
295
+ }, [columnFilter, handleColumnFilterStateChange]);
296
+ const onColumnFilterApplyHandler = (0, react_1.useCallback)((appliedState) => {
237
297
  if (isServerFiltering) {
238
298
  const serverFilterState = {
239
299
  filters: appliedState.filters,
@@ -242,23 +302,26 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
242
302
  pendingLogic: appliedState.pendingLogic,
243
303
  };
244
304
  stateChangeRef.current({
245
- customColumnsFilter: serverFilterState,
305
+ columnFilter: serverFilterState,
246
306
  });
247
307
  fetchDataRef === null || fetchDataRef === void 0 ? void 0 : fetchDataRef.current({
248
- customColumnsFilter: serverFilterState,
308
+ columnFilter: serverFilterState,
249
309
  });
250
310
  }
251
311
  }, [isServerFiltering]);
252
312
  const table = (0, react_table_1.useReactTable)({
253
- _features: [custom_column_filter_feature_1.CustomColumnFilterFeature, features_1.CustomSelectionFeature],
313
+ _features: [column_filter_feature_1.ColumnFilterFeature, features_1.SelectionFeature],
254
314
  data: tableData,
255
315
  columns: enhancedColumns,
256
316
  initialState: Object.assign({}, initialStateConfig),
257
- state: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sorting }, (enablePagination ? { pagination } : {})), (enableGlobalFilter ? { globalFilter } : {})), (enableExpanding ? { expanded } : {})), (enableColumnDragging ? { columnOrder } : {})), (enableColumnPinning ? { columnPinning } : {})), (enableColumnFilter ? { customColumnFilter: customColumnsFilter } : {})), (enableRowSelection ? { selectionState } : {})),
317
+ state: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sorting }, (enablePagination ? { pagination } : {})), (enableGlobalFilter ? { globalFilter } : {})), (enableExpanding ? { expanded } : {})), (enableColumnDragging ? { columnOrder } : {})), (enableColumnPinning ? { columnPinning } : {})), (enableColumnFilter ? { columnFilter } : {})), (enableRowSelection ? { selectionState } : {})),
258
318
  selectMode: selectMode,
259
- enableCustomSelection: !!enableRowSelection,
319
+ enableAdvanceSelection: !!enableRowSelection,
260
320
  isRowSelectable: isRowSelectable,
261
321
  onSelectionStateChange: enableRowSelection ? handleSelectionStateChange : undefined,
322
+ enableAdvanceColumnFilter: enableColumnFilter,
323
+ onColumnFilterChange: onColumnFilterChangeHandler,
324
+ onColumnFilterApply: onColumnFilterApplyHandler,
262
325
  onSortingChange: enableSorting ? handleSortingChange : undefined,
263
326
  onPaginationChange: enablePagination ? handlePaginationChange : undefined,
264
327
  onRowSelectionChange: enableRowSelection ? handleSelectionStateChange : undefined,
@@ -266,11 +329,9 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
266
329
  onExpandedChange: enableExpanding ? setExpanded : undefined,
267
330
  onColumnOrderChange: enableColumnDragging ? handleColumnOrderChange : undefined,
268
331
  onColumnPinningChange: enableColumnPinning ? handleColumnPinningChange : undefined,
269
- onCustomColumnFilterChange: onCustomColumnFilterChangeHandler,
270
- onCustomColumnFilterApply: onCustomColumnFilterApplyHandler,
271
332
  getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
272
333
  getSortedRowModel: (enableSorting && !isServerSorting) ? (0, react_table_1.getSortedRowModel)() : undefined,
273
- getFilteredRowModel: (enableColumnFilter && !isServerFiltering) ? (0, custom_column_filter_feature_1.getCombinedFilteredRowModel)() : undefined,
334
+ getFilteredRowModel: (enableColumnFilter && !isServerFiltering) ? (0, column_filter_feature_1.getCombinedFilteredRowModel)() : undefined,
274
335
  getPaginationRowModel: (enablePagination && !isServerPagination) ? (0, react_table_1.getPaginationRowModel)() : undefined,
275
336
  enableSorting: enableSorting,
276
337
  manualSorting: isServerSorting,
@@ -293,23 +354,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
293
354
  overscan: 10,
294
355
  enabled: enableVirtualization && !enablePagination && rows.length > 0,
295
356
  });
296
- const tableWidth = (0, react_1.useMemo)(() => {
297
- if (fitToScreen) {
298
- return '100%';
299
- }
300
- if (enableColumnResizing) {
301
- return table.getCenterTotalSize();
302
- }
303
- return '100%';
304
- }, [
305
- table,
306
- enableColumnResizing,
307
- fitToScreen,
308
- ]);
309
- const tableStyle = (0, react_1.useMemo)(() => ({
310
- width: tableWidth,
311
- minWidth: '100%',
312
- }), [tableWidth]);
313
357
  const handleColumnReorder = (0, react_1.useCallback)((draggedColumnId, targetColumnId) => {
314
358
  const currentOrder = columnOrder.length > 0 ? columnOrder : enhancedColumns.map((col, index) => {
315
359
  if (col.id)
@@ -333,7 +377,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
333
377
  if (initialLoadData && onFetchData) {
334
378
  fetchDataRef.current();
335
379
  }
336
- }, [initialLoadData]);
380
+ }, [initialLoadData, onFetchData]);
337
381
  (0, react_1.useEffect)(() => {
338
382
  if (enableColumnDragging && columnOrder.length === 0) {
339
383
  const initialOrder = enhancedColumns.map((col, index) => {
@@ -347,11 +391,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
347
391
  });
348
392
  setColumnOrder(initialOrder);
349
393
  }
350
- }, [
351
- enableColumnDragging,
352
- enhancedColumns,
353
- columnOrder.length,
354
- ]);
394
+ }, [enableColumnDragging, enhancedColumns, columnOrder.length]);
355
395
  const LoadingRowSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'loadingRow', rows_1.LoadingRows);
356
396
  const EmptyRowSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'emptyRow', rows_1.EmptyDataRow);
357
397
  const renderTableRows = (0, react_1.useCallback)(() => {
@@ -400,8 +440,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
400
440
  enableStickyHeaderOrFooter,
401
441
  slots,
402
442
  ]);
403
- const [exportController, setExportController] = (0, react_1.useState)(null);
404
- const isExporting = (0, react_1.useMemo)(() => exportController !== null, [exportController]);
405
443
  const handleCancelExport = (0, react_1.useCallback)(() => {
406
444
  if (exportController) {
407
445
  exportController.abort();
@@ -416,7 +454,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
416
454
  data: tableData,
417
455
  idKey,
418
456
  globalFilter,
419
- customColumnsFilter,
457
+ columnFilter,
420
458
  sorting,
421
459
  pagination,
422
460
  columnOrder,
@@ -431,7 +469,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
431
469
  onSelectionChange: handleSelectionStateChange,
432
470
  handleColumnFilterStateChange,
433
471
  onDataStateChange,
434
- onFetchData: onFetchData,
472
+ onFetchData: fetchData,
435
473
  onDataChange,
436
474
  exportFilename,
437
475
  onExportProgress,
@@ -444,26 +482,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
444
482
  dataMode,
445
483
  }, internalApiRef);
446
484
  (0, react_1.useImperativeHandle)(ref, () => internalApiRef.current, []);
447
- const isSomeRowsSelected = (0, react_1.useMemo)(() => {
448
- if (!enableBulkActions || !enableRowSelection)
449
- return false;
450
- if (selectionState.type === 'exclude') {
451
- return selectionState.ids.length < tableTotalRow;
452
- }
453
- else {
454
- return selectionState.ids.length > 0;
455
- }
456
- }, [enableBulkActions, enableRowSelection, selectionState, tableTotalRow]);
457
- const selectedRowCount = (0, react_1.useMemo)(() => {
458
- if (!enableBulkActions || !enableRowSelection)
459
- return 0;
460
- if (selectionState.type === 'exclude') {
461
- return tableTotalRow - selectionState.ids.length;
462
- }
463
- else {
464
- return selectionState.ids.length;
465
- }
466
- }, [enableBulkActions, enableRowSelection, selectionState, tableTotalRow]);
467
485
  const RootSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'root', material_1.Box);
468
486
  const ToolbarSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'toolbar', toolbar_1.DataTableToolbar);
469
487
  const BulkActionsSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'bulkActionsToolbar', toolbar_1.BulkActionsToolbar);
@@ -472,7 +490,9 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
472
490
  const BodySlot = (0, slot_helpers_1.getSlotComponent)(slots, 'body', material_1.TableBody);
473
491
  const FooterSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'footer', material_1.Box);
474
492
  const PaginationSlot = (0, slot_helpers_1.getSlotComponent)(slots, 'pagination', pagination_1.DataTablePagination);
475
- return ((0, jsx_runtime_1.jsx)(data_table_context_1.DataTableProvider, { table: table, children: (0, jsx_runtime_1.jsxs)(RootSlot, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root, { children: [(enableGlobalFilter || extraFilter) ? ((0, jsx_runtime_1.jsx)(ToolbarSlot, Object.assign({ extraFilter: extraFilter, enableGlobalFilter: enableGlobalFilter, enableColumnVisibility: enableColumnVisibility, enableColumnFilter: enableColumnFilter, enableExport: enableExport, enableReset: enableReset, enableTableSizeControl: enableTableSizeControl, enableColumnPinning: enableColumnPinning }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar))) : null, enableBulkActions && enableRowSelection && isSomeRowsSelected ? ((0, jsx_runtime_1.jsx)(BulkActionsSlot, Object.assign({ selectionState: selectionState, selectedRowCount: selectedRowCount, bulkActions: bulkActions, sx: {
493
+ return ((0, jsx_runtime_1.jsx)(data_table_context_1.DataTableProvider, { table: table, apiRef: internalApiRef, dataMode: dataMode, tableSize: tableSize, onTableSizeChange: (size) => {
494
+ setTableSize(size);
495
+ }, columnFilter: columnFilter, onChangeColumnFilter: handleColumnFilterStateChange, slots: slots, slotProps: slotProps, isExporting: isExporting, exportController: exportController, onCancelExport: handleCancelExport, exportFilename: exportFilename, onExportProgress: onExportProgress, onExportComplete: onExportComplete, onExportError: onExportError, onServerExport: onServerExport, children: (0, jsx_runtime_1.jsxs)(RootSlot, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root, { children: [(enableGlobalFilter || extraFilter) ? ((0, jsx_runtime_1.jsx)(ToolbarSlot, Object.assign({ extraFilter: extraFilter, enableGlobalFilter: enableGlobalFilter, enableColumnVisibility: enableColumnVisibility, enableColumnFilter: enableColumnFilter, enableExport: enableExport, enableReset: enableReset, enableTableSizeControl: enableTableSizeControl, enableColumnPinning: enableColumnPinning }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar))) : null, enableBulkActions && enableRowSelection && isSomeRowsSelected ? ((0, jsx_runtime_1.jsx)(BulkActionsSlot, Object.assign({ selectionState: selectionState, selectedRowCount: selectedRowCount, bulkActions: bulkActions, sx: {
476
496
  position: 'relative',
477
497
  zIndex: 2,
478
498
  } }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.bulkActionsToolbar))) : null, (0, jsx_runtime_1.jsx)(TableContainerSlot, Object.assign({ component: material_1.Paper, ref: tableContainerRef, sx: Object.assign(Object.assign(Object.assign({ width: '100%', overflowX: 'auto' }, (enableStickyHeaderOrFooter && {
@@ -1,10 +1,10 @@
1
1
  import { Row, SortingState, ColumnResizeMode, ColumnPinningState, RowData } from '@tanstack/react-table';
2
2
  import { ReactNode } from 'react';
3
- import type { CustomColumnFilterState, TableFilters, TableState } from '../../types';
3
+ import type { ColumnFilterState, TableFilters, TableState } from '../../types';
4
4
  import { DataTableColumn } from '../../types';
5
5
  import { DataTableSlots, PartialSlotProps } from '../../types/slots.types';
6
6
  import { DataTableSize } from '../../utils/table-helpers';
7
- import { SelectionState } from '../../features/custom-selection.feature';
7
+ import { SelectionState } from '../../features';
8
8
  export type SelectMode = 'page' | 'all';
9
9
  declare module '@tanstack/table-core' {
10
10
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -27,9 +27,9 @@ export interface DataTableProps<T> {
27
27
  }>;
28
28
  exportFilename?: string;
29
29
  onExportProgress?: (progress: {
30
- processedRows: number;
31
- totalRows: number;
32
- percentage: number;
30
+ processedRows?: number;
31
+ totalRows?: number;
32
+ percentage?: number;
33
33
  }) => void;
34
34
  onExportComplete?: (result: {
35
35
  success: boolean;
@@ -90,23 +90,23 @@ export interface DataTableProps<T> {
90
90
  loading?: boolean;
91
91
  emptyMessage?: string;
92
92
  skeletonRows?: number;
93
- onColumnFiltersChange?: (filterState: CustomColumnFilterState) => void;
93
+ onColumnFiltersChange?: (filterState: ColumnFilterState) => void;
94
94
  onDataChange?: (data: T[]) => void;
95
95
  selectionColumn?: {
96
96
  width?: number;
97
97
  pinLeft?: boolean;
98
- customColumn?: DataTableColumn<any>;
98
+ customColumn?: DataTableColumn<T>;
99
99
  id?: string;
100
100
  };
101
101
  actionColumn?: {
102
102
  pinRight?: boolean;
103
- customColumn?: DataTableColumn<any>;
103
+ customColumn?: DataTableColumn<T>;
104
104
  id?: string;
105
105
  };
106
106
  expandingColumn?: {
107
107
  width?: number;
108
108
  pinLeft?: boolean;
109
- customColumn?: DataTableColumn<any>;
109
+ customColumn?: DataTableColumn<T>;
110
110
  id?: string;
111
111
  };
112
112
  slots?: Partial<DataTableSlots<T>>;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { SelectionState } from '../../features/custom-selection.feature';
2
+ import { SelectionState } from '../../features';
3
3
  export interface BulkActionsToolbarProps<T = any> {
4
4
  selectionState: SelectionState;
5
5
  selectedRowCount: number;
@@ -0,0 +1 @@
1
+ export declare function ColumnFilterControl(): import("react/jsx-runtime").JSX.Element;