@ackplus/react-tanstack-data-table 1.1.18 → 1.1.20

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":"use-data-table-engine.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks/use-data-table-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-data-table-engine.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks/use-data-table-engine.ts"],"names":[],"mappings":"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"}
@@ -198,7 +198,7 @@ function useDataTableEngine(props) {
198
198
  sorting: s.sorting,
199
199
  ...overrides,
200
200
  };
201
- (_a = onFetchStateChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onFetchStateChangeRef, filters, options === null || options === void 0 ? void 0 : options.meta);
201
+ (_a = onFetchStateChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onFetchStateChangeRef, filters, options);
202
202
  const handler = onFetchDataRef.current;
203
203
  if (!handler)
204
204
  return;
@@ -273,6 +273,7 @@ function useDataTableEngine(props) {
273
273
  const prev = uiRef.current.sorting;
274
274
  const next = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
275
275
  const cleaned = (next || []).filter((s) => s === null || s === void 0 ? void 0 : s.id);
276
+ console.log('onSortingChange', cleaned);
276
277
  (_a = onSortingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onSortingChangeRef, cleaned);
277
278
  dispatch({ type: "SET_SORTING_RESET_PAGE", payload: cleaned });
278
279
  },
@@ -301,11 +302,47 @@ function useDataTableEngine(props) {
301
302
  },
302
303
  }
303
304
  : {}),
304
- ...(enableExpanding ? { onExpandedChange: (u) => dispatch({ type: "SET_EXPANDED", payload: typeof u === "function" ? u(uiRef.current.expanded) : u }) } : {}),
305
- ...(enableColumnDragging ? { onColumnOrderChange: (u) => dispatch({ type: "SET_COLUMN_ORDER", payload: typeof u === "function" ? u(uiRef.current.columnOrder) : u }) } : {}),
306
- ...(enableColumnPinning ? { onColumnPinningChange: (u) => dispatch({ type: "SET_COLUMN_PINNING", payload: typeof u === "function" ? u(uiRef.current.columnPinning) : u }) } : {}),
307
- ...(enableColumnVisibility ? { onColumnVisibilityChange: (u) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: typeof u === "function" ? u(uiRef.current.columnVisibility) : u }) } : {}),
308
- ...(enableColumnResizing ? { onColumnSizingChange: (u) => dispatch({ type: "SET_COLUMN_SIZING", payload: typeof u === "function" ? u(uiRef.current.columnSizing) : u }) } : {}),
305
+ ...(enableExpanding ? { onExpandedChange: (u) => {
306
+ const prev = uiRef.current.expanded;
307
+ const next = typeof u === "function" ? u(prev) : u;
308
+ dispatch({ type: "SET_EXPANDED", payload: next });
309
+ } } : {}),
310
+ ...(enableColumnDragging ? {
311
+ onColumnOrderChange: (u) => {
312
+ var _a;
313
+ const prev = uiRef.current.columnOrder;
314
+ const next = typeof u === "function" ? u(prev) : u;
315
+ (_a = onColumnDragEndRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnDragEndRef, next);
316
+ dispatch({ type: "SET_COLUMN_ORDER", payload: next });
317
+ }
318
+ } : {}),
319
+ ...(enableColumnPinning ? {
320
+ onColumnPinningChange: (u) => {
321
+ var _a;
322
+ const prev = uiRef.current.columnPinning;
323
+ const next = typeof u === "function" ? u(prev) : u;
324
+ (_a = onColumnPinningChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnPinningChangeRef, next);
325
+ dispatch({ type: "SET_COLUMN_PINNING", payload: next });
326
+ }
327
+ } : {}),
328
+ ...(enableColumnVisibility ? {
329
+ onColumnVisibilityChange: (u) => {
330
+ var _a;
331
+ const prev = uiRef.current.columnVisibility;
332
+ const next = typeof u === "function" ? u(prev) : u;
333
+ (_a = onColumnVisibilityChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnVisibilityChangeRef, next);
334
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: next });
335
+ }
336
+ } : {}),
337
+ ...(enableColumnResizing ? {
338
+ onColumnSizingChange: (u) => {
339
+ var _a;
340
+ const prev = uiRef.current.columnSizing;
341
+ const next = typeof u === "function" ? u(prev) : u;
342
+ (_a = onColumnSizingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnSizingChangeRef, next);
343
+ dispatch({ type: "SET_COLUMN_SIZING", payload: next });
344
+ }
345
+ } : {}),
309
346
  getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
310
347
  ...(enableSorting ? { getSortedRowModel: (0, react_table_1.getSortedRowModel)() } : {}),
311
348
  ...(enableColumnFilter || enableGlobalFilter ? { getFilteredRowModel: (0, column_filter_feature_1.getCombinedFilteredRowModel)() } : {}),
@@ -339,12 +376,13 @@ function useDataTableEngine(props) {
339
376
  };
340
377
  // --- virtualization
341
378
  const rows = table.getRowModel().rows;
379
+ const shouldVirtualize = enableVirtualization && rows.length > 0;
342
380
  const rowVirtualizer = (0, react_virtual_1.useVirtualizer)({
343
381
  count: rows.length,
344
382
  getScrollElement: () => tableContainerRef.current,
345
383
  estimateSize: () => estimateRowHeight,
346
- overscan: 10,
347
- enabled: enableVirtualization && !enablePagination && rows.length > 0,
384
+ overscan: 8, // reduce a bit
385
+ enabled: shouldVirtualize,
348
386
  });
