@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
@@ -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.14",
4
+ "version": "1.0.19-beta-0.15",
5
5
  "description": "A powerful React data table component built with MUI and TanStack Table",
6
6
  "keywords": [
7
7
  "react",
@@ -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
- if (onSortingChange) {
200
- onSortingChange(newSorting);
201
- }
194
+ onSortingChange === null || onSortingChange === void 0 ? void 0 : onSortingChange(newSorting);
202
195
  if (isServerMode || isServerSorting) {
203
- tableStateChange({ sorting: newSorting });
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
- onDataChange?: (data: T[]) => void;
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;