@ackplus/react-tanstack-data-table 1.1.13 → 1.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/lib/data-table.tsx"],"names":[],"mappings":"AAqFA;;GAEG;AACH,eAAO,MAAM,SAAS,KA6oEpB,CAAC"}
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/lib/data-table.tsx"],"names":[],"mappings":"AAoFA;;GAEG;AACH,eAAO,MAAM,SAAS,KA6kEpB,CAAC"}
@@ -89,7 +89,10 @@ const DEFAULT_INITIAL_STATE = {
89
89
  */
90
90
  exports.DataTable = (0, react_1.forwardRef)(function DataTable({ initialState, columns, data = [], totalRow = 0, idKey = 'id', extraFilter = null, footerFilter = null,
91
91
  // Data management mode (MUI DataGrid style)
92
- dataMode = 'client', initialLoadData = true, onFetchData, onRefreshData, onDataChange, onDataStateChange,
92
+ dataMode = 'client', initialLoadData = true, onFetchData, // callback to fetch data from the server need to with response { data: T[], total: number }
93
+ onFetchStateChange, // callback to fetch data from the server no need to resonce , this for filter data
94
+ onDataChange, // callback to change data
95
+ onDataStateChange, // callback to change data state
93
96
  // Selection props
94
97
  enableRowSelection = false, enableMultiRowSelection = true, selectMode = 'page', isRowSelectable, onSelectionChange,
95
98
  // Row click props
@@ -111,7 +114,9 @@ enablePagination = false, paginationMode = 'client',
111
114
  // Filtering props
112
115
  enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client',
113
116
  // Sorting props
114
- enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', exportConcurrency = 'cancelAndRestart', exportChunkSize = 1000, exportStrictTotalCheck = false, exportSanitizeCSV = true, onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, onExportStateChange,
117
+ enableSorting = true, sortingMode = 'client', onSortingChange,
118
+ //export props
119
+ exportFilename = 'export', exportConcurrency = 'cancelAndRestart', exportChunkSize = 1000, exportStrictTotalCheck = false, exportSanitizeCSV = true, onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel, onExportStateChange,
115
120
  // Styling props
116
121
  enableHover = true, enableStripes = false, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium',
117
122
  // Sticky header/footer props
@@ -194,7 +199,7 @@ logging, }, ref) {
194
199
  const internalApiRef = (0, react_1.useRef)(null);
195
200
  const exportControllerRef = (0, react_1.useRef)(null);
196
201
  const exportQueueRef = (0, react_1.useRef)(Promise.resolve());
197
- const isExternallyControlledData = (0, react_1.useMemo)(() => !onFetchData && (!!onDataChange || !!onRefreshData), [onFetchData, onDataChange, onRefreshData]);
202
+ const isExternallyControlledData = (0, react_1.useMemo)(() => !onFetchData && (!!onDataChange || !!onFetchStateChange), [onFetchData, onDataChange, onFetchStateChange]);
198
203
  const { debouncedFetch, isLoading: fetchLoading } = (0, debounced_fetch_utils_1.useDebouncedFetch)(onFetchData);
199
204
  const tableData = (0, react_1.useMemo)(() => {
200
205
  if (isExternallyControlledData)
@@ -250,12 +255,6 @@ logging, }, ref) {
250
255
  // -------------------------------
251
256
  const fetchData = (0, react_1.useCallback)(async (overrides = {}, options) => {
252
257
  var _a, _b, _c, _d, _e;
253
- if (!onFetchData) {
254
- if (logger.isLevelEnabled('debug')) {
255
- logger.debug('onFetchData not provided, skipping fetch', { overrides, columnFilter, sorting, pagination });
256
- }
257
- return;
258
- }
259
258
  const filters = {
260
259
  globalFilter,
261
260
  pagination,
@@ -263,6 +262,15 @@ logging, }, ref) {
263
262
  sorting,
264
263
  ...overrides,
265
264
  };
265
+ if (onFetchStateChange) {
266
+ onFetchStateChange(filters, options === null || options === void 0 ? void 0 : options.meta);
267
+ }
268
+ if (!onFetchData) {
269
+ if (logger.isLevelEnabled('debug')) {
270
+ logger.debug('onFetchData not provided, skipping fetch', { overrides, columnFilter, sorting, pagination });
271
+ }
272
+ return;
273
+ }
266
274
  if (logger.isLevelEnabled('info')) {
267
275
  logger.info('Requesting data', {
268
276
  filters,
@@ -303,6 +311,7 @@ logging, }, ref) {
303
311
  sorting,
304
312
  debouncedFetch,
305
313
  logger,
314
+ onFetchStateChange,
306
315
  ]);
307
316
  const normalizeRefreshOptions = (0, react_1.useCallback)((options, fallbackReason = 'refresh') => {
308
317
  var _a, _b, _c;
@@ -563,7 +572,7 @@ logging, }, ref) {
563
572
  setServerTotal(0);
564
573
  }, [isExternallyControlledData, serverData]);
565
574
  (0, react_1.useEffect)(() => {
566
- if (initialLoadData && onFetchData) {
575
+ if (initialLoadData && (onFetchData || onFetchStateChange)) {
567
576
  if (logger.isLevelEnabled('info')) {
568
577
  logger.info('Initial data load triggered', { initialLoadData });
569
578
  }
@@ -672,29 +681,6 @@ logging, }, ref) {
672
681
  }
673
682
  return nextData;
674
683
  }, [isExternallyControlledData, logger, onDataChange, tableData, tableTotalRow]);
675
- const buildRefreshContext = (0, react_1.useCallback)((options, paginationOverride) => {
676
- const state = table.getState();
677
- const nextPagination = paginationOverride || state.pagination || pagination;
678
- return {
679
- filters: {
680
- globalFilter,
681
- pagination: nextPagination,
682
- columnFilter,
683
- sorting,
684
- },
685
- state: {
686
- sorting,
687
- pagination: nextPagination,
688
- globalFilter,
689
- columnFilter,
690
- columnVisibility: state.columnVisibility,
691
- columnSizing: state.columnSizing,
692
- columnOrder: state.columnOrder,
693
- columnPinning: state.columnPinning,
694
- },
695
- options,
696
- };
697
- }, [table, pagination, globalFilter, columnFilter, sorting]);
698
684
  const triggerRefresh = (0, react_1.useCallback)(async (options, fallbackReason = 'refresh') => {
699
685
  const normalizedOptions = normalizeRefreshOptions(options, fallbackReason);
700
686
  const nextPagination = enablePagination
@@ -709,35 +695,15 @@ logging, }, ref) {
709
695
  setPagination(nextPagination);
710
696
  onPaginationChange === null || onPaginationChange === void 0 ? void 0 : onPaginationChange(nextPagination);
711
697
  }
712
- const refreshContext = buildRefreshContext(normalizedOptions, nextPagination);
713
- if (onRefreshData) {
714
- await onRefreshData(refreshContext);
715
- return;
716
- }
717
- if (onFetchData) {
718
- await fetchData(nextPagination ? { pagination: nextPagination } : {}, {
719
- delay: 0,
720
- meta: {
721
- reason: normalizedOptions.reason,
722
- force: normalizedOptions.force,
723
- },
724
- });
725
- return;
726
- }
727
- if (logger.isLevelEnabled('debug')) {
728
- logger.debug('Refresh skipped because no refresh handler is configured', refreshContext);
729
- }
730
- }, [
731
- normalizeRefreshOptions,
732
- enablePagination,
733
- pagination,
734
- onPaginationChange,
735
- buildRefreshContext,
736
- onRefreshData,
737
- onFetchData,
738
- fetchData,
739
- logger,
740
- ]);
698
+ await fetchData(nextPagination ? { pagination: nextPagination } : {}, {
699
+ delay: 0,
700
+ meta: {
701
+ reason: normalizedOptions.reason,
702
+ force: normalizedOptions.force,
703
+ },
704
+ });
705
+ return;
706
+ }, [normalizeRefreshOptions, enablePagination, pagination, onPaginationChange, fetchData]);
741
707
  const resetAllAndReload = (0, react_1.useCallback)(() => {
742
708
  var _a;
743
709
  const resetState = getResetState();
@@ -760,31 +726,14 @@ logging, }, ref) {
760
726
  force: true,
761
727
  reason: 'reset',
762
728
  }, 'reset');