349
387
  const serverKey = (0, react_1.useMemo)(() => {
350
388
  if (!(isServerMode || isServerPagination || isServerFiltering || isServerSorting))
@@ -586,21 +624,172 @@ function useDataTableEngine(props) {
586
624
  getGlobalFilter: () => tableRef.current.getState().globalFilter,
587
625
  };
588
626
  // --- data
627
+ const getBaseData = () => {
628
+ const sData = serverDataRef.current;
629
+ return sData !== null ? sData : dataRef.current;
630
+ };
631
+ const getRowIndexById = (arr, rowId) => arr.findIndex((row, i) => (0, utils_1.generateRowId)(row, i, idKey) === rowId);
589
632
  api.data = {
590
633
  refresh: (options) => void triggerRefresh(options, "refresh"),
591
634
  reload: (options = {}) => { var _a; return void triggerRefresh({ ...options, reason: (_a = options.reason) !== null && _a !== void 0 ? _a : "reload" }, "reload"); },
592
635
  resetAll: () => resetAllAndReload(),
593
- getAllData: () => {
594
- const sData = serverDataRef.current;
595
- const base = sData !== null ? sData : dataRef.current;
596
- return [...base];
597
- },
598
- getDataCount: () => {
599
- const sData = serverDataRef.current;
600
- const base = sData !== null ? sData : dataRef.current;
601
- return base.length;
636
+ getAllData: () => [...getBaseData()],
637
+ getRowData: (rowId) => {
638
+ const rows = tableRef.current.getRowModel().rows;
639
+ const row = rows.find((r) => r.id === rowId);
640
+ return row === null || row === void 0 ? void 0 : row.original;
602
641
  },
642
+ getRowByIndex: (index) => { var _a; return (_a = tableRef.current.getRowModel().rows[index]) === null || _a === void 0 ? void 0 : _a.original; },
643
+ getDataCount: () => getBaseData().length,
603
644
  getFilteredDataCount: () => tableRef.current.getFilteredRowModel().rows.length,
645
+ updateRow: (rowId, updates) => {
646
+ const base = getBaseData();
647
+ const idx = getRowIndexById(base, rowId);
648
+ if (idx === -1)
649
+ return;
650
+ const next = [...base];
651
+ next[idx] = { ...next[idx], ...updates };
652
+ setServerData(next);
653
+ setServerTotal(next.length);
654
+ },
655
+ updateRowByIndex: (index, updates) => {
656
+ const base = getBaseData();
657
+ if (index < 0 || index >= base.length)
658
+ return;
659
+ const next = [...base];
660
+ next[index] = { ...next[index], ...updates };
661
+ setServerData(next);
662
+ setServerTotal(next.length);
663
+ },
664
+ insertRow: (newRow, index) => {
665
+ const base = getBaseData();
666
+ const next = index == null ? [...base, newRow] : [...base.slice(0, index), newRow, ...base.slice(index)];
667
+ setServerData(next);
668
+ setServerTotal(next.length);
669
+ },
670
+ deleteRow: (rowId) => {
671
+ const base = getBaseData();
672
+ const idx = getRowIndexById(base, rowId);
673
+ if (idx === -1)
674
+ return;
675
+ const next = base.filter((_, i) => i !== idx);
676
+ setServerData(next);
677
+ setServerTotal(next.length);
678
+ },
679
+ deleteRowByIndex: (index) => {
680
+ const base = getBaseData();
681
+ if (index < 0 || index >= base.length)
682
+ return;
683
+ const next = base.filter((_, i) => i !== index);
684
+ setServerData(next);
685
+ setServerTotal(next.length);
686
+ },
687
+ deleteSelectedRows: () => {
688
+ var _a, _b, _c, _d;
689
+ const state = (_b = (_a = tableRef.current).getSelectionState) === null || _b === void 0 ? void 0 : _b.call(_a);
690
+ if (!state || state.type !== "include" || !state.ids.length)
691
+ return;
692
+ const base = getBaseData();
693
+ const ids = new Set(state.ids);
694
+ const next = base.filter((row, i) => !ids.has((0, utils_1.generateRowId)(row, i, idKey)));
695
+ setServerData(next);
696
+ setServerTotal(next.length);
697
+ (_d = (_c = tableRef.current).deselectAll) === null || _d === void 0 ? void 0 : _d.call(_c);
698
+ },
699
+ replaceAllData: (newData) => {
700
+ setServerData(newData);
701
+ setServerTotal(newData.length);
702
+ },
703
+ updateMultipleRows: (updates) => {
704
+ const base = getBaseData();
705
+ const next = [...base];
706
+ for (const { rowId, data: u } of updates) {
707
+ const idx = getRowIndexById(next, rowId);
708
+ if (idx !== -1)
709
+ next[idx] = { ...next[idx], ...u };
710
+ }
711
+ setServerData(next);
712
+ setServerTotal(next.length);
713
+ },
714
+ insertMultipleRows: (newRows, startIndex) => {
715
+ const base = getBaseData();
716
+ const idx = startIndex !== null && startIndex !== void 0 ? startIndex : base.length;
717
+ const next = [...base.slice(0, idx), ...newRows, ...base.slice(idx)];
718
+ setServerData(next);
719
+ setServerTotal(next.length);
720
+ },
721
+ deleteMultipleRows: (rowIds) => {
722
+ const ids = new Set(rowIds);
723
+ const base = getBaseData();
724
+ const next = base.filter((row, i) => !ids.has((0, utils_1.generateRowId)(row, i, idKey)));
725
+ setServerData(next);
726
+ setServerTotal(next.length);
727
+ },
728
+ updateField: (rowId, fieldName, value) => {
729
+ api.data.updateRow(rowId, { [fieldName]: value });
730
+ },
731
+ updateFieldByIndex: (index, fieldName, value) => {
732
+ api.data.updateRowByIndex(index, { [fieldName]: value });
733
+ },
734
+ findRows: (predicate) => getBaseData().filter(predicate),
735
+ findRowIndex: (predicate) => getBaseData().findIndex(predicate),
736
+ };
737
+ // --- layout (save/restore column visibility, order, sizing, pinning)
738
+ api.layout = {
739
+ saveLayout: () => {
740
+ var _a, _b, _c, _d, _e, _f, _g;
741
+ const s = tableRef.current.getState();
742
+ return {
743
+ columnVisibility: (_a = s.columnVisibility) !== null && _a !== void 0 ? _a : {},
744
+ columnOrder: (_b = s.columnOrder) !== null && _b !== void 0 ? _b : [],
745
+ columnSizing: (_c = s.columnSizing) !== null && _c !== void 0 ? _c : {},
746
+ columnPinning: (_d = s.columnPinning) !== null && _d !== void 0 ? _d : { left: [], right: [] },
747
+ pagination: (_e = s.pagination) !== null && _e !== void 0 ? _e : { pageIndex: 0, pageSize: 10 },
748
+ globalFilter: (_f = s.globalFilter) !== null && _f !== void 0 ? _f : "",
749
+ columnFilter: (_g = s.columnFilter) !== null && _g !== void 0 ? _g : [],
750
+ };
751
+ },
752
+ restoreLayout: (layout) => {
753
+ var _a, _b, _c;
754
+ if (layout.columnVisibility)
755
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: layout.columnVisibility });
756
+ if (layout.columnOrder) {
757
+ dispatch({ type: "SET_COLUMN_ORDER", payload: layout.columnOrder });
758
+ (_a = onColumnDragEndRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnDragEndRef, layout.columnOrder);
759
+ }
760
+ if (layout.columnSizing) {
761
+ dispatch({ type: "SET_COLUMN_SIZING", payload: layout.columnSizing });
762
+ (_b = onColumnSizingChangeRef.current) === null || _b === void 0 ? void 0 : _b.call(onColumnSizingChangeRef, layout.columnSizing);
763
+ }
764
+ if (layout.columnPinning) {
765
+ dispatch({ type: "SET_COLUMN_PINNING", payload: layout.columnPinning });
766
+ (_c = onColumnPinningChangeRef.current) === null || _c === void 0 ? void 0 : _c.call(onColumnPinningChangeRef, layout.columnPinning);
767
+ }
768
+ if (layout.pagination && enablePagination)
769
+ dispatch({ type: "SET_PAGINATION", payload: layout.pagination });
770
+ if (layout.globalFilter !== undefined)
771
+ dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: layout.globalFilter });
772
+ if (layout.columnFilter)
773
+ dispatch({ type: "SET_COLUMN_FILTER", payload: layout.columnFilter });
774
+ },
775
+ resetLayout: () => {
776
+ const vis = initialStateConfig.columnVisibility || {};
777
+ const order = initialStateConfig.columnOrder || [];
778
+ const sizing = initialStateConfig.columnSizing || {};
779
+ const pinning = initialStateConfig.columnPinning || { left: [], right: [] };
780
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: vis });
781
+ dispatch({ type: "SET_COLUMN_ORDER", payload: order });
782
+ dispatch({ type: "SET_COLUMN_SIZING", payload: sizing });
783
+ dispatch({ type: "SET_COLUMN_PINNING", payload: pinning });
784
+ dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: "" });
785
+ dispatch({ type: "SET_COLUMN_FILTER", payload: initialStateConfig.columnFilter || [] });
786
+ dispatch({ type: "SET_SORTING_RESET_PAGE", payload: initialStateConfig.sorting || [] });
787
+ dispatch({ type: "SET_PAGINATION", payload: initialStateConfig.pagination || { pageIndex: 0, pageSize: 10 } });
788
+ },
789
+ resetAll: () => {
790
+ api.layout.resetLayout();
791
+ resetAllAndReload();
792
+ },
604
793
  };
