@ackplus/react-tanstack-data-table 1.0.19-beta-0.6 → 1.0.19-beta-0.8

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 (258) hide show
  1. package/package.json +3 -11
  2. package/{index.js → src/index.d.ts} +3 -26
  3. package/src/index.js +31 -0
  4. package/src/lib/components/droupdown/menu-dropdown.d.ts +17 -0
  5. package/src/lib/components/droupdown/menu-dropdown.js +52 -0
  6. package/src/lib/components/filters/filter-value-input.d.ts +9 -0
  7. package/src/lib/components/filters/filter-value-input.js +58 -0
  8. package/src/lib/components/filters/index.d.ts +23 -0
  9. package/{lib → src/lib}/components/filters/index.js +6 -2
  10. package/src/lib/components/headers/draggable-header.d.ts +12 -0
  11. package/{lib → src/lib}/components/headers/draggable-header.js +35 -49
  12. package/{lib/components/headers/index.js → src/lib/components/headers/index.d.ts} +0 -3
  13. package/src/lib/components/headers/index.js +5 -0
  14. package/src/lib/components/headers/table-header.d.ts +10 -0
  15. package/src/lib/components/headers/table-header.js +48 -0
  16. package/src/lib/components/index.d.ts +7 -0
  17. package/src/lib/components/index.js +10 -0
  18. package/src/lib/components/pagination/data-table-pagination.d.ts +11 -0
  19. package/src/lib/components/pagination/data-table-pagination.js +25 -0
  20. package/src/lib/components/pagination/index.d.ts +1 -0
  21. package/src/lib/components/pagination/index.js +4 -0
  22. package/src/lib/components/rows/data-table-row.d.ts +13 -0
  23. package/src/lib/components/rows/data-table-row.js +31 -0
  24. package/src/lib/components/rows/empty-data-row.d.ts +6 -0
  25. package/src/lib/components/rows/empty-data-row.js +11 -0
  26. package/{lib/components/rows/index.js → src/lib/components/rows/index.d.ts} +0 -3
  27. package/src/lib/components/rows/index.js +6 -0
  28. package/src/lib/components/rows/loading-rows.d.ts +5 -0
  29. package/src/lib/components/rows/loading-rows.js +49 -0
  30. package/src/lib/components/table/data-table.d.ts +3 -0
  31. package/src/lib/components/table/data-table.js +492 -0
  32. package/src/lib/components/table/data-table.types.d.ts +114 -0
  33. package/src/lib/components/table/data-table.types.js +2 -0
  34. package/{lib/components/table/index.js → src/lib/components/table/index.d.ts} +0 -3
  35. package/src/lib/components/table/index.js +5 -0
  36. package/src/lib/components/toolbar/bulk-actions-toolbar.d.ts +9 -0
  37. package/src/lib/components/toolbar/bulk-actions-toolbar.js +25 -0
  38. package/src/lib/components/toolbar/column-custom-filter-control.d.ts +1 -0
  39. package/src/lib/components/toolbar/column-custom-filter-control.js +137 -0
  40. package/src/lib/components/toolbar/column-pinning-control.d.ts +1 -0
  41. package/src/lib/components/toolbar/column-pinning-control.js +105 -0
  42. package/src/lib/components/toolbar/column-reset-control.d.ts +1 -0
  43. package/src/lib/components/toolbar/column-reset-control.js +16 -0
  44. package/src/lib/components/toolbar/column-visibility-control.d.ts +1 -0
  45. package/src/lib/components/toolbar/column-visibility-control.js +31 -0
  46. package/src/lib/components/toolbar/data-table-toolbar.d.ts +14 -0
  47. package/src/lib/components/toolbar/data-table-toolbar.js +26 -0
  48. package/{lib/components/toolbar/index.js → src/lib/components/toolbar/index.d.ts} +1 -6
  49. package/src/lib/components/toolbar/index.js +17 -0
  50. package/src/lib/components/toolbar/table-export-control.d.ts +25 -0
  51. package/src/lib/components/toolbar/table-export-control.js +93 -0
  52. package/src/lib/components/toolbar/table-search-control.d.ts +1 -0
  53. package/src/lib/components/toolbar/table-search-control.js +61 -0
  54. package/src/lib/components/toolbar/table-size-control.d.ts +1 -0
  55. package/src/lib/components/toolbar/table-size-control.js +36 -0
  56. package/src/lib/contexts/data-table-context.d.ts +43 -0
  57. package/{lib → src/lib}/contexts/data-table-context.js +12 -8
  58. package/src/lib/examples/advanced-features-example.d.ts +1 -0
  59. package/src/lib/examples/advanced-features-example.js +264 -0
  60. package/src/lib/examples/bulk-actions-test.d.ts +1 -0
  61. package/src/lib/examples/bulk-actions-test.js +44 -0
  62. package/src/lib/examples/custom-column-filter-example.d.ts +1 -0
  63. package/{lib → src/lib}/examples/custom-column-filter-example.js +10 -10
  64. package/src/lib/examples/index.js +13 -0
  65. package/src/lib/examples/selection-test-example.d.ts +1 -0
  66. package/src/lib/examples/selection-test-example.js +101 -0
  67. package/src/lib/examples/simple-local-example.d.ts +1 -0
  68. package/{lib → src/lib}/examples/simple-local-example.js +14 -18
  69. package/src/lib/features/custom-column-filter.feature.d.ts +45 -0
  70. package/{lib → src/lib}/features/custom-column-filter.feature.js +40 -99
  71. package/src/lib/features/custom-selection.feature.d.ts +46 -0
  72. package/{lib → src/lib}/features/custom-selection.feature.js +18 -70
  73. package/src/lib/features/index.d.ts +2 -0
  74. package/src/lib/features/index.js +8 -0
  75. package/src/lib/hooks/index.d.ts +1 -0
  76. package/src/lib/hooks/index.js +4 -0
  77. package/src/lib/hooks/use-data-table-api.d.ts +56 -0
  78. package/{lib → src/lib}/hooks/use-data-table-api.js +79 -136
  79. package/src/lib/icons/add-icon.d.ts +2 -0
  80. package/src/lib/icons/add-icon.js +8 -0
  81. package/src/lib/icons/csv-icon.d.ts +2 -0
  82. package/src/lib/icons/csv-icon.js +8 -0
  83. package/src/lib/icons/delete-icon.d.ts +2 -0
  84. package/src/lib/icons/delete-icon.js +8 -0
  85. package/src/lib/icons/excel-icon.d.ts +2 -0
  86. package/src/lib/icons/excel-icon.js +8 -0
  87. package/src/lib/icons/index.js +17 -0
  88. package/src/lib/icons/unpin-icon.d.ts +2 -0
  89. package/src/lib/icons/unpin-icon.js +8 -0
  90. package/src/lib/icons/view-comfortable-icon.d.ts +2 -0
  91. package/src/lib/icons/view-comfortable-icon.js +8 -0
  92. package/src/lib/icons/view-compact-icon.d.ts +2 -0
  93. package/src/lib/icons/view-compact-icon.js +8 -0
  94. package/src/lib/types/column.types.d.ts +29 -0
  95. package/src/lib/types/column.types.js +5 -0
  96. package/src/lib/types/data-table-api.d.ts +134 -0
  97. package/src/lib/types/data-table-api.js +2 -0
  98. package/src/lib/types/export.types.d.ts +99 -0
  99. package/src/lib/types/export.types.js +2 -0
  100. package/src/lib/types/index.d.ts +6 -0
  101. package/src/lib/types/index.js +8 -0
  102. package/src/lib/types/slots.types.d.ts +272 -0
  103. package/src/lib/types/slots.types.js +2 -0
  104. package/src/lib/types/table.types.d.ts +63 -0
  105. package/src/lib/types/table.types.js +2 -0
  106. package/src/lib/utils/column-helpers.d.ts +7 -0
  107. package/src/lib/utils/column-helpers.js +43 -0
  108. package/src/lib/utils/debounced-fetch.utils.d.ts +11 -0
  109. package/{lib → src/lib}/utils/debounced-fetch.utils.js +15 -17
  110. package/src/lib/utils/export-utils.d.ts +30 -0
  111. package/src/lib/utils/export-utils.js +152 -0
  112. package/{lib/utils/index.js → src/lib/utils/index.d.ts} +0 -10
  113. package/src/lib/utils/index.js +10 -0
  114. package/src/lib/utils/slot-helpers.d.ts +9 -0
  115. package/src/lib/utils/slot-helpers.js +21 -0
  116. package/src/lib/utils/special-columns.utils.d.ts +6 -0
  117. package/src/lib/utils/special-columns.utils.js +52 -0
  118. package/src/lib/utils/styling-helpers.d.ts +36 -0
  119. package/src/lib/utils/styling-helpers.js +61 -0
  120. package/src/lib/utils/table-helpers.d.ts +9 -0
  121. package/{lib → src/lib}/utils/table-helpers.js +16 -31
  122. package/tsconfig.tsbuildinfo +1 -0
  123. package/LICENSE +0 -21
  124. package/index.d.ts.map +0 -1
  125. package/lib/components/droupdown/menu-dropdown.d.ts.map +0 -1
  126. package/lib/components/droupdown/menu-dropdown.js +0 -47
  127. package/lib/components/export-progress-dialog.d.ts.map +0 -1
  128. package/lib/components/export-progress-dialog.js +0 -30
  129. package/lib/components/filters/filter-value-input.d.ts.map +0 -1
  130. package/lib/components/filters/filter-value-input.js +0 -64
  131. package/lib/components/filters/index.d.ts.map +0 -1
  132. package/lib/components/headers/draggable-header.d.ts.map +0 -1
  133. package/lib/components/headers/index.d.ts.map +0 -1
  134. package/lib/components/headers/table-header.d.ts.map +0 -1
  135. package/lib/components/headers/table-header.js +0 -59
  136. package/lib/components/index.d.ts.map +0 -1
  137. package/lib/components/index.js +0 -18
  138. package/lib/components/pagination/data-table-pagination.d.ts.map +0 -1
  139. package/lib/components/pagination/data-table-pagination.js +0 -24
  140. package/lib/components/pagination/index.d.ts.map +0 -1
  141. package/lib/components/pagination/index.js +0 -4
  142. package/lib/components/rows/data-table-row.d.ts.map +0 -1
  143. package/lib/components/rows/data-table-row.js +0 -42
  144. package/lib/components/rows/empty-data-row.d.ts.map +0 -1
  145. package/lib/components/rows/empty-data-row.js +0 -8
  146. package/lib/components/rows/index.d.ts.map +0 -1
  147. package/lib/components/rows/loading-rows.d.ts.map +0 -1
  148. package/lib/components/rows/loading-rows.js +0 -46
  149. package/lib/components/table/data-table.d.ts.map +0 -1
  150. package/lib/components/table/data-table.js +0 -663
  151. package/lib/components/table/data-table.types.d.ts.map +0 -1
  152. package/lib/components/table/data-table.types.js +0 -6
  153. package/lib/components/table/index.d.ts.map +0 -1
  154. package/lib/components/toolbar/bulk-actions-toolbar.d.ts.map +0 -1
  155. package/lib/components/toolbar/bulk-actions-toolbar.js +0 -31
  156. package/lib/components/toolbar/column-custom-filter-control.d.ts.map +0 -1
  157. package/lib/components/toolbar/column-custom-filter-control.js +0 -149
  158. package/lib/components/toolbar/column-custum-filter-control.d.ts.map +0 -1
  159. package/lib/components/toolbar/column-custum-filter-control.js +0 -150
  160. package/lib/components/toolbar/column-pinning-control.d.ts.map +0 -1
  161. package/lib/components/toolbar/column-pinning-control.js +0 -103
  162. package/lib/components/toolbar/column-reset-control.d.ts.map +0 -1
  163. package/lib/components/toolbar/column-reset-control.js +0 -13
  164. package/lib/components/toolbar/column-visibility-control.d.ts.map +0 -1
  165. package/lib/components/toolbar/column-visibility-control.js +0 -27
  166. package/lib/components/toolbar/data-table-toolbar.d.ts.map +0 -1
  167. package/lib/components/toolbar/data-table-toolbar.js +0 -23
  168. package/lib/components/toolbar/index.d.ts.map +0 -1
  169. package/lib/components/toolbar/table-export-control.d.ts.map +0 -1
  170. package/lib/components/toolbar/table-export-control.js +0 -94
  171. package/lib/components/toolbar/table-search-control.d.ts.map +0 -1
  172. package/lib/components/toolbar/table-search-control.js +0 -61
  173. package/lib/components/toolbar/table-size-control.d.ts.map +0 -1
  174. package/lib/components/toolbar/table-size-control.js +0 -33
  175. package/lib/contexts/data-table-context.d.ts.map +0 -1
  176. package/lib/examples/advanced-features-example.d.ts.map +0 -1
  177. package/lib/examples/advanced-features-example.js +0 -282
  178. package/lib/examples/basic-example.d.ts.map +0 -1
  179. package/lib/examples/basic-example.js +0 -323
  180. package/lib/examples/bulk-actions-test.d.ts.map +0 -1
  181. package/lib/examples/bulk-actions-test.js +0 -47
  182. package/lib/examples/crud-api-example.d.ts.map +0 -1
  183. package/lib/examples/crud-api-example.js +0 -321
  184. package/lib/examples/custom-column-filter-example.d.ts.map +0 -1
  185. package/lib/examples/custom-selection-example.d.ts.map +0 -1
  186. package/lib/examples/custom-selection-example.js +0 -184
  187. package/lib/examples/export-callbacks-example.d.ts.map +0 -1
  188. package/lib/examples/export-callbacks-example.js +0 -155
  189. package/lib/examples/improved-export-example.d.ts.map +0 -1
  190. package/lib/examples/improved-export-example.js +0 -153
  191. package/lib/examples/improved-server-selection-example.d.ts.map +0 -1
  192. package/lib/examples/improved-server-selection-example.js +0 -118
  193. package/lib/examples/index.d.ts.map +0 -1
  194. package/lib/examples/selection-test-example.d.ts.map +0 -1
  195. package/lib/examples/selection-test-example.js +0 -111
  196. package/lib/examples/simple-local-example.d.ts.map +0 -1
  197. package/lib/examples/simple-server-selection-example.d.ts.map +0 -1
  198. package/lib/examples/simple-server-selection-example.js +0 -178
  199. package/lib/examples/virtualized-example.d.ts.map +0 -1
  200. package/lib/examples/virtualized-example.js +0 -119
  201. package/lib/features/custom-column-filter.feature.d.ts.map +0 -1
  202. package/lib/features/custom-selection.feature.d.ts.map +0 -1
  203. package/lib/features/index.d.ts.map +0 -1
  204. package/lib/features/index.js +0 -9
  205. package/lib/hooks/index.d.ts.map +0 -1
  206. package/lib/hooks/index.js +0 -6
  207. package/lib/hooks/use-data-table-api.d.ts.map +0 -1
  208. package/lib/hooks/use-table-state.d.ts.map +0 -1
  209. package/lib/hooks/use-table-state.js +0 -74
  210. package/lib/icons/add-icon.d.ts.map +0 -1
  211. package/lib/icons/add-icon.js +0 -5
  212. package/lib/icons/csv-icon.d.ts.map +0 -1
  213. package/lib/icons/csv-icon.js +0 -5
  214. package/lib/icons/delete-icon.d.ts.map +0 -1
  215. package/lib/icons/delete-icon.js +0 -5
  216. package/lib/icons/excel-icon.d.ts.map +0 -1
  217. package/lib/icons/excel-icon.js +0 -5
  218. package/lib/icons/index.d.ts.map +0 -1
  219. package/lib/icons/unpin-icon.d.ts.map +0 -1
  220. package/lib/icons/unpin-icon.js +0 -5
  221. package/lib/icons/view-comfortable-icon.d.ts.map +0 -1
  222. package/lib/icons/view-comfortable-icon.js +0 -5
  223. package/lib/icons/view-compact-icon.d.ts.map +0 -1
  224. package/lib/icons/view-compact-icon.js +0 -5
  225. package/lib/types/column.types.d.ts.map +0 -1
  226. package/lib/types/column.types.js +0 -2
  227. package/lib/types/data-table-api.d.ts.map +0 -1
  228. package/lib/types/data-table-api.js +0 -1
  229. package/lib/types/export.types.d.ts.map +0 -1
  230. package/lib/types/export.types.js +0 -5
  231. package/lib/types/hooks.types.d.ts.map +0 -1
  232. package/lib/types/hooks.types.js +0 -1
  233. package/lib/types/index.d.ts.map +0 -1
  234. package/lib/types/index.js +0 -14
  235. package/lib/types/slots.types.d.ts.map +0 -1
  236. package/lib/types/slots.types.js +0 -1
  237. package/lib/types/table.types.d.ts.map +0 -1
  238. package/lib/types/table.types.js +0 -1
  239. package/lib/utils/column-helpers.d.ts.map +0 -1
  240. package/lib/utils/column-helpers.js +0 -46
  241. package/lib/utils/debounced-fetch.utils.d.ts.map +0 -1
  242. package/lib/utils/export-utils.d.ts.map +0 -1
  243. package/lib/utils/export-utils.js +0 -181
  244. package/lib/utils/index.d.ts.map +0 -1
  245. package/lib/utils/selection-helpers.d.ts.map +0 -1
  246. package/lib/utils/selection-helpers.js +0 -162
  247. package/lib/utils/slot-helpers.d.ts.map +0 -1
  248. package/lib/utils/slot-helpers.js +0 -27
  249. package/lib/utils/special-columns.utils.d.ts.map +0 -1
  250. package/lib/utils/special-columns.utils.js +0 -77
  251. package/lib/utils/styling-helpers.d.ts.map +0 -1
  252. package/lib/utils/styling-helpers.js +0 -97
  253. package/lib/utils/table-helpers.d.ts.map +0 -1
  254. package/lib/utils/value-helpers.d.ts.map +0 -1
  255. package/lib/utils/value-helpers.js +0 -48
  256. package/tsconfig.lib.tsbuildinfo +0 -1
  257. /package/{lib/examples/index.js → src/lib/examples/index.d.ts} +0 -0
  258. /package/{lib/icons/index.js → src/lib/icons/index.d.ts} +0 -0
