@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.
- package/dist/lib/hooks/use-data-table-engine.d.ts.map +1 -1
- package/dist/lib/hooks/use-data-table-engine.js +317 -21
- package/dist/lib/types/data-table.types.d.ts +2 -1
- package/dist/lib/types/data-table.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib/hooks/use-data-table-engine.ts +288 -21
- package/src/lib/types/data-table.types.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-data-table-engine.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks/use-data-table-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,OAAO,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAiE,SAAS,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGhH,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,qBAAqB,EAGrB,UAAU,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,yBAAyB,CAAC;AAIvF,OAAO,EAAoB,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAKH,KAAK,aAAa,EACrB,MAAM,UAAU,CAAC;AAqBlB,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,kBAAkB,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC,CAAC;AAmEF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACjC,KAAK,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,EAAE;QACF,iBAAiB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,mBAAmB,EAAE,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;KAC1D,CAAC;IACF,OAAO,EAAE;QACL,YAAY,EAAE,OAAO,CAAC;QACtB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;QACzB,SAAS,EAAE,CAAC,EAAE,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7E,kBAAkB,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;QACjF,cAAc,EAAE,OAAO,CAAC;QACxB,UAAU,EAAE,aAAa,CAAC;QAC1B,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;QAChC,cAAc,EAAE,qBAAqB,CAAC;QACtC,kBAAkB,EAAE,OAAO,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE;QACL,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,aAAa,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACjH,mBAAmB,EAAE,CAAC,cAAc,EAAE,GAAG,KAAK,IAAI,CAAC;QACnD,sBAAsB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;QAC/C,wBAAwB,EAAE,CAAC,cAAc,EAAE,GAAG,KAAK,IAAI,CAAC;QACxD,+BAA+B,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAC3E,uBAAuB,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QACjF,yBAAyB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;QAC1E,4BAA4B,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;QACrD,wBAAwB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;QACjD,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/E,iBAAiB,EAAE,MAAM,IAAI,CAAC;QAC9B,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,kBAAkB,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACnG,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;QAC5C,kBAAkB,EAAE,MAAM,IAAI,CAAC;QAC/B,cAAc,EAAE;YAAE,cAAc,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;SAAE,CAAC;KACzE,CAAC;IACF,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACrB,aAAa,EAAE;QACX,KAAK,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC9B,SAAS,EAAE,aAAa,CAAC;QACzB,iBAAiB,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;QACjD,YAAY,EAAE,iBAAiB,CAAC;QAChC,oBAAoB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;QAC1D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,WAAW,EAAE,OAAO,CAAC;QACrB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;QACzC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;QAChC,cAAc,EAAE,qBAAqB,CAAC;QACtC,cAAc,EAAE,MAAM,IAAI,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;QAC7D,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QAC/F,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QACnE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KAC/G,CAAC;CACL;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,YAAY,CAAC,CAAC,CAAC,
|
|
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
|
|
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) =>
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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:
|
|
347
|
-
enabled:
|
|
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
|
-
|
|
595
|
-
const
|
|
596
|
-
|
|
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>,
|
|
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
|
@@ -425,7 +425,7 @@ export function useDataTableEngine<T extends Record<string, any>>(
|
|
|
425
425
|
...overrides,
|
|
426
426
|
};
|
|
427
427
|
|
|
428
|
-
onFetchStateChangeRef.current?.(filters, options
|
|
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) =>
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
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:
|
|
592
|
-
enabled:
|
|
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
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
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
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
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>,
|
|
77
|
+
onFetchStateChange?: (filters: Partial<TableState>, options?: DataFetchMeta) => void;
|
|
77
78
|
onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
|
|
78
79
|
|
|
79
80
|
// Simplified Export props
|