605
794
  // --- sorting/pagination/filtering - dispatch + callbacks + server fetch policies
606
795
  api.sorting = {
@@ -611,6 +800,13 @@ function useDataTableEngine(props) {
611
800
  nextFetchDelayRef.current = 0;
612
801
  dispatch({ type: "SET_SORTING_RESET_PAGE", payload: cleaned });
613
802
  },
803
+ sortColumn: (columnId, direction) => {
804
+ var _a;
805
+ const next = direction === false ? [] : [{ id: columnId, desc: direction === 'desc' }];
806
+ (_a = onSortingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onSortingChangeRef, next);
807
+ nextFetchDelayRef.current = 0;
808
+ dispatch({ type: "SET_SORTING_RESET_PAGE", payload: next });
809
+ },
614
810
  clearSorting: () => {
615
811
  var _a;
616
812
  (_a = onSortingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onSortingChangeRef, []);
@@ -634,6 +830,14 @@ function useDataTableEngine(props) {
634
830
  nextFetchDelayRef.current = 0;
635
831
  dispatch({ type: "SET_PAGINATION", payload: next });
636
832
  },
833
+ nextPage: () => {
834
+ const prev = uiRef.current.pagination;
835
+ api.pagination.goToPage(Math.min(prev.pageIndex + 1, Math.max(0, Math.ceil((tableTotalRow !== null && tableTotalRow !== void 0 ? tableTotalRow : 0) / prev.pageSize) - 1)));
836
+ },
837
+ previousPage: () => {
838
+ const prev = uiRef.current.pagination;
839
+ api.pagination.goToPage(Math.max(0, prev.pageIndex - 1));
840
+ },
637
841
  setPageSize: (pageSize) => {
638
842
  var _a;
639
843
  const next = { pageIndex: 0, pageSize };
@@ -641,6 +845,11 @@ function useDataTableEngine(props) {
641
845
  nextFetchDelayRef.current = 0;
642
846
  dispatch({ type: "SET_PAGINATION", payload: next });
643
847
  },
848
+ goToFirstPage: () => api.pagination.goToPage(0),
849
+ goToLastPage: () => {
850
+ const prev = uiRef.current.pagination;
851
+ api.pagination.goToPage(Math.max(0, Math.ceil((tableTotalRow !== null && tableTotalRow !== void 0 ? tableTotalRow : 0) / prev.pageSize) - 1));
852
+ },
644
853
  resetPagination: () => {
645
854
  var _a;
646
855
  const next = (initialStateConfig.pagination || { pageIndex: 0, pageSize: 10 });
@@ -663,10 +872,24 @@ function useDataTableEngine(props) {
663
872
  dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: "" });
664
873
  },
665
874
  setColumnFilters: (filters, isApply = false) => handleColumnFilterChangeHandler(filters, isApply),
875
+ addColumnFilter: (columnId, operator, value) => { var _a, _b; return (_b = (_a = tableRef.current).addColumnFilter) === null || _b === void 0 ? void 0 : _b.call(_a, columnId, operator, value); },
876
+ removeColumnFilter: (filterId) => { var _a, _b; return (_b = (_a = tableRef.current).removeColumnFilter) === null || _b === void 0 ? void 0 : _b.call(_a, filterId); },
877
+ clearAllFilters: () => { var _a, _b; return (_b = (_a = tableRef.current).resetColumnFilter) === null || _b === void 0 ? void 0 : _b.call(_a); },
878
+ resetFilters: () => {
879
+ var _a;
880
+ const reset = ((_a = initialStateConfig.columnFilter) !== null && _a !== void 0 ? _a : DEFAULT_INITIAL_STATE.columnFilter);
881
+ handleColumnFilterChangeHandler(reset, true);
882
+ },
666
883
  };
667
884
  api.columnVisibility = {
668
885
  showColumn: (id) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: true } }),
669
886
  hideColumn: (id) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: false } }),
887
+ toggleColumn: (id) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: !uiRef.current.columnVisibility[id] } }),
888
+ showAllColumns: () => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: {} }),
889
+ hideAllColumns: () => {
890
+ const all = tableRef.current.getAllLeafColumns().reduce((acc, col) => ({ ...acc, [col.id]: false }), {});
891
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: all });
892
+ },
670
893
  resetColumnVisibility: () => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: initialStateConfig.columnVisibility || {} }),
671
894
  };
672
895
  api.columnOrdering = {
@@ -675,9 +898,45 @@ function useDataTableEngine(props) {
675
898
  dispatch({ type: "SET_COLUMN_ORDER", payload: next });
676
899
  (_a = onColumnDragEndRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnDragEndRef, next);
677
900
  },
901
+ moveColumn: (columnId, toIndex) => {
902
+ var _a;
903
+ const order = uiRef.current.columnOrder.length ? uiRef.current.columnOrder : tableRef.current.getAllLeafColumns().map((c) => c.id);
904
+ const from = order.indexOf(columnId);
905
+ if (from === -1 || toIndex < 0 || toIndex >= order.length)
906
+ return;
907
+ const next = [...order];
908
+ next.splice(from, 1);
909
+ next.splice(toIndex, 0, columnId);
910
+ dispatch({ type: "SET_COLUMN_ORDER", payload: next });
911
+ (_a = onColumnDragEndRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnDragEndRef, next);
912
+ },
678
913
  resetColumnOrder: () => dispatch({ type: "SET_COLUMN_ORDER", payload: initialStateConfig.columnOrder || [] }),
679
914
  };
