@ackplus/react-tanstack-data-table 1.0.19-beta-0.14 → 1.0.19-beta-0.15
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
CHANGED
|
@@ -40,7 +40,7 @@ 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, 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, 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, onPaginationChange, onGlobalFilterChange, slots = {}, slotProps = {}, }, ref) {
|
|
44
44
|
var _a;
|
|
45
45
|
const isServerMode = dataMode === 'server';
|
|
46
46
|
const isServerPagination = paginationMode === 'server' || isServerMode;
|
|
@@ -164,11 +164,6 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
164
164
|
const handleColumnFilterStateChange = (0, react_1.useCallback)((filterState) => {
|
|
165
165
|
if (filterState && typeof filterState === 'object') {
|
|
166
166
|
setColumnFilter(filterState);
|
|
167
|
-
setTimeout(() => {
|
|
168
|
-
if (onColumnFiltersChange) {
|
|
169
|
-
onColumnFiltersChange(filterState);
|
|
170
|
-
}
|
|
171
|
-
}, 0);
|
|
172
167
|
}
|
|
173
168
|
}, [onColumnFiltersChange]);
|
|
174
169
|
const tableStateChange = (0, react_1.useCallback)((overrides = {}) => {
|
|
@@ -196,18 +191,19 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
196
191
|
: updaterOrValue;
|
|
197
192
|
newSorting = newSorting.filter((sort) => sort.id);
|
|
198
193
|
setSorting(newSorting);
|
|
199
|
-
|
|
200
|
-
onSortingChange(newSorting);
|
|
201
|
-
}
|
|
194
|
+
onSortingChange === null || onSortingChange === void 0 ? void 0 : onSortingChange(newSorting);
|
|
202
195
|
if (isServerMode || isServerSorting) {
|
|
203
|
-
|
|
196
|
+
const pagination = resetPageToFirst();
|
|
197
|
+
tableStateChange({ sorting: newSorting, pagination });
|
|
204
198
|
fetchData({
|
|
205
199
|
sorting: newSorting,
|
|
200
|
+
pagination,
|
|
206
201
|
});
|
|
207
202
|
}
|
|
208
203
|
else if (onDataStateChange) {
|
|
204
|
+
const pagination = resetPageToFirst();
|
|
209
205
|
setTimeout(() => {
|
|
210
|
-
tableStateChange({ sorting: newSorting });
|
|
206
|
+
tableStateChange({ sorting: newSorting, pagination });
|
|
211
207
|
}, 0);
|
|
212
208
|
}
|
|
213
209
|
}, [
|
|
@@ -251,6 +247,8 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
251
247
|
tableStateChange({ pagination: newPagination });
|
|
252
248
|
}, 0);
|
|
253
249
|
}
|
|
250
|
+
setPagination(newPagination);
|
|
251
|
+
onPaginationChange === null || onPaginationChange === void 0 ? void 0 : onPaginationChange(newPagination);
|
|
254
252
|
}, [pagination, isServerMode, isServerPagination, onDataStateChange, fetchData, tableStateChange]);
|
|
255
253
|
const handleGlobalFilterChange = (0, react_1.useCallback)((updaterOrValue) => {
|
|
256
254
|
const newFilter = typeof updaterOrValue === 'function'
|
|
@@ -258,16 +256,19 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
258
256
|
: updaterOrValue;
|
|
259
257
|
setGlobalFilter(newFilter);
|
|
260
258
|
if (isServerMode || isServerFiltering) {
|
|
259
|
+
const pagination = resetPageToFirst();
|
|
261
260
|
setTimeout(() => {
|
|
262
|
-
tableStateChange({ globalFilter: newFilter });
|
|
263
|
-
fetchData({ globalFilter: newFilter });
|
|
261
|
+
tableStateChange({ globalFilter: newFilter, pagination });
|
|
262
|
+
fetchData({ globalFilter: newFilter, pagination });
|
|
264
263
|
}, 0);
|
|
265
264
|
}
|
|
266
265
|
else if (onDataStateChange) {
|
|
266
|
+
const pagination = resetPageToFirst();
|
|
267
267
|
setTimeout(() => {
|
|
268
|
-
tableStateChange({ globalFilter: newFilter });
|
|
268
|
+
tableStateChange({ globalFilter: newFilter, pagination });
|
|
269
269
|
}, 0);
|
|
270
270
|
}
|
|
271
|
+
onGlobalFilterChange === null || onGlobalFilterChange === void 0 ? void 0 : onGlobalFilterChange(newFilter);
|
|
271
272
|
}, [globalFilter, isServerMode, isServerFiltering, onDataStateChange, fetchData, tableStateChange]);
|
|
272
273
|
const onColumnFilterChangeHandler = (0, react_1.useCallback)((updater) => {
|
|
273
274
|
const currentState = columnFilter;
|
|
@@ -283,6 +284,7 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
283
284
|
handleColumnFilterStateChange(legacyFilterState);
|
|
284
285
|
}, [columnFilter, handleColumnFilterStateChange]);
|
|
285
286
|
const onColumnFilterApplyHandler = (0, react_1.useCallback)((appliedState) => {
|
|
287
|
+
const pagination = resetPageToFirst();
|
|
286
288
|
if (isServerFiltering) {
|
|
287
289
|
const serverFilterState = {
|
|
288
290
|
filters: appliedState.filters,
|
|
@@ -292,11 +294,18 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
292
294
|
};
|
|
293
295
|
tableStateChange({
|
|
294
296
|
columnFilter: serverFilterState,
|
|
297
|
+
pagination,
|
|
295
298
|
});
|
|
296
299
|
fetchData({
|
|
297
300
|
columnFilter: serverFilterState,
|
|
301
|
+
pagination,
|
|
298
302
|
});
|
|
299
303
|
}
|
|
304
|
+
setTimeout(() => {
|
|
305
|
+
if (onColumnFiltersChange) {
|
|
306
|
+
onColumnFiltersChange(appliedState);
|
|
307
|
+
}
|
|
308
|
+
}, 0);
|
|
300
309
|
}, [isServerFiltering, fetchData, tableStateChange]);
|
|
301
310
|
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({ _features: [column_filter_feature_1.ColumnFilterFeature, features_1.SelectionFeature], data: tableData, columns: enhancedColumns, initialState: Object.assign({}, initialStateConfig), 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 } : {})), { 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 }));
|
|
302
311
|
const rows = ((_a = table.getRowModel()) === null || _a === void 0 ? void 0 : _a.rows) || [];
|
|
@@ -307,6 +316,12 @@ exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, c
|
|
|
307
316
|
overscan: 10,
|
|
308
317
|
enabled: enableVirtualization && !enablePagination && rows.length > 0,
|
|
309
318
|
});
|
|
319
|
+
const resetPageToFirst = () => {
|
|
320
|
+
const newPagination = { pageIndex: 0, pageSize: pagination.pageSize };
|
|
321
|
+
setPagination(newPagination);
|
|
322
|
+
onPaginationChange === null || onPaginationChange === void 0 ? void 0 : onPaginationChange(newPagination);
|
|
323
|
+
return newPagination;
|
|
324
|
+
};
|
|
310
325
|
const handleColumnReorder = (0, react_1.useCallback)((draggedColumnId, targetColumnId) => {
|
|
311
326
|
const currentOrder = columnOrder.length > 0 ? columnOrder : enhancedColumns.map((col, index) => {
|
|
312
327
|
if (col.id)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Row, SortingState, ColumnResizeMode, ColumnPinningState, RowData } from '@tanstack/react-table';
|
|
1
|
+
import { Row, SortingState, ColumnResizeMode, ColumnPinningState, RowData, PaginationState } from '@tanstack/react-table';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import type { ColumnFilterState, TableFilters, TableState } from '../../types';
|
|
4
4
|
import { DataTableColumn } from '../../types';
|
|
@@ -91,7 +91,9 @@ export interface DataTableProps<T> {
|
|
|
91
91
|
emptyMessage?: string;
|
|
92
92
|
skeletonRows?: number;
|
|
93
93
|
onColumnFiltersChange?: (filterState: ColumnFilterState) => void;
|
|
94
|
-
|
|
94
|
+
onPaginationChange?: (pagination: PaginationState) => void;
|
|
95
|
+
onGlobalFilterChange?: (globalFilter: string) => void;
|
|
96
|
+
onColumnFilterChange?: (columnFilter: ColumnFilterState) => void;
|
|
95
97
|
selectionColumn?: {
|
|
96
98
|
width?: number;
|
|
97
99
|
pinLeft?: boolean;
|