@@ -0,0 +1,63 @@
1
+ import { SortingState } from '@tanstack/react-table';
2
+ import { ColumnFilterRule, SelectionState } from '../features';
3
+ export type TableSize = 'small' | 'medium';
4
+ export interface TableState {
5
+ customColumnsFilter: CustomColumnFilterState;
6
+ selectionState?: SelectionState;
7
+ globalFilter?: string;
8
+ sorting?: SortingState;
9
+ pagination?: {
10
+ pageIndex: number;
11
+ pageSize: number;
12
+ };
13
+ columnOrder?: string[];
14
+ columnPinning?: {
15
+ left?: string[];
16
+ right?: string[];
17
+ };
18
+ columnVisibility?: Record<string, boolean>;
19
+ columnSizing?: Record<string, number>;
20
+ }
21
+ export interface TableFilters {
22
+ globalFilter: string;
23
+ customColumnsFilter: CustomColumnFilterState;
24
+ sorting: SortingState;
25
+ pagination: {
26
+ pageIndex: number;
27
+ pageSize: number;
28
+ };
29
+ columnOrder: string[];
30
+ columnPinning: {
31
+ left?: string[];
32
+ right?: string[];
33
+ };
34
+ }
35
+ export interface TableFiltersForFetch {
36
+ search?: string;
37
+ page?: number;
38
+ pageSize?: number;
39
+ sorting?: SortingState;
40
+ customColumnsFilter?: CustomColumnFilterState;
41
+ }
42
+ export interface CustomColumnFilterState {
43
+ filters: ColumnFilterRule[];
44
+ logic: 'AND' | 'OR';
45
+ pendingFilters: ColumnFilterRule[];
46
+ pendingLogic: 'AND' | 'OR';
47
+ }
48
+ export interface TablePerformanceMetrics {
49
+ renderTime: number;
50
+ dataProcessingTime: number;
51
+ totalRows: number;
52
+ visibleRows: number;
53
+ memoryUsage?: number;
54
+ }
55
+ export interface TableMetrics {
56
+ totalRows: number;
57
+ visibleRows: number;
58
+ totalColumns?: number;
59
+ visibleColumns?: number;
60
+ pinnedColumns?: number;
61
+ renderTime: number;
62
+ lastUpdated?: Date;
63
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { DataTableColumn } from '../types';
2
+ import { Column } from "@tanstack/react-table";
3
+ export type ColumnType = 'text' | 'number' | 'date' | 'boolean' | 'select' | 'actions';
4
+ export declare function getColumnType(column: Column<any, unknown>): ColumnType;
5
+ export declare function getCustomFilterComponent(column: Column<any, unknown>): any;
6
+ export declare function getColumnOptions(column: Column<any, unknown>): any[];
7
+ export declare function isColumnFilterable(column: DataTableColumn<any, unknown>): boolean;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getColumnType = getColumnType;
4
+ exports.getCustomFilterComponent = getCustomFilterComponent;
5
+ exports.getColumnOptions = getColumnOptions;
6
+ exports.isColumnFilterable = isColumnFilterable;
7
+ function getColumnType(column) {
8
+ var _a;
9
+ if ((_a = column === null || column === void 0 ? void 0 : column.columnDef) === null || _a === void 0 ? void 0 : _a.type) {
10
+ return column.columnDef.type;
11
+ }
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 === null || column === void 0 ? void 0 : column.columnDef.options) || [];
22
+ }
23
+ const columnType = getColumnType(column);
24
+ if (columnType === 'boolean') {
25
+ return [
26
+ {
27
+ value: true,
28
+ label: 'Yes',
29
+ },
30
+ {
31
+ value: false,
32
+ label: 'No',
33
+ },
34
+ ];
35
+ }
36
+ return [];
37
+ }
38
+ function isColumnFilterable(column) {
39
+ if ((column === null || column === void 0 ? void 0 : column.filterable) !== undefined) {
40
+ return column === null || column === void 0 ? void 0 : column.filterable;
41
+ }
42
+ return true;
43
+ }
@@ -0,0 +1,11 @@
1
+ import { TableFiltersForFetch } from '../types';
2
+ export declare function useDebouncedFetch<T extends Record<string, any>>(onFetchData: ((filters: TableFiltersForFetch) => Promise<{
3
+ data: T[];
4
+ total: number;
5
+ }>) | undefined, delay?: number): {
6
+ debouncedFetch: (filters: TableFiltersForFetch) => Promise<{
7
+ data: T[];
8
+ total: number;
9
+ }>;
10
+ isLoading: boolean;
11
+ };
@@ -1,20 +1,21 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
- export function useDebouncedFetch(onFetchData, delay = 300) {
3
- const [isLoading, setIsLoading] = useState(false);
4
- const debounceTimer = useRef(null);
5
- const lastFetchParams = useRef('');
6
- const debouncedFetch = useCallback(async (filters) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDebouncedFetch = useDebouncedFetch;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = require("react");
6
+ function useDebouncedFetch(onFetchData, delay = 300) {
7
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
8
+ const debounceTimer = (0, react_1.useRef)(null);
9
+ const lastFetchParams = (0, react_1.useRef)('');
10
+ const debouncedFetch = (0, react_1.useCallback)((filters) => tslib_1.__awaiter(this, void 0, void 0, function* () {
7
11
  if (!onFetchData)
8
12
  return null;
9
- // Create a unique key for the current fetch parameters
10
13
  const currentParams = JSON.stringify(filters);
11
- // Clear existing timer
12
14
  if (debounceTimer.current) {
13
15
  clearTimeout(debounceTimer.current);
14
16
  }
15
17
  return new Promise((resolve) => {
16
- debounceTimer.current = setTimeout(async () => {
17
- // Don't fetch if parameters haven't changed
18
+ debounceTimer.current = setTimeout(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
18
19
  if (lastFetchParams.current === currentParams) {
19
20
  resolve(null);
20
21
  return;
@@ -22,22 +23,19 @@ export function useDebouncedFetch(onFetchData, delay = 300) {
22
23
  lastFetchParams.current = currentParams;
23
24
  setIsLoading(true);
24
25
  try {
25
- const result = await onFetchData(filters);
26
+ const result = yield onFetchData(filters);
26
27
  resolve(result);
27
28
  }
28
29
  catch (error) {
29
- // Handle fetch error silently or could be passed to onError callback
30
30
  resolve(null);
31
31
  }
32
32
  finally {
33
33
  setIsLoading(false);
34
34
  }
35
- }, delay);
35
+ }), delay);
36
36
  });
37
- }, [onFetchData, delay]);
38
- // Cleanup timer on unmount
39
- useEffect(() => {
40
- // Fetch data when dependencies change
37
+ }), [onFetchData, delay]);
38
+ (0, react_1.useEffect)(() => {
41
39
  return () => {
42
40
  if (debounceTimer.current) {
43
41
  clearTimeout(debounceTimer.current);
@@ -0,0 +1,30 @@
1
+ import { Table } from '@tanstack/react-table';
2
+ import { SelectionState } from '../features/custom-selection.feature';
3
+ export interface ExportOptions {
4
+ format: 'csv' | 'excel';
5
+ filename: string;
6
+ onProgress?: (progress: {
7
+ processedRows: number;
8
+ totalRows: number;
9
+ percentage: number;
10
+ }) => void;
11
+ onComplete?: (result: {
12
+ success: boolean;
13
+ filename: string;
14
+ totalRows: number;
15
+ }) => void;
16
+ onError?: (error: {
17
+ message: string;
18
+ code: string;
19
+ }) => void;
20
+ }
21
+ export interface ServerExportOptions extends ExportOptions {
22
+ fetchData: (filters?: any, selection?: SelectionState) => Promise<{
23
+ data: any[];
24
+ total: number;
25
+ }>;
26
+ currentFilters?: any;
27
+ selection?: SelectionState;
28
+ }
29
+ export declare function exportClientData<TData>(table: Table<TData>, options: ExportOptions): Promise<void>;
30
+ export declare function exportServerData<TData>(table: Table<TData>, options: ServerExportOptions): Promise<void>;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportClientData = exportClientData;
4
+ exports.exportServerData = exportServerData;
5
+ const tslib_1 = require("tslib");
6
+ const XLSX = tslib_1.__importStar(require("xlsx"));
7
+ function exportClientData(table, options) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
+ const { format, filename, onProgress, onComplete, onError } = options;
10
+ try {
11
+ const selectedRows = table.getSelectedRows ? table.getSelectedRows() : [];
12
+ const hasSelectedRows = selectedRows.length > 0;
13
+ const rowsToExport = hasSelectedRows ? selectedRows : table.getFilteredRowModel().rows;
14
+ const exportData = rowsToExport.map((row, index) => {
15
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
16
+ processedRows: index + 1,
17
+ totalRows: rowsToExport.length,
18
+ percentage: Math.round(((index + 1) / rowsToExport.length) * 100),
19
+ });
20
+ const rowData = {};
21
+ row.getVisibleCells().forEach(cell => {
22
+ const header = typeof cell.column.columnDef.header === 'string'
23
+ ? cell.column.columnDef.header
24
+ : cell.column.id;
25
+ rowData[header] = cell.getValue() || '';
26
+ });
27
+ return rowData;
28
+ });
29
+ yield exportToFile(exportData, format, filename);
30
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete({
31
+ success: true,
32
+ filename: `${filename}.${format === 'excel' ? 'xlsx' : 'csv'}`,
33
+ totalRows: exportData.length,
34
+ });
35
+ }
36
+ catch (error) {
37
+ console.error('Client export failed:', error);
38
+ onError === null || onError === void 0 ? void 0 : onError({
39
+ message: error instanceof Error ? error.message : 'Export failed',
40
+ code: 'CLIENT_EXPORT_ERROR',
41
+ });
42
+ }
43
+ });
44
+ }
45
+ function exportServerData(table, options) {
46
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
47
+ const { format, filename, fetchData, currentFilters, selection, onProgress, onComplete, onError } = options;
48
+ try {
49
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
50
+ processedRows: 0,
51
+ totalRows: 0,
52
+ percentage: 0,
53
+ });
54
+ const { data } = yield fetchData(currentFilters, selection);
55
+ if (!data || !Array.isArray(data)) {
56
+ throw new Error('Invalid data received from server');
57
+ }
58
+ const visibleColumns = table.getVisibleLeafColumns().filter(col => col.getIsVisible());
59
+ const exportData = data.map((rowData, index) => {
60
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
61
+ processedRows: index + 1,
62
+ totalRows: data.length,
63
+ percentage: Math.round(((index + 1) / data.length) * 100),
64
+ });
65
+ const exportRow = {};
66
+ visibleColumns.forEach(column => {
67
+ const columnId = column.id;
68
+ const header = typeof column.columnDef.header === 'string'
69
+ ? column.columnDef.header
70
+ : columnId;
71
+ let value = rowData[columnId];
72
+ const columnDef = column.columnDef;
73
+ if (columnDef.accessorFn && typeof columnDef.accessorFn === 'function') {
74
+ value = columnDef.accessorFn(rowData);
75
+ }
76
+ if (value === null || value === undefined) {
77
+ value = '';
78
+ }
79
+ else if (typeof value === 'object') {
80
+ value = JSON.stringify(value);
81
+ }
82
+ else {
83
+ value = String(value);
84
+ }
85
+ exportRow[header] = value;
86
+ });
87
+ return exportRow;
88
+ });
89
+ yield exportToFile(exportData, format, filename);
90
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete({
91
+ success: true,
92
+ filename: `${filename}.${format === 'excel' ? 'xlsx' : 'csv'}`,
93
+ totalRows: exportData.length,
94
+ });
95
+ }
96
+ catch (error) {
97
+ console.error('Server export failed:', error);
98
+ onError === null || onError === void 0 ? void 0 : onError({
99
+ message: error instanceof Error ? error.message : 'Export failed',
100
+ code: 'SERVER_EXPORT_ERROR',
101
+ });
102
+ }
103
+ });
104
+ }
105
+ function exportToFile(data, format, filename) {
106
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
107
+ if (data.length === 0) {
108
+ throw new Error('No data to export');
109
+ }
110
+ if (format === 'csv') {
111
+ const csv = convertToCSV(data);
112
+ downloadFile(csv, `${filename}.csv`, 'text/csv');
113
+ }
114
+ else {
115
+ const workbook = XLSX.utils.book_new();
116
+ const worksheet = XLSX.utils.json_to_sheet(data);
117
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');
118
+ const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
119
+ const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
120
+ downloadFile(blob, `${filename}.xlsx`, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
121
+ }
122
+ });
123
+ }
124
+ function convertToCSV(data) {
125
+ if (data.length === 0)
126
+ return '';
127
+ const headers = Object.keys(data[0]);
128
+ const csvRows = [headers.join(',')];
129
+ for (const row of data) {
130
+ const values = headers.map(header => {
131
+ const value = row[header] || '';
132
+ if (typeof value === 'string' && (value.includes(',') || value.includes('"') || value.includes('\n'))) {
133
+ return `"${value.replace(/"/g, '""')}"`;
134
+ }
135
+ return value;
136
+ });
137
+ csvRows.push(values.join(','));
138
+ }
139
+ return csvRows.join('\n');
140
+ }
141
+ function downloadFile(content, filename, mimeType) {
142
+ const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType });
143
+ const url = URL.createObjectURL(blob);
144
+ const link = document.createElement('a');
145
+ link.href = url;
146
+ link.download = filename;
147
+ link.style.display = 'none';
148
+ document.body.appendChild(link);
149
+ link.click();
150
+ document.body.removeChild(link);
151
+ URL.revokeObjectURL(url);
152
+ }
@@ -1,17 +1,7 @@
1
- /**
2
- * Utility functions for DataTable components
3
- */
4
- // Styling utilities
5
1
  export * from './styling-helpers';