680
915
  api.columnPinning = {
916
+ pinColumnLeft: (columnId) => {
917
+ var _a;
918
+ const cur = uiRef.current.columnPinning;
919
+ const left = cur.left.includes(columnId) ? cur.left : [...cur.left.filter((id) => id !== columnId), columnId];
920
+ const right = cur.right.filter((id) => id !== columnId);
921
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
922
+ (_a = onColumnPinningChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnPinningChangeRef, { left, right });
923
+ },
924
+ pinColumnRight: (columnId) => {
925
+ var _a;
926
+ const cur = uiRef.current.columnPinning;
927
+ const left = cur.left.filter((id) => id !== columnId);
928
+ const right = cur.right.includes(columnId) ? cur.right : [...cur.right.filter((id) => id !== columnId), columnId];
929
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
930
+ (_a = onColumnPinningChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnPinningChangeRef, { left, right });
931
+ },
932
+ unpinColumn: (columnId) => {
933
+ var _a;
934
+ const cur = uiRef.current.columnPinning;
935
+ const left = cur.left.filter((id) => id !== columnId);
936
+ const right = cur.right.filter((id) => id !== columnId);
937
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
938
+ (_a = onColumnPinningChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnPinningChangeRef, { left, right });
939
+ },
681
940
  setPinning: (next) => {
682
941
  var _a;
683
942
  dispatch({ type: "SET_COLUMN_PINNING", payload: next });
@@ -686,16 +945,27 @@ function useDataTableEngine(props) {
686
945
  resetColumnPinning: () => dispatch({ type: "SET_COLUMN_PINNING", payload: initialStateConfig.columnPinning || { left: [], right: [] } }),
687
946
  };
688
947
  api.columnResizing = {
948
+ resizeColumn: (columnId, width) => {
949
+ var _a;
950
+ const cur = uiRef.current.columnSizing;
951
+ dispatch({ type: "SET_COLUMN_SIZING", payload: { ...cur, [columnId]: width } });
952
+ (_a = onColumnSizingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onColumnSizingChangeRef, { ...cur, [columnId]: width });
953
+ },
954
+ autoSizeColumn: (columnId) => { void columnId; /* no-op: would require measure; use reset for default */ },
955
+ autoSizeAllColumns: () => { },
689
956
  resetColumnSizing: () => dispatch({ type: "SET_COLUMN_SIZING", payload: initialStateConfig.columnSizing || {} }),
690
957
  };
691
958
  api.selection = {
959
+ selectRow: (rowId) => { var _a, _b; return (_b = (_a = tableRef.current).selectRow) === null || _b === void 0 ? void 0 : _b.call(_a, rowId); },
960
+ deselectRow: (rowId) => { var _a, _b; return (_b = (_a = tableRef.current).deselectRow) === null || _b === void 0 ? void 0 : _b.call(_a, rowId); },
961
+ toggleRowSelection: (rowId) => { var _a, _b; return (_b = (_a = tableRef.current).toggleRowSelected) === null || _b === void 0 ? void 0 : _b.call(_a, rowId); },
962
+ selectAll: () => { var _a, _b; return (_b = (_a = tableRef.current).selectAll) === null || _b === void 0 ? void 0 : _b.call(_a); },
963
+ deselectAll: () => { var _a, _b; return (_b = (_a = tableRef.current).deselectAll) === null || _b === void 0 ? void 0 : _b.call(_a); },
964
+ toggleSelectAll: () => { var _a, _b; return (_b = (_a = tableRef.current).toggleAllRowsSelected) === null || _b === void 0 ? void 0 : _b.call(_a); },
692
965
  getSelectionState: () => { var _a, _b; return ((_b = (_a = tableRef.current).getSelectionState) === null || _b === void 0 ? void 0 : _b.call(_a)) || { ids: [], type: "include" }; },
693
966
  getSelectedRows: () => tableRef.current.getSelectedRows(),
694
967
  getSelectedCount: () => tableRef.current.getSelectedCount(),
695
968
  isRowSelected: (rowId) => tableRef.current.getIsRowSelected(rowId) || false,
696
- // keep using your table extension methods if you have them:
697
- selectAll: () => { var _a, _b; return (_b = (_a = tableRef.current).selectAll) === null || _b === void 0 ? void 0 : _b.call(_a); },
698
- deselectAll: () => { var _a, _b; return (_b = (_a = tableRef.current).deselectAll) === null || _b === void 0 ? void 0 : _b.call(_a); },
699
969
  };
700
970
  // --- export API (use your existing exportClientData/exportServerData)
701
971
  api.export = {
@@ -799,10 +1069,36 @@ function useDataTableEngine(props) {
799
1069
  },
800
1070
  });
801
1071
  },
1072
+ exportServerData: async (options) => {
1073
+ const { format, filename: fn = exportFilename, fetchData: customFetchData, chunkSize: cs = exportChunkSize, strictTotalCheck: st = exportStrictTotalCheck, sanitizeCSV: san = exportSanitizeCSV } = options;
1074
+ await runExportWithPolicy({
1075
+ format,
1076
+ filename: fn,
1077
+ mode: "server",
1078
+ execute: async (controller) => {
1079
+ var _a, _b;
1080
+ await (0, utils_1.exportServerData)(tableRef.current, {
1081
+ format,
1082
+ filename: fn,
1083
+ fetchData: customFetchData,
1084
+ currentFilters: { globalFilter: tableRef.current.getState().globalFilter, columnFilter: tableRef.current.getState().columnFilter, sorting: tableRef.current.getState().sorting, pagination: tableRef.current.getState().pagination },
1085
+ selection: (_b = (_a = tableRef.current).getSelectionState) === null || _b === void 0 ? void 0 : _b.call(_a),
1086
+ onProgress: handleExportProgressInternal,
1087
+ onComplete: onExportCompleteRef.current,
1088
+ onError: onExportErrorRef.current,
1089
+ onStateChange: (s) => handleExportStateChangeInternal({ ...s, mode: "server", format, filename: fn, queueLength: queuedExportCount }),
1090
+ signal: controller.signal,
1091
+ chunkSize: cs,
1092
+ strictTotalCheck: st,
1093
+ sanitizeCSV: san,
1094
+ });
1095
+ },
1096
+ });
1097
+ },
802
1098
  isExporting: () => exportControllerRef.current != null,
803
1099
  cancelExport: () => handleCancelExport(),
804
1100
  };
805
- }, [dataMode, exportChunkSize, exportFilename, exportSanitizeCSV, exportStrictTotalCheck, fetchData, handleCancelExport, handleColumnFilterChangeHandler, handleExportProgressInternal, handleExportStateChangeInternal, initialStateConfig, isServerMode, isServerPagination, isServerSorting, resetAllAndReload, resetPageToFirst, runExportWithPolicy, triggerRefresh, queuedExportCount, tableRef, uiRef, serverDataRef, dataRef, onSortingChangeRef, onPaginationChangeRef, onGlobalFilterChangeRef, onColumnDragEndRef, onColumnPinningChangeRef, onServerExportRef, onExportCompleteRef, onExportErrorRef]);
1101
+ }, [dataMode, exportChunkSize, exportFilename, exportSanitizeCSV, exportStrictTotalCheck, fetchData, handleCancelExport, handleColumnFilterChangeHandler, handleExportProgressInternal, handleExportStateChangeInternal, initialStateConfig, isServerMode, isServerPagination, isServerSorting, resetAllAndReload, resetPageToFirst, runExportWithPolicy, triggerRefresh, queuedExportCount, tableTotalRow, idKey, tableRef, uiRef, serverDataRef, dataRef, onSortingChangeRef, onPaginationChangeRef, onGlobalFilterChangeRef, onColumnDragEndRef, onColumnPinningChangeRef, onColumnSizingChangeRef, onServerExportRef, onExportCompleteRef, onExportErrorRef, enablePagination]);
806
1102
  // --- imperative handlers (used by TanStack callbacks above or view)
