@ackplus/mui-tanstack-data-grid 1.0.0

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.
Files changed (119) hide show
  1. package/README.md +22 -0
  2. package/dist/components/data-table.d.ts +4 -0
  3. package/dist/components/data-table.d.ts.map +1 -0
  4. package/dist/components/data-table.js +24 -0
  5. package/dist/components/filters/filter-value-input.d.ts +10 -0
  6. package/dist/components/filters/filter-value-input.d.ts.map +1 -0
  7. package/dist/components/filters/filter-value-input.js +39 -0
  8. package/dist/components/filters/index.d.ts +3 -0
  9. package/dist/components/filters/index.d.ts.map +1 -0
  10. package/dist/components/filters/index.js +18 -0
  11. package/dist/components/filters/operators.d.ts +93 -0
  12. package/dist/components/filters/operators.d.ts.map +1 -0
  13. package/dist/components/filters/operators.js +42 -0
  14. package/dist/components/grid/grid-view.d.ts +8 -0
  15. package/dist/components/grid/grid-view.d.ts.map +1 -0
  16. package/dist/components/grid/grid-view.js +151 -0
  17. package/dist/components/grid/styled.d.ts +17 -0
  18. package/dist/components/grid/styled.d.ts.map +1 -0
  19. package/dist/components/grid/styled.js +68 -0
  20. package/dist/components/index.d.ts +8 -0
  21. package/dist/components/index.d.ts.map +1 -0
  22. package/dist/components/index.js +23 -0
  23. package/dist/components/toolbar/bulk-actions-toolbar.d.ts +10 -0
  24. package/dist/components/toolbar/bulk-actions-toolbar.d.ts.map +1 -0
  25. package/dist/components/toolbar/bulk-actions-toolbar.js +20 -0
  26. package/dist/components/toolbar/column-filter-control.d.ts +8 -0
  27. package/dist/components/toolbar/column-filter-control.d.ts.map +1 -0
  28. package/dist/components/toolbar/column-filter-control.js +93 -0
  29. package/dist/components/toolbar/data-table-toolbar.d.ts +16 -0
  30. package/dist/components/toolbar/data-table-toolbar.d.ts.map +1 -0
  31. package/dist/components/toolbar/data-table-toolbar.js +44 -0
  32. package/dist/core/index.d.ts +2 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +17 -0
  35. package/dist/core/use-data-table.d.ts +83 -0
  36. package/dist/core/use-data-table.d.ts.map +1 -0
  37. package/dist/core/use-data-table.js +1081 -0
  38. package/dist/features/column-filter.feature.d.ts +48 -0
  39. package/dist/features/column-filter.feature.d.ts.map +1 -0
  40. package/dist/features/column-filter.feature.js +270 -0
  41. package/dist/features/index.d.ts +3 -0
  42. package/dist/features/index.d.ts.map +1 -0
  43. package/dist/features/index.js +18 -0
  44. package/dist/features/selection.feature.d.ts +49 -0
  45. package/dist/features/selection.feature.d.ts.map +1 -0
  46. package/dist/features/selection.feature.js +159 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +34 -0
  50. package/dist/theme/create-data-table-theme.d.ts +16 -0
  51. package/dist/theme/create-data-table-theme.d.ts.map +1 -0
  52. package/dist/theme/create-data-table-theme.js +18 -0
  53. package/dist/theme/index.d.ts +7 -0
  54. package/dist/theme/index.d.ts.map +1 -0
  55. package/dist/theme/index.js +22 -0
  56. package/dist/theme/mui-augmentation.d.ts +40 -0
  57. package/dist/theme/mui-augmentation.d.ts.map +1 -0
  58. package/dist/theme/mui-augmentation.js +2 -0
  59. package/dist/theme/palette.d.ts +24 -0
  60. package/dist/theme/palette.d.ts.map +1 -0
  61. package/dist/theme/palette.js +23 -0
  62. package/dist/theme/tokens.d.ts +43 -0
  63. package/dist/theme/tokens.d.ts.map +1 -0
  64. package/dist/theme/tokens.js +40 -0
  65. package/dist/theme/use-data-table-tokens.d.ts +4 -0
  66. package/dist/theme/use-data-table-tokens.d.ts.map +1 -0
  67. package/dist/theme/use-data-table-tokens.js +42 -0
  68. package/dist/types/api.types.d.ts +156 -0
  69. package/dist/types/api.types.d.ts.map +1 -0
  70. package/dist/types/api.types.js +2 -0
  71. package/dist/types/column.types.d.ts +60 -0
  72. package/dist/types/column.types.d.ts.map +1 -0
  73. package/dist/types/column.types.js +7 -0
  74. package/dist/types/data-table.types.d.ts +161 -0
  75. package/dist/types/data-table.types.d.ts.map +1 -0
  76. package/dist/types/data-table.types.js +2 -0
  77. package/dist/types/export.types.d.ts +32 -0
  78. package/dist/types/export.types.d.ts.map +1 -0
  79. package/dist/types/export.types.js +2 -0
  80. package/dist/types/filter.types.d.ts +15 -0
  81. package/dist/types/filter.types.d.ts.map +1 -0
  82. package/dist/types/filter.types.js +2 -0
  83. package/dist/types/index.d.ts +10 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +25 -0
  86. package/dist/types/logging.types.d.ts +23 -0
  87. package/dist/types/logging.types.d.ts.map +1 -0
  88. package/dist/types/logging.types.js +2 -0
  89. package/dist/types/selection.types.d.ts +7 -0
  90. package/dist/types/selection.types.d.ts.map +1 -0
  91. package/dist/types/selection.types.js +2 -0
  92. package/dist/types/slots.types.d.ts +41 -0
  93. package/dist/types/slots.types.d.ts.map +1 -0
  94. package/dist/types/slots.types.js +2 -0
  95. package/dist/types/state.types.d.ts +46 -0
  96. package/dist/types/state.types.d.ts.map +1 -0
  97. package/dist/types/state.types.js +2 -0
  98. package/dist/utils/column-helpers.d.ts +9 -0
  99. package/dist/utils/column-helpers.d.ts.map +1 -0
  100. package/dist/utils/column-helpers.js +46 -0
  101. package/dist/utils/debounced-fetch.utils.d.ts +22 -0
  102. package/dist/utils/debounced-fetch.utils.d.ts.map +1 -0
  103. package/dist/utils/debounced-fetch.utils.js +85 -0
  104. package/dist/utils/export-utils.d.ts +49 -0
  105. package/dist/utils/export-utils.d.ts.map +1 -0
  106. package/dist/utils/export-utils.js +372 -0
  107. package/dist/utils/index.d.ts +7 -0
  108. package/dist/utils/index.d.ts.map +1 -0
  109. package/dist/utils/index.js +22 -0
  110. package/dist/utils/logger.d.ts +24 -0
  111. package/dist/utils/logger.d.ts.map +1 -0
  112. package/dist/utils/logger.js +107 -0
  113. package/dist/utils/special-columns.d.ts +9 -0
  114. package/dist/utils/special-columns.d.ts.map +1 -0
  115. package/dist/utils/special-columns.js +80 -0
  116. package/dist/utils/table-helpers.d.ts +16 -0
  117. package/dist/utils/table-helpers.d.ts.map +1 -0
  118. package/dist/utils/table-helpers.js +50 -0
  119. package/package.json +74 -0