6
- // Table utilities
7
2
  export * from './table-helpers';
8
- // Column utilities
9
3
  export * from './column-helpers';
10
- // Export utilities
11
4
  export * from './export-utils';
12
- // Special columns utilities
13
5
  export * from './special-columns.utils';
14
- // Debounced fetch utilities
15
6
  export * from './debounced-fetch.utils';
16
- // Slot helper utilities
17
7
  export * from './slot-helpers';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./styling-helpers"), exports);
5
+ tslib_1.__exportStar(require("./table-helpers"), exports);
6
+ tslib_1.__exportStar(require("./column-helpers"), exports);
7
+ tslib_1.__exportStar(require("./export-utils"), exports);
8
+ tslib_1.__exportStar(require("./special-columns.utils"), exports);
9
+ tslib_1.__exportStar(require("./debounced-fetch.utils"), exports);
10
+ tslib_1.__exportStar(require("./slot-helpers"), exports);
@@ -0,0 +1,9 @@
1
+ import { ComponentType } from 'react';
2
+ import { DataTableSlots } from '../types/slots.types';
3
+ export declare function getSlotComponent<T, K extends keyof DataTableSlots<T>>(slots: Partial<DataTableSlots<T>> | undefined, slotName: K, fallback: ComponentType<any>): ComponentType<any>;
4
+ export declare function renderSlot(slotComponent: ComponentType<any>, defaultProps: any, slotProps?: any): import("react/jsx-runtime").JSX.Element;
5
+ export declare function createSlottableComponent<T, K extends keyof DataTableSlots<T>>(slotName: K, defaultComponent: ComponentType<any>): (props: {
6
+ slots?: Partial<DataTableSlots<T>>;
7
+ slotProps?: any;
8
+ componentProps: any;
9
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSlotComponent = getSlotComponent;
4
+ exports.renderSlot = renderSlot;
5
+ exports.createSlottableComponent = createSlottableComponent;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ function getSlotComponent(slots, slotName, fallback) {
8
+ return (slots === null || slots === void 0 ? void 0 : slots[slotName]) || fallback;
9
+ }
10
+ function renderSlot(slotComponent, defaultProps, slotProps) {
11
+ const mergedProps = Object.assign(Object.assign({}, defaultProps), slotProps);
12
+ const Component = slotComponent;
13
+ return (0, jsx_runtime_1.jsx)(Component, Object.assign({}, mergedProps));
14
+ }
15
+ function createSlottableComponent(slotName, defaultComponent) {
16
+ return function SlottableComponent(props) {
17
+ var _a;
18
+ const SlotComponent = getSlotComponent(props.slots, slotName, defaultComponent);
19
+ return renderSlot(SlotComponent, props.componentProps, (_a = props.slotProps) === null || _a === void 0 ? void 0 : _a[slotName]);
20
+ };
21
+ }
@@ -0,0 +1,6 @@
1
+ import { DataTableColumn } from '../types';
2
+ export interface SelectionColumnConfig<T> {
3
+ multiSelect?: boolean;
4
+ }
5
+ export declare const createSelectionColumn: <T>(config: Partial<DataTableColumn<T>> & SelectionColumnConfig<T>) => DataTableColumn<T>;
6
+ export declare const createExpandingColumn: <T>(config: Partial<DataTableColumn<T>>) => DataTableColumn<T>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExpandingColumn = exports.createSelectionColumn = void 0;
4
+ const icons_material_1 = require("@mui/icons-material");
5
+ const material_1 = require("@mui/material");
6
+ const react_1 = require("react");
7
+ const types_1 = require("../types");
8
+ const createSelectionColumn = (config) => (Object.assign({ id: types_1.DEFAULT_SELECTION_COLUMN_NAME, size: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: ({ table }) => {
9
+ var _a, _b;
10
+ if (!config.multiSelect)
11
+ return null;
12
+ const allSelected = ((_a = table.getIsAllRowsSelected) === null || _a === void 0 ? void 0 : _a.call(table)) || false;
13
+ const someSelected = ((_b = table.getIsSomeRowsSelected) === null || _b === void 0 ? void 0 : _b.call(table)) || false;
14
+ return (0, react_1.createElement)(material_1.Checkbox, {
15
+ checked: allSelected,
16
+ indeterminate: someSelected && !allSelected,
17
+ disabled: false,
18
+ onChange: () => {
19
+ var _a;
20
+ (_a = table.toggleAllRowsSelected) === null || _a === void 0 ? void 0 : _a.call(table);
21
+ },
22
+ size: 'small',
23
+ sx: { p: 0 },
24
+ });
25
+ }, cell: ({ row, table }) => {
26
+ var _a, _b, _c;
27
+ const rowId = row.id;
28
+ const checked = ((_a = table.getIsRowSelected) === null || _a === void 0 ? void 0 : _a.call(table, rowId)) || false;
29
+ const canSelect = (_c = (_b = table.canSelectRow) === null || _b === void 0 ? void 0 : _b.call(table, rowId)) !== null && _c !== void 0 ? _c : true;
30
+ return (0, react_1.createElement)(material_1.Checkbox, {
31
+ checked,
32
+ disabled: !canSelect,
33
+ onChange: () => {
34
+ var _a;
35
+ if (canSelect) {
36
+ (_a = table.toggleRowSelected) === null || _a === void 0 ? void 0 : _a.call(table, rowId);
37
+ }
38
+ },
39
+ size: 'small',
40
+ sx: {
41
+ p: 0,
42
+ opacity: canSelect ? 1 : 0.5
43
+ },
44
+ });
45
+ } }, config));
46
+ exports.createSelectionColumn = createSelectionColumn;
47
+ const createExpandingColumn = (config) => (Object.assign({ id: types_1.DEFAULT_EXPANDING_COLUMN_NAME, size: 60, align: 'center', filterable: false, enableResizing: false, enableSorting: false, enableHiding: false, enablePinning: false, hideInExport: true, header: '', cell: ({ row }) => (0, react_1.createElement)(material_1.IconButton, {
48
+ onClick: row.getToggleExpandedHandler(),
49
+ size: 'small',
50
+ sx: { p: 0 },
51
+ }, row.getIsExpanded() ? (0, react_1.createElement)(icons_material_1.KeyboardArrowUpOutlined) : (0, react_1.createElement)(icons_material_1.KeyboardArrowDownOutlined)) }, config));
52
+ exports.createExpandingColumn = createExpandingColumn;
@@ -0,0 +1,36 @@
1
+ import type { DataTableColumn, PinnedColumnStyleOptions } from '../types';
2
+ export declare function getPinnedColumnStyle(options: PinnedColumnStyleOptions): {
3
+ boxShadow: string;
4
+ backgroundColor: string;
5
+ left?: number;
6
+ right?: number;
7
+ zIndex?: number;
8
+ width: string | number;
9
+ maxWidth: string | number;
10
+ overflow: string;
11
+ whiteSpace: string;
12
+ };
13
+ export declare const tableCellStyles: {
14
+ readonly sticky: {
15
+ readonly position: "sticky";
16
+ readonly zIndex: 10;
17
+ readonly backgroundColor: "background.paper";
18
+ };
19
+ readonly pinned: {
20
+ readonly borderRight: "1px solid";
21
+ readonly borderColor: "divider";
22
+ };
23
+ };
24
+ export declare const tableRowStyles: {
25
+ readonly hover: {
26
+ readonly '&:hover': {
27
+ readonly backgroundColor: "action.hover";
28
+ };
29
+ };
30
+ readonly striped: {
31
+ readonly '&:nth-of-type(odd)': {
32
+ readonly backgroundColor: "action.selected";
33
+ };
34
+ };
35
+ };
36
+ export declare function getColumnAlignment(column?: DataTableColumn<any>): 'left' | 'center' | 'right';
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tableRowStyles = exports.tableCellStyles = void 0;
4
+ exports.getPinnedColumnStyle = getPinnedColumnStyle;
5
+ exports.getColumnAlignment = getColumnAlignment;
6
+ const getBoxShadow = (isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn) => {
7
+ if (isPinned === 'left' && isLastLeftPinnedColumn) {
8
+ return '1px 0 3px rgba(0, 0, 0, 0.12)';
9
+ }
10
+ if (isPinned === 'right' && isFirstRightPinnedColumn) {
11
+ return '-1px 0 3px rgba(0, 0, 0, 0.12)';
12
+ }
13
+ return 'none';
14
+ };
15
+ function getPinnedColumnStyle(options) {
16
+ const { width = 'auto', isPinned, pinnedPosition, pinnedRightPosition, isLastLeftPinnedColumn, isFirstRightPinnedColumn, zIndex = 1, disableStickyHeader = false, } = options;
17
+ const needsPinnedPositioning = isPinned;
18
+ const shouldBeSticky = isPinned;
19
+ let positionStyle = {};
20
+ if (shouldBeSticky) {
21
+ positionStyle = { position: 'sticky' };
22
+ }
23
+ else if (!disableStickyHeader) {
24
+ positionStyle = { position: 'relative' };
25
+ }
26
+ return Object.assign(Object.assign(Object.assign(Object.assign({ width, maxWidth: width, overflow: 'hidden', whiteSpace: 'nowrap' }, positionStyle), (needsPinnedPositioning ? {
27
+ left: isPinned === 'left' ? pinnedPosition : undefined,
28
+ right: isPinned === 'right' ? pinnedRightPosition : undefined,
29
+ zIndex,
30
+ } : {})), (isPinned && {
31
+ backgroundColor: 'background.paper',
32
+ })), { boxShadow: getBoxShadow(isPinned, !!isLastLeftPinnedColumn, !!isFirstRightPinnedColumn) });
33
+ }
34
+ exports.tableCellStyles = {
35
+ sticky: {
36
+ position: 'sticky',
37
+ zIndex: 10,
38
+ backgroundColor: 'background.paper',
39
+ },
40
+ pinned: {
41
+ borderRight: '1px solid',
42
+ borderColor: 'divider',
43
+ },
44
+ };
45
+ exports.tableRowStyles = {
46
+ hover: {
47
+ '&:hover': {
48
+ backgroundColor: 'action.hover',
49
+ },
50
+ },
51
+ striped: {
52
+ '&:nth-of-type(odd)': {
53
+ backgroundColor: 'action.selected',
54
+ },
55
+ },
56
+ };
57
+ function getColumnAlignment(column) {
58
+ if (!column)
59
+ return 'left';
60
+ return column.align || 'left';
61
+ }
@@ -0,0 +1,9 @@
1
+ import type { TableMetrics } from '../types';
2
+ export type DataTableSize = 'small' | 'medium';
3
+ export declare function calculateSkeletonRows(containerHeight: number, rowHeight: number, maxRows?: number): number;
4
+ export declare function generateRowId<T>(row: T, index: number, idKey?: keyof T): string;
5
+ export declare function calculatePinnedColumnsWidth(columns: any[], side: 'left' | 'right'): number;
6
+ export declare function shouldUseFixedLayout(fitToScreen: boolean, enableColumnResizing: boolean, totalColumns: number): boolean;
7
+ export declare function formatCellValue(value: any, type: string): string;
8
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
9
+ export declare function calculateTableMetrics(totalRows: number, visibleRows: number, columns: any[], renderStartTime: number): TableMetrics;