807
1103
  const handleSortingChange = (0, react_1.useCallback)((updaterOrValue) => {
808
1104
  var _a;
@@ -12,6 +12,7 @@ import { ExportConcurrencyMode, ExportProgressPayload, ExportStateChange, Server
12
12
  export type DataRefreshReason = 'initial' | 'state-change' | 'refresh' | 'reload' | 'reset' | string;
13
13
  export interface DataFetchMeta {
14
14
  reason?: DataRefreshReason;
15
+ delay?: number;
15
16
  force?: boolean;
16
17
  }
17
18
  export interface DataRefreshOptions extends DataFetchMeta {
@@ -49,7 +50,7 @@ export interface DataTableProps<T> {
49
50
  data: T[];
50
51
  total: number;
51
52
  }>;
52
- onFetchStateChange?: (filters: Partial<TableState>, meta?: DataFetchMeta) => void;
53
+ onFetchStateChange?: (filters: Partial<TableState>, options?: DataFetchMeta) => void;
53
54
  onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
54
55
  exportFilename?: string;
55
56
  exportConcurrency?: ExportConcurrencyMode;
@@ -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":"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"}
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.18",
4
+ "version": "1.1.20",
5
5
  "description": "A powerful React data table component built with MUI and TanStack Table",
6
6
  "keywords": [
7
7
  "react",
@@ -425,7 +425,7 @@ export function useDataTableEngine<T extends Record<string, any>>(
425
425
  ...overrides,
426
426
  };
427
427
 
428
- onFetchStateChangeRef.current?.(filters, options?.meta);
428
+ onFetchStateChangeRef.current?.(filters, options);
429
429
 
430
430
  const handler = onFetchDataRef.current;
431
431
  if (!handler) return;
@@ -508,6 +508,7 @@ export function useDataTableEngine<T extends Record<string, any>>(
508
508
  const prev = uiRef.current.sorting;
509
509
  const next = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
510
510
  const cleaned = (next || []).filter((s: any) => s?.id);
511
+ console.log('onSortingChange', cleaned);
511
512
  onSortingChangeRef.current?.(cleaned);
512
513
  dispatch({ type: "SET_SORTING_RESET_PAGE", payload: cleaned });
513
514
  },
@@ -537,11 +538,45 @@ export function useDataTableEngine<T extends Record<string, any>>(
537
538
  }
538
539
  : {}),
539
540
 
540
- ...(enableExpanding ? { onExpandedChange: (u: any) => dispatch({ type: "SET_EXPANDED", payload: typeof u === "function" ? u(uiRef.current.expanded) : u }) } : {}),
541
- ...(enableColumnDragging ? { onColumnOrderChange: (u: any) => dispatch({ type: "SET_COLUMN_ORDER", payload: typeof u === "function" ? u(uiRef.current.columnOrder) : u }) } : {}),
542
- ...(enableColumnPinning ? { onColumnPinningChange: (u: any) => dispatch({ type: "SET_COLUMN_PINNING", payload: typeof u === "function" ? u(uiRef.current.columnPinning) : u }) } : {}),
543
- ...(enableColumnVisibility ? { onColumnVisibilityChange: (u: any) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: typeof u === "function" ? u(uiRef.current.columnVisibility) : u }) } : {}),
544
- ...(enableColumnResizing ? { onColumnSizingChange: (u: any) => dispatch({ type: "SET_COLUMN_SIZING", payload: typeof u === "function" ? u(uiRef.current.columnSizing) : u }) } : {}),
541
+ ...(enableExpanding ? { onExpandedChange: (u: any) => {
542
+ const prev = uiRef.current.expanded;
543
+ const next = typeof u === "function" ? u(prev) : u;
544
+ dispatch({ type: "SET_EXPANDED", payload: next });
545
+ } } : {}),
546
+
547
+ ...(enableColumnDragging ? {
548
+ onColumnOrderChange: (u: any) => {
549
+ const prev = uiRef.current.columnOrder;
550
+ const next = typeof u === "function" ? u(prev) : u;
551
+ onColumnDragEndRef.current?.(next);
552
+ dispatch({ type: "SET_COLUMN_ORDER", payload: next });
553
+ }
554
+ } : {}),
555
+ ...(enableColumnPinning ? {
556
+ onColumnPinningChange: (u: any) => {
557
+ const prev = uiRef.current.columnPinning;
558
+ const next = typeof u === "function" ? u(prev) : u;
559
+ onColumnPinningChangeRef.current?.(next);
560
+ dispatch({ type: "SET_COLUMN_PINNING", payload: next });
561
+ }
562
+ } : {}),
563
+ ...(enableColumnVisibility ? {
564
+ onColumnVisibilityChange: (u: any) => {
565
+ const prev = uiRef.current.columnVisibility;
566
+ const next = typeof u === "function" ? u(prev) : u;
567
+ onColumnVisibilityChangeRef.current?.(next);
568
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: next });
569
+ }
570
+ } : {}),
571
+ ...(enableColumnResizing ? {
572
+ onColumnSizingChange: (u: any) => {
573
+ const prev = uiRef.current.columnSizing;
574
+ const next = typeof u === "function" ? u(prev) : u;
575
+ onColumnSizingChangeRef.current?.(next);
576
+ dispatch({ type: "SET_COLUMN_SIZING", payload: next });
577
+
578
+ }
579
+ } : {}),
545
580
 
546
581
  getCoreRowModel: getCoreRowModel(),
547
582
  ...(enableSorting ? { getSortedRowModel: getSortedRowModel() } : {}),