@@ -0,0 +1,161 @@
1
+ import type { ReactNode, MouseEvent, RefObject } from 'react';
2
+ import type { Row, SortingState, ColumnResizeMode, ColumnPinningState, PaginationState, ColumnDef } from '@tanstack/react-table';
3
+ import type { DataTableDensity } from '../theme/tokens';
4
+ import type { ColumnFilterState } from './filter.types';
5
+ import type { SelectionState, SelectMode } from './selection.types';
6
+ import type { DataTableLoggingOptions } from './logging.types';
7
+ import type { DataTableApi } from './api.types';
8
+ import type { DataTableSlots, PartialSlotProps } from './slots.types';
9
+ import type { ExportConcurrencyMode, ExportProgressPayload, ExportStateChange, ServerExportResult } from './export.types';
10
+ import type { TableState, TableFilters, DataFetchMeta, DataRefreshContext } from './state.types';
11
+ /**
12
+ * Props for the `<DataTable>` component.
13
+ *
14
+ * Naming conventions: `enableX` = feature toggle · `onXChange` = state callback ·
15
+ * `xMode` = client/server · `renderX` = render function · plain adjectives
16
+ * (`striped`, `hover`) = visual modifiers. v1 names are kept as `@deprecated`
17
+ * aliases and removed in v3.
18
+ */
19
+ export interface DataTableProps<T> {
20
+ /** Column definitions. */
21
+ columns: ColumnDef<T, any>[];
22
+ /** Row data (client mode). */
23
+ data?: T[];
24
+ /** Total row count for server mode. */
25
+ rowCount?: number;
26
+ /** Returns a stable id for a row. Defaults to `row[idKey]`. */
27
+ getRowId?: (row: T, index: number) => string;
28
+ /** Shorthand for `getRowId` when the id is a single field (default: `'id'`). */
29
+ idKey?: keyof T;
30
+ extraFilter?: ReactNode | null;
31
+ footerFilter?: ReactNode | null;
32
+ /** @deprecated Renamed to `rowCount`. */
33
+ totalRow?: number;
34
+ dataMode?: 'client' | 'server';
35
+ initialState?: Partial<TableState>;
36
+ initialLoadData?: boolean;
37
+ onDataStateChange?: (state: Partial<TableState>) => void;
38
+ onFetchData?: (filters: Partial<TableFilters>, meta?: DataFetchMeta) => Promise<{
39
+ data: T[];
40
+ total: number;
41
+ }>;
42
+ onFetchStateChange?: (filters: Partial<TableState>, options?: DataFetchMeta) => void;
43
+ onRefreshData?: (context: DataRefreshContext) => void | Promise<void>;
44
+ exportFilename?: string;
45
+ exportConcurrency?: ExportConcurrencyMode;
46
+ exportChunkSize?: number;
47
+ exportStrictTotalCheck?: boolean;
48
+ exportSanitizeCSV?: boolean;
49
+ onExportProgress?: (progress: ExportProgressPayload) => void;
50
+ onExportComplete?: (result: {
51
+ success: boolean;
52
+ filename: string;
53
+ totalRows: number;
54
+ }) => void;
55
+ onExportError?: (error: {
56
+ message: string;
57
+ code: string;
58
+ }) => void;
59
+ onExportStateChange?: (state: ExportStateChange) => void;
60
+ onServerExport?: (filters?: Partial<TableState>, selection?: SelectionState, signal?: AbortSignal) => Promise<ServerExportResult<any>>;
61
+ onExportCancel?: () => void;
62
+ enableRowSelection?: boolean | ((row: Row<T>) => boolean);
63
+ enableMultiRowSelection?: boolean;
64
+ selectMode?: SelectMode;
65
+ isRowSelectable?: (params: {
66
+ row: T;
67
+ id: string;
68
+ }) => boolean;
69
+ onSelectionChange?: (selection: SelectionState) => void;
70
+ onRowClick?: (event: MouseEvent<HTMLDivElement>, row: Row<T>) => void;
71
+ selectOnRowClick?: boolean;
72
+ enableBulkActions?: boolean;
73
+ renderBulkActions?: (selectionState: SelectionState) => ReactNode;
74
+ /** @deprecated Renamed to `renderBulkActions`. */
75
+ bulkActions?: (selectionState: SelectionState) => ReactNode;
76
+ enableColumnResizing?: boolean;
77
+ columnResizeMode?: ColumnResizeMode;
78
+ onColumnSizingChange?: (sizing: Record<string, number>) => void;
79
+ enableColumnReordering?: boolean;
80
+ onColumnOrderChange?: (columnOrder: string[]) => void;
81
+ /** @deprecated Renamed to `enableColumnReordering`. */
82
+ enableColumnDragging?: boolean;
83
+ /** @deprecated Renamed to `onColumnOrderChange`. */
84
+ onColumnDragEnd?: (columnOrder: string[]) => void;
85
+ enableColumnPinning?: boolean;
86
+ onColumnPinningChange?: (pinning: ColumnPinningState) => void;
87
+ enableColumnVisibility?: boolean;
88
+ onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;
89
+ enableRowExpansion?: boolean;
90
+ getRowCanExpand?: (row: Row<T>) => boolean;
91
+ renderDetailPanel?: (row: Row<T>) => ReactNode;
92
+ /** @deprecated Renamed to `enableRowExpansion`. */
93
+ enableExpanding?: boolean;
94
+ /** @deprecated Renamed to `renderDetailPanel`. */
95
+ renderSubComponent?: (row: Row<T>) => ReactNode;
96
+ enablePagination?: boolean;
97
+ paginationMode?: 'client' | 'server';
98
+ onPaginationChange?: (pagination: PaginationState) => void;
99
+ enableGlobalFilter?: boolean;
100
+ enableColumnFilter?: boolean;
101
+ filterMode?: 'client' | 'server';
102
+ onColumnFilterChange?: (state: ColumnFilterState, isApplied?: boolean) => void;
103
+ onGlobalFilterChange?: (globalFilter: string) => void;
104
+ /** @deprecated Use `onColumnFilterChange` (its second arg is `isApplied`). */
105
+ onColumnFiltersChange?: (filterState: ColumnFilterState, isApplied?: boolean) => void;
106
+ enableSorting?: boolean;
107
+ sortingMode?: 'client' | 'server';
108
+ onSortingChange?: (sorting: SortingState) => void;
109
+ /** Row density. Maps v1 `small`→`compact`, `medium`→`standard`. */
110
+ density?: DataTableDensity;
111
+ hover?: boolean;
112
+ striped?: boolean;
113
+ /** Columns stretch to fill the width (and still respect min/max). */
114
+ fitToScreen?: boolean;
115
+ /** @deprecated Renamed to `density` (`small`→`compact`, `medium`→`standard`). */
116
+ tableSize?: 'small' | 'medium';
117
+ /** @deprecated Renamed to `hover`. */
118
+ enableHover?: boolean;
119
+ /** @deprecated Renamed to `striped`. */
120
+ enableStripes?: boolean;
121
+ /** Conditional class for a row. */
122
+ getRowClassName?: (params: {
123
+ row: Row<T>;
124
+ index: number;
125
+ }) => string;
126
+ /** Conditional class for a cell. */
127
+ getCellClassName?: (params: {
128
+ row: Row<T>;
129
+ columnId: string;
130
+ value: any;
131
+ }) => string;
132
+ stickyHeader?: boolean;
133
+ stickyFooter?: boolean;
134
+ maxHeight?: string | number;
135
+ /** @deprecated Renamed to `stickyHeader`. */
136
+ enableStickyHeaderOrFooter?: boolean;
137
+ enableVirtualization?: boolean;
138
+ estimatedRowHeight?: number;
139
+ /** @deprecated Renamed to `estimatedRowHeight`. */
140
+ estimateRowHeight?: number;
141
+ enableDensitySelector?: boolean;
142
+ enableExport?: boolean;
143
+ enableReset?: boolean;
144
+ enableRefresh?: boolean;
145
+ /** @deprecated Renamed to `enableDensitySelector`. */
146
+ enableTableSizeControl?: boolean;
147
+ loading?: boolean;
148
+ noRowsMessage?: string | ReactNode;
149
+ skeletonRows?: number;
150
+ /** @deprecated Renamed to `noRowsMessage`. */
151
+ emptyMessage?: string | ReactNode;
152
+ slots?: Partial<DataTableSlots>;
153
+ slotProps?: PartialSlotProps;
154
+ /** Imperative handle (data CRUD, selection, sorting, export, …). */
155
+ apiRef?: RefObject<DataTableApi<T> | null>;
156
+ /** Per-instance style overrides on the root. */
157
+ sx?: Record<string, any>;
158
+ className?: string;
159
+ logging?: boolean | DataTableLoggingOptions;
160
+ }
161
+ //# sourceMappingURL=data-table.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../src/types/data-table.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,32 @@
1
+ export type ExportFormat = 'csv' | 'excel';
2
+ export type ExportConcurrencyMode = 'ignoreIfRunning' | 'cancelAndRestart' | 'queue';
3
+ export type ExportPhase = 'starting' | 'fetching' | 'processing' | 'downloading' | 'completed' | 'cancelled' | 'error';
4
+ export interface ExportProgressPayload {
5
+ processedRows?: number;
6
+ totalRows?: number;
7
+ percentage?: number;
8
+ }
9
+ export interface ExportStateChange {
10
+ phase: ExportPhase;
11
+ mode?: 'client' | 'server';
12
+ format?: ExportFormat;
13
+ filename?: string;
14
+ processedRows?: number;
15
+ totalRows?: number;
16
+ percentage?: number;
17
+ message?: string;
18
+ code?: string;
19
+ startedAt?: number;
20
+ endedAt?: number;
21
+ }
22
+ export type ServerExportResult<T = any> = {
23
+ data: T[];
24
+ total?: number;
25
+ } | {
26
+ blob: Blob;
27
+ filename?: string;
28
+ } | {
29
+ fileUrl: string;
30
+ filename?: string;
31
+ };
32
+ //# sourceMappingURL=export.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.types.d.ts","sourceRoot":"","sources":["../../src/types/export.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAE3C,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,OAAO,CAAC;AAErF,MAAM,MAAM,WAAW,GACjB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,aAAa,GACb,WAAW,GACX,WAAW,GACX,OAAO,CAAC;AAEd,MAAM,WAAW,qBAAqB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,GAAG,IAChC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,15 @@
1
+ export type ColumnFilterLogic = 'AND' | 'OR';
2
+ export interface ColumnFilterRule {
3
+ id: string;
4
+ columnId: string;
5
+ operator: string;
6
+ value: any;
7
+ columnType?: string;
8
+ }
9
+ export interface ColumnFilterState {
10
+ filters: ColumnFilterRule[];
11
+ logic: ColumnFilterLogic;
12
+ pendingFilters: ColumnFilterRule[];
13
+ pendingLogic: ColumnFilterLogic;
14
+ }
15
+ //# sourceMappingURL=filter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.types.d.ts","sourceRoot":"","sources":["../../src/types/filter.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,iBAAiB,CAAC;IACzB,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,YAAY,EAAE,iBAAiB,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ export * from './selection.types';
2
+ export * from './filter.types';
3
+ export * from './export.types';
4
+ export * from './logging.types';
5
+ export * from './state.types';
6
+ export * from './column.types';
7
+ export * from './slots.types';
8
+ export * from './api.types';
9
+ export * from './data-table.types';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./selection.types"), exports);
18
+ __exportStar(require("./filter.types"), exports);
19
+ __exportStar(require("./export.types"), exports);
20
+ __exportStar(require("./logging.types"), exports);
21
+ __exportStar(require("./state.types"), exports);
22
+ __exportStar(require("./column.types"), exports);
23
+ __exportStar(require("./slots.types"), exports);
24
+ __exportStar(require("./api.types"), exports);
25
+ __exportStar(require("./data-table.types"), exports);
@@ -0,0 +1,23 @@
1
+ export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
2
+ export interface ConsoleLike {
3
+ debug?: (...args: unknown[]) => void;
4
+ info?: (...args: unknown[]) => void;
5
+ warn?: (...args: unknown[]) => void;
6
+ error?: (...args: unknown[]) => void;
7
+ log?: (...args: unknown[]) => void;
8
+ }
9
+ export interface DataTableLoggingOptions {
10
+ /** Whether logging is enabled. */
11
+ enabled?: boolean;
12
+ /** Minimum level emitted (default: `warn`). */
13
+ level?: LogLevel;
14
+ /** Prefix on every message (default: `DataTable`). */
15
+ prefix?: string;
16
+ /** Optional scope appended after the prefix. */
17
+ scope?: string;
18
+ /** Prepend an ISO timestamp. */
19
+ includeTimestamp?: boolean;
20
+ /** Custom logger backend (default: `console`). */
21
+ logger?: ConsoleLike;
22
+ }
23
+ //# sourceMappingURL=logging.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.types.d.ts","sourceRoot":"","sources":["../../src/types/logging.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACpC,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ export type SelectMode = 'page' | 'all';
2
+ export interface SelectionState {
3
+ ids: string[];
4
+ type: 'include' | 'exclude';
5
+ selectMode?: SelectMode;
6
+ }
7
+ //# sourceMappingURL=selection.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.types.d.ts","sourceRoot":"","sources":["../../src/types/selection.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,41 @@
1
+ import type { ComponentType } from 'react';
2
+ /**
3
+ * Replaceable sub-components. Pass a component to fully swap a part; pair with
4
+ * `slotProps` to inject props/`sx` without replacing it. (MUI `slots`/`slotProps` pattern.)
5
+ *
6
+ * The index signature keeps this extensible while the full set is filled in across phases.
7
+ */
8
+ export interface DataTableSlots {
9
+ root?: ComponentType<any>;
10
+ scroller?: ComponentType<any>;
11
+ grid?: ComponentType<any>;
12
+ header?: ComponentType<any>;
13
+ headerRow?: ComponentType<any>;
14
+ headerCell?: ComponentType<any>;
15
+ body?: ComponentType<any>;
16
+ row?: ComponentType<any>;
17
+ cell?: ComponentType<any>;
18
+ detailPanel?: ComponentType<any>;
19
+ footer?: ComponentType<any>;
20
+ pagination?: ComponentType<any>;
21
+ loadingOverlay?: ComponentType<any>;
22
+ noRowsOverlay?: ComponentType<any>;
23
+ toolbar?: ComponentType<any>;
24
+ searchInput?: ComponentType<any>;
25
+ columnVisibilityControl?: ComponentType<any>;
26
+ columnFilterControl?: ComponentType<any>;
27
+ columnPinningControl?: ComponentType<any>;
28
+ densityControl?: ComponentType<any>;
29
+ resetButton?: ComponentType<any>;
30
+ refreshButton?: ComponentType<any>;
31
+ exportButton?: ComponentType<any>;
32
+ bulkActionsToolbar?: ComponentType<any>;
33
+ sortIconAsc?: ComponentType<any>;
34
+ sortIconDesc?: ComponentType<any>;
35
+ [slot: string]: ComponentType<any> | undefined;
36
+ }
37
+ export type DataTableSlotProps = {
38
+ [K in keyof DataTableSlots]?: Record<string, any>;
39
+ };
40
+ export type PartialSlotProps = DataTableSlotProps;
41
+ //# sourceMappingURL=slots.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.types.d.ts","sourceRoot":"","sources":["../../src/types/slots.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAE3B,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAEhC,cAAc,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,uBAAuB,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,mBAAmB,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,kBAAkB,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAExC,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAElC,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,MAAM,kBAAkB,GAAG;KAC5B,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,46 @@
1
+ import type { SortingState, ColumnPinningState, ColumnOrderState, VisibilityState } from '@tanstack/react-table';
2
+ import type { ColumnFilterState } from './filter.types';
3
+ import type { SelectionState } from './selection.types';
4
+ export interface PaginationModel {
5
+ pageIndex: number;
6
+ pageSize: number;
7
+ }
8
+ /** Full controllable table-state snapshot. */
9
+ export interface TableState {
10
+ sorting?: SortingState;
11
+ pagination?: PaginationModel;
12
+ globalFilter?: string;
13
+ columnFilter?: ColumnFilterState;
14
+ columnVisibility?: VisibilityState;
15
+ columnSizing?: Record<string, number>;
16
+ columnOrder?: ColumnOrderState;
17
+ columnPinning?: ColumnPinningState;
18
+ selectionState?: SelectionState;
19
+ expanded?: Record<string, boolean>;
20
+ }
21
+ /** Normalised filter/state passed to the server fetch handler. */
22
+ export interface TableFilters {
23
+ globalFilter?: string;
24
+ pagination?: PaginationModel;
25
+ columnFilter?: ColumnFilterState;
26
+ sorting?: SortingState;
27
+ }
28
+ export type DataRefreshReason = 'initial' | 'state-change' | 'refresh' | 'reload' | 'reset' | (string & {});
29
+ export interface DataFetchMeta {
30
+ reason?: DataRefreshReason;
31
+ delay?: number;
32
+ force?: boolean;
33
+ }
34
+ export interface DataRefreshOptions extends DataFetchMeta {
35
+ resetPagination?: boolean;
36
+ }
37
+ export interface DataRefreshContext {
38
+ filters: Partial<TableFilters>;
39
+ state: Partial<TableState>;
40
+ options: {
41
+ resetPagination: boolean;
42
+ force: boolean;
43
+ reason: string;
44
+ };
45
+ }
46
+ //# sourceMappingURL=state.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.types.d.ts","sourceRoot":"","sources":["../../src/types/state.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import type { Column, ColumnDef } from '@tanstack/react-table';
2
+ export type ColumnType = 'text' | 'number' | 'date' | 'boolean' | 'select' | 'actions';
3
+ export declare function getColumnType(column: Column<any, unknown>): ColumnType;
4
+ export declare function getCustomFilterComponent(column: Column<any, unknown>): any;
5
+ export declare function getColumnOptions(column: Column<any, unknown>): any[];
6
+ /** Ensure every column (and nested group) has a stable `id`. */
7
+ export declare function withIdsDeep<T>(cols: ColumnDef<T, any>[]): ColumnDef<T, any>[];
8
+ export declare function isColumnFilterable(column: Column<any, unknown>): boolean;
9
+ //# sourceMappingURL=column-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/column-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEvF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,UAAU,CAGtE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAE1E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE,CASpE;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAM7E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,OAAO,CAGxE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getColumnType = getColumnType;
4
+ exports.getCustomFilterComponent = getCustomFilterComponent;
5
+ exports.getColumnOptions = getColumnOptions;
6
+ exports.withIdsDeep = withIdsDeep;
7
+ exports.isColumnFilterable = isColumnFilterable;
8
+ function getColumnType(column) {
9
+ var _a;
10
+ if ((_a = column === null || column === void 0 ? void 0 : column.columnDef) === null || _a === void 0 ? void 0 : _a.type)
11
+ return column.columnDef.type;
12
+ return 'text';
13
+ }
14
+ function getCustomFilterComponent(column) {
15
+ var _a, _b;
16
+ return ((_a = column === null || column === void 0 ? void 0 : column.columnDef) === null || _a === void 0 ? void 0 : _a.filterComponent) || ((_b = column === null || column === void 0 ? void 0 : column.columnDef) === null || _b === void 0 ? void 0 : _b.editComponent);
17
+ }
18
+ function getColumnOptions(column) {
19
+ var _a;
20
+ if ((_a = column === null || column === void 0 ? void 0 : column.columnDef) === null || _a === void 0 ? void 0 : _a.options)
21
+ return column.columnDef.options || [];
22
+ if (getColumnType(column) === 'boolean') {
23
+ return [
24
+ { value: true, label: 'Yes' },
25
+ { value: false, label: 'No' },
26
+ ];
27
+ }
28
+ return [];
29
+ }
30
+ /** Ensure every column (and nested group) has a stable `id`. */
31
+ function withIdsDeep(cols) {
32
+ return cols.map((c, i) => {
33
+ var _a, _b;
34
+ return ({
35
+ ...c,
36
+ id: (_b = (_a = c.id) !== null && _a !== void 0 ? _a : c.accessorKey) !== null && _b !== void 0 ? _b : `col_${i}`,
37
+ ...(Array.isArray(c.columns) && { columns: withIdsDeep(c.columns) }),
38
+ });
39
+ });
40
+ }
41
+ function isColumnFilterable(column) {
42
+ var _a;
43
+ if (((_a = column === null || column === void 0 ? void 0 : column.columnDef) === null || _a === void 0 ? void 0 : _a.filterable) !== undefined)
44
+ return column.columnDef.filterable;
45
+ return true;
46
+ }
@@ -0,0 +1,22 @@
1
+ import type { DataFetchMeta, TableFilters } from '../types/state.types';
2
+ interface DebouncedFetchOptions {
3
+ debounceDelay?: number;
4
+ meta?: DataFetchMeta;
5
+ }
6
+ interface UseDebouncedFetchReturn<T extends Record<string, any>> {
7
+ debouncedFetch: (filters: Partial<TableFilters>, optionsOrDelay?: number | DebouncedFetchOptions) => Promise<{
8
+ data: T[];
9
+ total: number;
10
+ } | null>;
11
+ isLoading: boolean;
12
+ }
13
+ /**
14
+ * Debounced, race-safe fetch hook: collapses rapid state changes into one call
15
+ * and ignores stale responses. Ported from v1 unchanged.
16
+ */
17
+ export declare function useDebouncedFetch<T extends Record<string, any>>(onFetchData: ((filters: Partial<TableFilters>, meta?: DataFetchMeta) => Promise<{
18
+ data: T[];
19
+ total: number;
20
+ }>) | undefined): UseDebouncedFetchReturn<T>;
21
+ export {};
22
+ //# sourceMappingURL=debounced-fetch.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounced-fetch.utils.d.ts","sourceRoot":"","sources":["../../src/utils/debounced-fetch.utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIxE,UAAU,qBAAqB;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC3D,cAAc,EAAE,CACZ,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,qBAAqB,KAC9C,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClD,SAAS,EAAE,OAAO,CAAC;CACtB;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,WAAW,EACL,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GACjG,SAAS,GAChB,uBAAuB,CAAC,CAAC,CAAC,CA+E5B"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDebouncedFetch = useDebouncedFetch;
4
+ const react_1 = require("react");
5
+ const DEFAULT_DEBOUNCE_DELAY = 300;
6
+ /**
7
+ * Debounced, race-safe fetch hook: collapses rapid state changes into one call
8
+ * and ignores stale responses. Ported from v1 unchanged.
9
+ */
10
+ function useDebouncedFetch(onFetchData) {
11
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
12
+ const debounceTimer = (0, react_1.useRef)(null);
13
+ const pendingRequestRef = (0, react_1.useRef)(null);
14
+ const latestRequestIdRef = (0, react_1.useRef)(0);
15
+ const activeRequestCountRef = (0, react_1.useRef)(0);
16
+ const isMountedRef = (0, react_1.useRef)(true);
17
+ const resetLoadingIfIdle = (0, react_1.useCallback)(() => {
18
+ if (!isMountedRef.current)
19
+ return;
20
+ if (!debounceTimer.current && !pendingRequestRef.current && activeRequestCountRef.current === 0) {
21
+ setIsLoading(false);
22
+ }
23
+ }, []);
24
+ const debouncedFetch = (0, react_1.useCallback)(async (filters, optionsOrDelay = DEFAULT_DEBOUNCE_DELAY) => {
25
+ var _a;
26
+ if (!onFetchData)
27
+ return null;
28
+ const options = typeof optionsOrDelay === 'number' ? { debounceDelay: optionsOrDelay } : optionsOrDelay;
29
+ const debounceDelay = (_a = options.debounceDelay) !== null && _a !== void 0 ? _a : DEFAULT_DEBOUNCE_DELAY;
30
+ const requestId = latestRequestIdRef.current + 1;
31
+ latestRequestIdRef.current = requestId;
32
+ if (debounceTimer.current) {
33
+ clearTimeout(debounceTimer.current);
34
+ debounceTimer.current = null;
35
+ }
36
+ if (pendingRequestRef.current) {
37
+ pendingRequestRef.current.resolve(null);
38
+ pendingRequestRef.current = null;
39
+ }
40
+ setIsLoading(true);
41
+ return new Promise((resolve, reject) => {
42
+ pendingRequestRef.current = { id: requestId, resolve, reject };
43
+ debounceTimer.current = setTimeout(async () => {
44
+ const pendingRequest = pendingRequestRef.current;
45
+ if (!pendingRequest || pendingRequest.id !== requestId)
46
+ return;
47
+ pendingRequestRef.current = null;
48
+ debounceTimer.current = null;
49
+ activeRequestCountRef.current += 1;
50
+ try {
51
+ const result = await onFetchData(filters, options.meta);
52
+ if (requestId === latestRequestIdRef.current)
53
+ resolve(result);
54
+ else
55
+ resolve(null);
56
+ }
57
+ catch (error) {
58
+ if (requestId === latestRequestIdRef.current)
59
+ reject(error);
60
+ else
61
+ resolve(null);
62
+ }
63
+ finally {
64
+ activeRequestCountRef.current = Math.max(0, activeRequestCountRef.current - 1);
65
+ resetLoadingIfIdle();
66
+ }
67
+ }, debounceDelay);
68
+ });
69
+ }, [onFetchData, resetLoadingIfIdle]);
70
+ (0, react_1.useEffect)(() => {
71
+ isMountedRef.current = true;
72
+ return () => {
73
+ isMountedRef.current = false;
74
+ if (debounceTimer.current) {
75
+ clearTimeout(debounceTimer.current);
76
+ debounceTimer.current = null;
77
+ }
78
+ if (pendingRequestRef.current) {
79
+ pendingRequestRef.current.resolve(null);
80
+ pendingRequestRef.current = null;
81
+ }
82
+ };
83
+ }, []);
84
+ return { debouncedFetch, isLoading };
85
+ }