763
- const refreshContext = buildRefreshContext(resetOptions, resetState.pagination);
764
- if (onRefreshData) {
765
- void onRefreshData(refreshContext);
766
- return;
767
- }
768
- if (onFetchData) {
769
- void fetchData(resetState, {
770
- delay: 0,
771
- meta: {
772
- reason: resetOptions.reason,
773
- force: resetOptions.force,
774
- },
775
- });
776
- }
777
- }, [
778
- getResetState,
779
- initialSelectionState,
780
- initialStateConfig,
781
- onPaginationChange,
782
- normalizeRefreshOptions,
783
- buildRefreshContext,
784
- onRefreshData,
785
- onFetchData,
786
- fetchData,
787
- ]);
729
+ void fetchData(resetState, {
730
+ delay: 0,
731
+ meta: {
732
+ reason: resetOptions.reason,
733
+ force: resetOptions.force,
734
+ },
735
+ });
736
+ }, [getResetState, initialSelectionState, initialStateConfig, onPaginationChange, normalizeRefreshOptions, fetchData]);
788
737
  const setExportControllerSafely = (0, react_1.useCallback)((value) => {
789
738
  setExportController((current) => {
790
739
  const next = typeof value === 'function' ? value(current) : value;
@@ -49,6 +49,7 @@ export interface DataTableProps<T> {
49
49
  data: T[];
50
50
  total: number;
51
51
  }>;
52
+ onFetchStateChange?: (filters: Partial<TableState>, meta?: DataFetchMeta) => void;
52
53
  onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
53
54
  onDataChange?: (nextData: T[], context: DataMutationContext<T>) => void;
54
55
  exportFilename?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../src/lib/types/data-table.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../src/lib/types/data-table.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC5H,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAKrH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAErG,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG;QACvE,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,MAAM,MAAM,kBAAkB,GACxB,WAAW,GACX,kBAAkB,GAClB,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,aAAa,GACb,oBAAoB,CAAC;AAE3B,MAAM,WAAW,mBAAmB,CAAC,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAG7B,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAGhC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC3D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9G,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAClF,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAGxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7D,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/F,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAGzD,cAAc,CAAC,EAAE,CACb,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAC7B,SAAS,CAAC,EAAE,cAAc,EAC1B,MAAM,CAAC,EAAE,WAAW,KACnB,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAGtC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAG5B,kBAAkB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IAC1D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IAE9D,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAGxD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,SAAS,CAAC;IAG5D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAGhE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAGlD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAG9D,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAGzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC3C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAGhD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAGrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAGjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAGlD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC;IAG1B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAG5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEjE,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAGhC,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAC;CAC/C"}
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.1.13",
4
+ "version": "1.1.15",
5
5
  "description": "A powerful React data table component built with MUI and TanStack Table",
6
6
  "keywords": [
7
7
  "react",
@@ -45,7 +45,6 @@ import {
45
45
  DataFetchMeta,
46
46
  DataMutationAction,
47
47
  DataMutationContext,
48
- DataRefreshContext,
49
48
  DataRefreshOptions,
50
49
  DataTableProps,
51
50
  } from './types/data-table.types';
@@ -98,10 +97,10 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
98
97
  // Data management mode (MUI DataGrid style)
99
98
  dataMode = 'client',
100
99
  initialLoadData = true,
101
- onFetchData,
102
- onRefreshData,
103
- onDataChange,
104
- onDataStateChange,
100
+ onFetchData, // callback to fetch data from the server need to with response { data: T[], total: number }
101
+ onFetchStateChange, // callback to fetch data from the server no need to resonce , this for filter data
102
+ onDataChange, // callback to change data
103
+ onDataStateChange, // callback to change data state
105
104
 
106
105
  // Selection props
107
106
  enableRowSelection = false,
@@ -153,6 +152,8 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
153
152
  enableSorting = true,
154
153
  sortingMode = 'client',
155
154
  onSortingChange,
155
+
156
+ //export props
156
157
  exportFilename = 'export',
157
158
  exportConcurrency = 'cancelAndRestart',
158
159
  exportChunkSize = 1000,
@@ -279,8 +280,8 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
279
280
  const exportQueueRef = useRef<Promise<void>>(Promise.resolve());
280
281
 
281
282
  const isExternallyControlledData = useMemo(
282
- () => !onFetchData && (!!onDataChange || !!onRefreshData),
283
- [onFetchData, onDataChange, onRefreshData]
283
+ () => !onFetchData && (!!onDataChange || !!onFetchStateChange),
284
+ [onFetchData, onDataChange, onFetchStateChange]
284
285
  );
285
286
 
286
287
  const { debouncedFetch, isLoading: fetchLoading } = useDebouncedFetch(onFetchData);
@@ -343,13 +344,6 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
343
344
  overrides: Partial<TableState> = {},
344
345
  options?: { delay?: number; meta?: DataFetchMeta }
345
346
  ) => {
346
- if (!onFetchData) {
347
- if (logger.isLevelEnabled('debug')) {
348
- logger.debug('onFetchData not provided, skipping fetch', { overrides, columnFilter, sorting, pagination });
349
- }
350
- return;
351
- }
352
-
353
347
  const filters: Partial<TableFiltersForFetch> = {
354
348
  globalFilter,
355
349
  pagination,
@@ -358,6 +352,16 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
358
352
  ...overrides,
359
353
  };
360
354
 
355
+ if(onFetchStateChange) {
356
+ onFetchStateChange(filters, options?.meta);
357
+ }
358
+ if (!onFetchData) {
359
+ if (logger.isLevelEnabled('debug')) {
360
+ logger.debug('onFetchData not provided, skipping fetch', { overrides, columnFilter, sorting, pagination });
361
+ }
362
+ return;
363
+ }
364
+
361
365
  if (logger.isLevelEnabled('info')) {
362
366
  logger.info('Requesting data', {
363
367
  filters,
@@ -400,6 +404,7 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
400
404
  sorting,
401
405
  debouncedFetch,
402
406
  logger,
407
+ onFetchStateChange,
403
408
  ]);
404
409
 
405
410
  const normalizeRefreshOptions = useCallback((
@@ -698,7 +703,7 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
698
703
  }, [isExternallyControlledData, serverData]);
699
704
 
700
705
  useEffect(() => {
701
- if (initialLoadData && onFetchData) {
706
+ if (initialLoadData && (onFetchData || onFetchStateChange)) {
702
707
  if (logger.isLevelEnabled('info')) {
703
708
  logger.info('Initial data load triggered', { initialLoadData });
704
709
  }
@@ -825,34 +830,6 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
825
830
  return nextData;
826
831
  }, [isExternallyControlledData, logger, onDataChange, tableData, tableTotalRow]);
827
832
 
828
- const buildRefreshContext = useCallback((
829
- options: ReturnType<typeof normalizeRefreshOptions>,
830
- paginationOverride?: { pageIndex: number; pageSize: number }
831
- ): DataRefreshContext => {
832
- const state = table.getState();
833
- const nextPagination = paginationOverride || state.pagination || pagination;
834
-
835
- return {
836
- filters: {
837
- globalFilter,
838
- pagination: nextPagination,
839
- columnFilter,
840
- sorting,
841
- },
842
- state: {
843
- sorting,
844
- pagination: nextPagination,
845
- globalFilter,
846
- columnFilter,
847
- columnVisibility: state.columnVisibility,
848
- columnSizing: state.columnSizing,
849
- columnOrder: state.columnOrder,
850
- columnPinning: state.columnPinning,
851
- },
852
- options,
853
- };
854
- }, [table, pagination, globalFilter, columnFilter, sorting]);
855
-
856
833
  const triggerRefresh = useCallback(async (
857
834
  options?: boolean | DataRefreshOptions,
858
835
  fallbackReason: string = 'refresh'
@@ -873,41 +850,18 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
873
850
  onPaginationChange?.(nextPagination);
874
851
  }
875
852
 
876
- const refreshContext = buildRefreshContext(normalizedOptions, nextPagination);
877
-
878
- if (onRefreshData) {
879
- await onRefreshData(refreshContext);
880
- return;
881
- }
882
-
883
- if (onFetchData) {
884
- await fetchData(
885
- nextPagination ? { pagination: nextPagination } : {},
886
- {
887
- delay: 0,
888
- meta: {
889
- reason: normalizedOptions.reason,
890
- force: normalizedOptions.force,
891
- },
892
- }
893
- );
894
- return;
895
- }
896
-
897
- if (logger.isLevelEnabled('debug')) {
898
- logger.debug('Refresh skipped because no refresh handler is configured', refreshContext);
899
- }
900
- }, [
901
- normalizeRefreshOptions,
902
- enablePagination,
903
- pagination,
904
- onPaginationChange,
905
- buildRefreshContext,
906
- onRefreshData,
907
- onFetchData,
908
- fetchData,
909
- logger,
910
- ]);
853
+ await fetchData(
854
+ nextPagination ? { pagination: nextPagination } : {},
855
+ {
856
+ delay: 0,
857
+ meta: {
858
+ reason: normalizedOptions.reason,
859
+ force: normalizedOptions.force,
860
+ },
861
+ }
862
+ );
863
+ return;
864
+ }, [normalizeRefreshOptions, enablePagination, pagination, onPaginationChange, fetchData]);
911
865
 
912
866
  const resetAllAndReload = useCallback(() => {
913
867
  const resetState = getResetState();
@@ -936,33 +890,14 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
936
890
  reason: 'reset',
937
891
  }, 'reset');
938
892
 
939
- const refreshContext = buildRefreshContext(resetOptions, resetState.pagination);
940
-
941
- if (onRefreshData) {
942
- void onRefreshData(refreshContext);
943
- return;
944
- }
945
-
946
- if (onFetchData) {
947
- void fetchData(resetState, {
948
- delay: 0,
949
- meta: {
950
- reason: resetOptions.reason,
951
- force: resetOptions.force,
952
- },
953
- });
954
- }
955
- }, [
956
- getResetState,
957
- initialSelectionState,
958
- initialStateConfig,
959
- onPaginationChange,
960
- normalizeRefreshOptions,
961
- buildRefreshContext,
962
- onRefreshData,
963
- onFetchData,
964
- fetchData,
965
- ]);
893
+ void fetchData(resetState, {
894
+ delay: 0,
895
+ meta: {
896
+ reason: resetOptions.reason,
897
+ force: resetOptions.force,
898
+ },
899
+ });
900
+ }, [getResetState, initialSelectionState, initialStateConfig, onPaginationChange, normalizeRefreshOptions, fetchData]);
966
901
 
967
902
  const setExportControllerSafely = useCallback((
968
903
  value: AbortController | null | ((current: AbortController | null) => AbortController | null)
@@ -73,6 +73,7 @@ export interface DataTableProps<T> {
73
73
  initialLoadData?: boolean; // Initial load data (default: true)
74
74
  onDataStateChange?: (filters: Partial<TableState>) => void; // Callback when any filter/state changes
75
75
  onFetchData?: (filters: Partial<TableFilters>, meta?: DataFetchMeta) => Promise<{ data: T[]; total: number }>;
76
+ onFetchStateChange?: (filters: Partial<TableState>, meta?: DataFetchMeta) => void;
76
77
  onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
77
78
  onDataChange?: (nextData: T[], context: DataMutationContext<T>) => void;
78
79