@@ -584,12 +619,15 @@ export function useDataTableEngine<T extends Record<string, any>>(
584
619
 
585
620
  // --- virtualization
586
621
  const rows = table.getRowModel().rows;
622
+
623
+ const shouldVirtualize = enableVirtualization && rows.length > 0;
624
+
587
625
  const rowVirtualizer = useVirtualizer({
588
626
  count: rows.length,
589
627
  getScrollElement: () => tableContainerRef.current,
590
628
  estimateSize: () => estimateRowHeight,
591
- overscan: 10,
592
- enabled: enableVirtualization && !enablePagination && rows.length > 0,
629
+ overscan: 8, // reduce a bit
630
+ enabled: shouldVirtualize,
593
631
  });
594
632
 
595
633
 
@@ -865,22 +903,153 @@ export function useDataTableEngine<T extends Record<string, any>>(
865
903
  };
866
904
 
867
905
  // --- data
906
+ const getBaseData = () => {
907
+ const sData = serverDataRef.current;
908
+ return sData !== null ? sData : dataRef.current;
909
+ };
910
+ const getRowIndexById = (arr: T[], rowId: string) =>
911
+ arr.findIndex((row, i) => generateRowId(row, i, idKey) === rowId);
868
912
  api.data = {
869
913
  refresh: (options?: boolean | DataRefreshOptions) => void triggerRefresh(options, "refresh"),
870
914
  reload: (options: DataRefreshOptions = {}) => void triggerRefresh({ ...options, reason: options.reason ?? "reload" }, "reload"),
871
915
  resetAll: () => resetAllAndReload(),
916
+ getAllData: () => [...getBaseData()],
917
+ getRowData: (rowId: string) => {
918
+ const rows = tableRef.current.getRowModel().rows;
919
+ const row = rows.find((r: any) => r.id === rowId);
920
+ return row?.original as T | undefined;
921
+ },
922
+ getRowByIndex: (index: number) => tableRef.current.getRowModel().rows[index]?.original as T | undefined,
923
+ getDataCount: () => getBaseData().length,
924
+ getFilteredDataCount: () => tableRef.current.getFilteredRowModel().rows.length,
925
+ updateRow: (rowId: string, updates: Partial<T>) => {
926
+ const base = getBaseData();
927
+ const idx = getRowIndexById(base, rowId);
928
+ if (idx === -1) return;
929
+ const next = [...base];
930
+ next[idx] = { ...next[idx], ...updates } as T;
931
+ setServerData(next);
932
+ setServerTotal(next.length);
933
+ },
934
+ updateRowByIndex: (index: number, updates: Partial<T>) => {
935
+ const base = getBaseData();
936
+ if (index < 0 || index >= base.length) return;
937
+ const next = [...base];
938
+ next[index] = { ...next[index], ...updates } as T;
939
+ setServerData(next);
940
+ setServerTotal(next.length);
941
+ },
942
+ insertRow: (newRow: T, index?: number) => {
943
+ const base = getBaseData();
944
+ const next = index == null ? [...base, newRow] : [...base.slice(0, index), newRow, ...base.slice(index)];
945
+ setServerData(next);
946
+ setServerTotal(next.length);
947
+ },
948
+ deleteRow: (rowId: string) => {
949
+ const base = getBaseData();
950
+ const idx = getRowIndexById(base, rowId);
951
+ if (idx === -1) return;
952
+ const next = base.filter((_, i) => i !== idx);
953
+ setServerData(next);
954
+ setServerTotal(next.length);
955
+ },
956
+ deleteRowByIndex: (index: number) => {
957
+ const base = getBaseData();
958
+ if (index < 0 || index >= base.length) return;
959
+ const next = base.filter((_, i) => i !== index);
960
+ setServerData(next);
961
+ setServerTotal(next.length);
962
+ },
963
+ deleteSelectedRows: () => {
964
+ const state = tableRef.current.getSelectionState?.();
965
+ if (!state || state.type !== "include" || !state.ids.length) return;
966
+ const base = getBaseData();
967
+ const ids = new Set(state.ids);
968
+ const next = base.filter((row, i) => !ids.has(generateRowId(row, i, idKey)));
969
+ setServerData(next);
970
+ setServerTotal(next.length);
971
+ tableRef.current.deselectAll?.();
972
+ },
973
+ replaceAllData: (newData: T[]) => {
974
+ setServerData(newData);
975
+ setServerTotal(newData.length);
976
+ },
977
+ updateMultipleRows: (updates: Array<{ rowId: string; data: Partial<T> }>) => {
978
+ const base = getBaseData();
979
+ const next = [...base];
980
+ for (const { rowId, data: u } of updates) {
981
+ const idx = getRowIndexById(next, rowId);
982
+ if (idx !== -1) next[idx] = { ...next[idx], ...u } as T;
983
+ }
984
+ setServerData(next);
985
+ setServerTotal(next.length);
986
+ },
987
+ insertMultipleRows: (newRows: T[], startIndex?: number) => {
988
+ const base = getBaseData();
989
+ const idx = startIndex ?? base.length;
990
+ const next = [...base.slice(0, idx), ...newRows, ...base.slice(idx)];
991
+ setServerData(next);
992
+ setServerTotal(next.length);
993
+ },
994
+ deleteMultipleRows: (rowIds: string[]) => {
995
+ const ids = new Set(rowIds);
996
+ const base = getBaseData();
997
+ const next = base.filter((row, i) => !ids.has(generateRowId(row, i, idKey)));
998
+ setServerData(next);
999
+ setServerTotal(next.length);
1000
+ },
1001
+ updateField: (rowId: string, fieldName: keyof T, value: any) => {
1002
+ api.data.updateRow(rowId, { [fieldName]: value } as Partial<T>);
1003
+ },
1004
+ updateFieldByIndex: (index: number, fieldName: keyof T, value: any) => {
1005
+ api.data.updateRowByIndex(index, { [fieldName]: value } as Partial<T>);
1006
+ },
1007
+ findRows: (predicate: (row: T) => boolean) => getBaseData().filter(predicate),
1008
+ findRowIndex: (predicate: (row: T) => boolean) => getBaseData().findIndex(predicate),
1009
+ } as any;
872
1010
 
873
- getAllData: () => {
874
- const sData = serverDataRef.current;
875
- const base = sData !== null ? sData : dataRef.current;
876
- return [...base];
1011
+ // --- layout (save/restore column visibility, order, sizing, pinning)
1012
+ api.layout = {
1013
+ saveLayout: () => {
1014
+ const s = tableRef.current.getState();
1015
+ return {
1016
+ columnVisibility: s.columnVisibility ?? {},
1017
+ columnOrder: s.columnOrder ?? [],
1018
+ columnSizing: s.columnSizing ?? {},
1019
+ columnPinning: s.columnPinning ?? { left: [], right: [] },
1020
+ pagination: s.pagination ?? { pageIndex: 0, pageSize: 10 },
1021
+ globalFilter: s.globalFilter ?? "",
1022
+ columnFilter: s.columnFilter ?? [],
1023
+ };
877
1024
  },
878
- getDataCount: () => {
879
- const sData = serverDataRef.current;
880
- const base = sData !== null ? sData : dataRef.current;
881
- return base.length;
1025
+ restoreLayout: (layout: any) => {
1026
+
1027
+ if (layout.columnVisibility) dispatch({ type: "SET_COLUMN_VISIBILITY", payload: layout.columnVisibility });
1028
+ if (layout.columnOrder) { dispatch({ type: "SET_COLUMN_ORDER", payload: layout.columnOrder }); onColumnDragEndRef.current?.(layout.columnOrder); }
1029
+ if (layout.columnSizing) { dispatch({ type: "SET_COLUMN_SIZING", payload: layout.columnSizing }); onColumnSizingChangeRef.current?.(layout.columnSizing); }
1030
+ if (layout.columnPinning) { dispatch({ type: "SET_COLUMN_PINNING", payload: layout.columnPinning }); onColumnPinningChangeRef.current?.(layout.columnPinning); }
1031
+ if (layout.pagination && enablePagination) dispatch({ type: "SET_PAGINATION", payload: layout.pagination as any });
1032
+ if (layout.globalFilter !== undefined) dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: layout.globalFilter });
1033
+ if (layout.columnFilter) dispatch({ type: "SET_COLUMN_FILTER", payload: layout.columnFilter as any });
1034
+ },
1035
+ resetLayout: () => {
1036
+ const vis = initialStateConfig.columnVisibility || {};
1037
+ const order = initialStateConfig.columnOrder || [];
1038
+ const sizing = initialStateConfig.columnSizing || {};
1039
+ const pinning = initialStateConfig.columnPinning || { left: [] as string[], right: [] as string[] };
1040
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: vis });
1041
+ dispatch({ type: "SET_COLUMN_ORDER", payload: order });
1042
+ dispatch({ type: "SET_COLUMN_SIZING", payload: sizing });
1043
+ dispatch({ type: "SET_COLUMN_PINNING", payload: pinning });
1044
+ dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: "" });
1045
+ dispatch({ type: "SET_COLUMN_FILTER", payload: initialStateConfig.columnFilter || [] });
1046
+ dispatch({ type: "SET_SORTING_RESET_PAGE", payload: initialStateConfig.sorting || [] });
1047
+ dispatch({ type: "SET_PAGINATION", payload: initialStateConfig.pagination || { pageIndex: 0, pageSize: 10 } });
1048
+ },
1049
+ resetAll: () => {
1050
+ api.layout.resetLayout();
1051
+ resetAllAndReload();
882
1052
  },
883
- getFilteredDataCount: () => tableRef.current.getFilteredRowModel().rows.length,
884
1053
  } as any;
885
1054
 
886
1055
  // --- sorting/pagination/filtering - dispatch + callbacks + server fetch policies
@@ -891,6 +1060,12 @@ export function useDataTableEngine<T extends Record<string, any>>(
891
1060
  nextFetchDelayRef.current = 0;
892
1061
  dispatch({ type: "SET_SORTING_RESET_PAGE", payload: cleaned });
893
1062
  },
1063
+ sortColumn: (columnId: string, direction: 'asc' | 'desc' | false) => {
1064
+ const next: SortingState = direction === false ? [] : [{ id: columnId, desc: direction === 'desc' }];
1065
+ onSortingChangeRef.current?.(next);
1066
+ nextFetchDelayRef.current = 0;
1067
+ dispatch({ type: "SET_SORTING_RESET_PAGE", payload: next });
1068
+ },
894
1069
  clearSorting: () => {
895
1070
  onSortingChangeRef.current?.([]);
896
1071
  nextFetchDelayRef.current = 0;
@@ -912,12 +1087,25 @@ export function useDataTableEngine<T extends Record<string, any>>(
912
1087
  nextFetchDelayRef.current = 0;
913
1088
  dispatch({ type: "SET_PAGINATION", payload: next });
914
1089
  },
1090
+ nextPage: () => {
1091
+ const prev = uiRef.current.pagination;
1092
+ api.pagination.goToPage(Math.min(prev.pageIndex + 1, Math.max(0, Math.ceil((tableTotalRow ?? 0) / prev.pageSize) - 1)));
1093
+ },
1094
+ previousPage: () => {
1095
+ const prev = uiRef.current.pagination;
1096
+ api.pagination.goToPage(Math.max(0, prev.pageIndex - 1));
1097
+ },
915
1098
  setPageSize: (pageSize: number) => {
916
1099
  const next = { pageIndex: 0, pageSize };
917
1100
  onPaginationChangeRef.current?.(next);
918
1101
  nextFetchDelayRef.current = 0;
919
1102
  dispatch({ type: "SET_PAGINATION", payload: next });
920
1103
  },
1104
+ goToFirstPage: () => api.pagination.goToPage(0),
1105
+ goToLastPage: () => {
1106
+ const prev = uiRef.current.pagination;
1107
+ api.pagination.goToPage(Math.max(0, Math.ceil((tableTotalRow ?? 0) / prev.pageSize) - 1));
1108
+ },
921
1109
  resetPagination: () => {
922
1110
  const next = (initialStateConfig.pagination || { pageIndex: 0, pageSize: 10 }) as any;
923
1111
  onPaginationChangeRef.current?.(next);
@@ -938,11 +1126,24 @@ export function useDataTableEngine<T extends Record<string, any>>(
938
1126
  dispatch({ type: "SET_GLOBAL_FILTER_RESET_PAGE", payload: "" });
939
1127
  },
940
1128
  setColumnFilters: (filters: ColumnFilterState, isApply = false) => handleColumnFilterChangeHandler(filters, isApply),
1129
+ addColumnFilter: (columnId: string, operator: string, value: any) => tableRef.current.addColumnFilter?.(columnId, operator, value),
1130
+ removeColumnFilter: (filterId: string) => tableRef.current.removeColumnFilter?.(filterId),
1131
+ clearAllFilters: () => tableRef.current.resetColumnFilter?.(),
1132
+ resetFilters: () => {
1133
+ const reset = (initialStateConfig.columnFilter ?? DEFAULT_INITIAL_STATE.columnFilter) as ColumnFilterState;
1134
+ handleColumnFilterChangeHandler(reset, true);
1135
+ },
941
1136
  } as any;
942
1137
 
943
1138
  api.columnVisibility = {
944
1139
  showColumn: (id: string) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: true } }),
945
1140
  hideColumn: (id: string) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: false } }),
1141
+ toggleColumn: (id: string) => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: { ...uiRef.current.columnVisibility, [id]: !uiRef.current.columnVisibility[id] } }),
1142
+ showAllColumns: () => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: {} }),
1143
+ hideAllColumns: () => {
1144
+ const all = tableRef.current.getAllLeafColumns().reduce((acc, col) => ({ ...acc, [col.id]: false }), {} as Record<string, boolean>);
1145
+ dispatch({ type: "SET_COLUMN_VISIBILITY", payload: all });
1146
+ },
946
1147
  resetColumnVisibility: () => dispatch({ type: "SET_COLUMN_VISIBILITY", payload: initialStateConfig.columnVisibility || {} }),
947
1148
  } as any;
948
1149
 
@@ -951,10 +1152,41 @@ export function useDataTableEngine<T extends Record<string, any>>(
951
1152
  dispatch({ type: "SET_COLUMN_ORDER", payload: next });
952
1153
  onColumnDragEndRef.current?.(next);
953
1154
  },
1155
+ moveColumn: (columnId: string, toIndex: number) => {
1156
+ const order = uiRef.current.columnOrder.length ? uiRef.current.columnOrder : tableRef.current.getAllLeafColumns().map((c: any) => c.id);
1157
+ const from = order.indexOf(columnId);
1158
+ if (from === -1 || toIndex < 0 || toIndex >= order.length) return;
1159
+ const next = [...order];
1160
+ next.splice(from, 1);
1161
+ next.splice(toIndex, 0, columnId);
1162
+ dispatch({ type: "SET_COLUMN_ORDER", payload: next });
1163
+ onColumnDragEndRef.current?.(next);
1164
+ },
954
1165
  resetColumnOrder: () => dispatch({ type: "SET_COLUMN_ORDER", payload: initialStateConfig.columnOrder || [] }),
955
1166
  } as any;
956
1167
 
957
1168
  api.columnPinning = {
1169
+ pinColumnLeft: (columnId: string) => {
1170
+ const cur = uiRef.current.columnPinning;
1171
+ const left = cur.left.includes(columnId) ? cur.left : [...cur.left.filter((id: string) => id !== columnId), columnId];
1172
+ const right = cur.right.filter((id: string) => id !== columnId);
1173
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
1174
+ onColumnPinningChangeRef.current?.({ left, right });
1175
+ },
1176
+ pinColumnRight: (columnId: string) => {
1177
+ const cur = uiRef.current.columnPinning;
1178
+ const left = cur.left.filter((id: string) => id !== columnId);
1179
+ const right = cur.right.includes(columnId) ? cur.right : [...cur.right.filter((id: string) => id !== columnId), columnId];
1180
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
1181
+ onColumnPinningChangeRef.current?.({ left, right });
1182
+ },
1183
+ unpinColumn: (columnId: string) => {
1184
+ const cur = uiRef.current.columnPinning;
1185
+ const left = cur.left.filter((id: string) => id !== columnId);
1186
+ const right = cur.right.filter((id: string) => id !== columnId);
1187
+ dispatch({ type: "SET_COLUMN_PINNING", payload: { left, right } });
1188
+ onColumnPinningChangeRef.current?.({ left, right });
1189
+ },
958
1190
  setPinning: (next: ColumnPinningState) => {
959
1191
  dispatch({ type: "SET_COLUMN_PINNING", payload: next });
960
1192
  onColumnPinningChangeRef.current?.(next);
@@ -963,17 +1195,27 @@ export function useDataTableEngine<T extends Record<string, any>>(
963
1195
  } as any;
964
1196
 
965
1197
  api.columnResizing = {
1198
+ resizeColumn: (columnId: string, width: number) => {
1199
+ const cur = uiRef.current.columnSizing;
1200
+ dispatch({ type: "SET_COLUMN_SIZING", payload: { ...cur, [columnId]: width } });
1201
+ onColumnSizingChangeRef.current?.({ ...cur, [columnId]: width });
1202
+ },
1203
+ autoSizeColumn: (columnId: string) => { void columnId; /* no-op: would require measure; use reset for default */ },
1204
+ autoSizeAllColumns: () => { /* no-op */ },
966
1205
  resetColumnSizing: () => dispatch({ type: "SET_COLUMN_SIZING", payload: initialStateConfig.columnSizing || {} }),
967
1206
  } as any;
968
1207
 
969
1208
  api.selection = {
1209
+ selectRow: (rowId: string) => tableRef.current.selectRow?.(rowId),
1210
+ deselectRow: (rowId: string) => tableRef.current.deselectRow?.(rowId),
1211
+ toggleRowSelection: (rowId: string) => tableRef.current.toggleRowSelected?.(rowId),
1212
+ selectAll: () => tableRef.current.selectAll?.(),
1213
+ deselectAll: () => tableRef.current.deselectAll?.(),
1214
+ toggleSelectAll: () => tableRef.current.toggleAllRowsSelected?.(),
970
1215
  getSelectionState: () => tableRef.current.getSelectionState?.() || ({ ids: [], type: "include" } as const),
971
1216
  getSelectedRows: () => tableRef.current.getSelectedRows(),
972
1217
  getSelectedCount: () => tableRef.current.getSelectedCount(),
973
1218
  isRowSelected: (rowId: string) => tableRef.current.getIsRowSelected(rowId) || false,
974
- // keep using your table extension methods if you have them:
975
- selectAll: () => tableRef.current.selectAll?.(),
976
- deselectAll: () => tableRef.current.deselectAll?.(),
977
1219
  } as any;
978
1220
 
979
1221
  // --- export API (use your existing exportClientData/exportServerData)
@@ -1084,10 +1326,35 @@ export function useDataTableEngine<T extends Record<string, any>>(
1084
1326
  });
1085
1327
  },
1086
1328
 
1329
+ exportServerData: async (options: { format: 'csv' | 'excel'; filename?: string; fetchData: (filters?: Partial<any>, selection?: SelectionState, signal?: AbortSignal) => Promise<any>; pageSize?: number; includeHeaders?: boolean; chunkSize?: number; strictTotalCheck?: boolean; sanitizeCSV?: boolean }) => {
1330
+ const { format, filename: fn = exportFilename, fetchData: customFetchData, chunkSize: cs = exportChunkSize, strictTotalCheck: st = exportStrictTotalCheck, sanitizeCSV: san = exportSanitizeCSV } = options;
1331
+ await runExportWithPolicy({
1332
+ format,
1333
+ filename: fn,
1334
+ mode: "server",
1335
+ execute: async (controller) => {
1336
+ await exportServerData(tableRef.current, {
1337
+ format,
1338
+ filename: fn,
1339
+ fetchData: customFetchData,
1340
+ currentFilters: { globalFilter: tableRef.current.getState().globalFilter, columnFilter: tableRef.current.getState().columnFilter, sorting: tableRef.current.getState().sorting, pagination: tableRef.current.getState().pagination },
1341
+ selection: tableRef.current.getSelectionState?.(),
1342
+ onProgress: handleExportProgressInternal,
1343
+ onComplete: onExportCompleteRef.current,
1344
+ onError: onExportErrorRef.current,
1345
+ onStateChange: (s: any) => handleExportStateChangeInternal({ ...s, mode: "server", format, filename: fn, queueLength: queuedExportCount } as any),
1346
+ signal: controller.signal,
1347
+ chunkSize: cs,
1348
+ strictTotalCheck: st,
1349
+ sanitizeCSV: san,
1350
+ });
1351
+ },
1352
+ });
1353
+ },
1087
1354
  isExporting: () => exportControllerRef.current != null,
1088
1355
  cancelExport: () => handleCancelExport(),
1089
1356
  } as any;
1090
- }, [dataMode, exportChunkSize, exportFilename, exportSanitizeCSV, exportStrictTotalCheck, fetchData, handleCancelExport, handleColumnFilterChangeHandler, handleExportProgressInternal, handleExportStateChangeInternal, initialStateConfig, isServerMode, isServerPagination, isServerSorting, resetAllAndReload, resetPageToFirst, runExportWithPolicy, triggerRefresh, queuedExportCount, tableRef, uiRef, serverDataRef, dataRef, onSortingChangeRef, onPaginationChangeRef, onGlobalFilterChangeRef, onColumnDragEndRef, onColumnPinningChangeRef, onServerExportRef, onExportCompleteRef, onExportErrorRef]);
1357
+ }, [dataMode, exportChunkSize, exportFilename, exportSanitizeCSV, exportStrictTotalCheck, fetchData, handleCancelExport, handleColumnFilterChangeHandler, handleExportProgressInternal, handleExportStateChangeInternal, initialStateConfig, isServerMode, isServerPagination, isServerSorting, resetAllAndReload, resetPageToFirst, runExportWithPolicy, triggerRefresh, queuedExportCount, tableTotalRow, idKey, tableRef, uiRef, serverDataRef, dataRef, onSortingChangeRef, onPaginationChangeRef, onGlobalFilterChangeRef, onColumnDragEndRef, onColumnPinningChangeRef, onColumnSizingChangeRef, onServerExportRef, onExportCompleteRef, onExportErrorRef, enablePagination]);
1091
1358
 
1092
1359
  // --- imperative handlers (used by TanStack callbacks above or view)
1093
1360
  const handleSortingChange = useCallback(
@@ -18,6 +18,7 @@ export type DataRefreshReason = 'initial' | 'state-change' | 'refresh' | 'reload
18
18
 
19
19
  export interface DataFetchMeta {
20
20
  reason?: DataRefreshReason;
21
+ delay?: number;
21
22
  force?: boolean;
22
23
  }
23
24
 
@@ -73,7 +74,7 @@ export interface DataTableProps<T> {
73
74
  initialLoadData?: boolean; // Initial load data (default: true)
74
75
  onDataStateChange?: (filters: Partial<TableState>) => void; // Callback when any filter/state changes
75
76
  onFetchData?: (filters: Partial<TableFilters>, meta?: DataFetchMeta) => Promise<{ data: T[]; total: number }>;
76
- onFetchStateChange?: (filters: Partial<TableState>, meta?: DataFetchMeta) => void;
77
+ onFetchStateChange?: (filters: Partial<TableState>, options?: DataFetchMeta) => void;
77
78
  onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
78
79
 
79
80
  // Simplified Export props