@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.
- package/README.md +22 -0
- package/dist/components/data-table.d.ts +4 -0
- package/dist/components/data-table.d.ts.map +1 -0
- package/dist/components/data-table.js +24 -0
- package/dist/components/filters/filter-value-input.d.ts +10 -0
- package/dist/components/filters/filter-value-input.d.ts.map +1 -0
- package/dist/components/filters/filter-value-input.js +39 -0
- package/dist/components/filters/index.d.ts +3 -0
- package/dist/components/filters/index.d.ts.map +1 -0
- package/dist/components/filters/index.js +18 -0
- package/dist/components/filters/operators.d.ts +93 -0
- package/dist/components/filters/operators.d.ts.map +1 -0
- package/dist/components/filters/operators.js +42 -0
- package/dist/components/grid/grid-view.d.ts +8 -0
- package/dist/components/grid/grid-view.d.ts.map +1 -0
- package/dist/components/grid/grid-view.js +151 -0
- package/dist/components/grid/styled.d.ts +17 -0
- package/dist/components/grid/styled.d.ts.map +1 -0
- package/dist/components/grid/styled.js +68 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +23 -0
- package/dist/components/toolbar/bulk-actions-toolbar.d.ts +10 -0
- package/dist/components/toolbar/bulk-actions-toolbar.d.ts.map +1 -0
- package/dist/components/toolbar/bulk-actions-toolbar.js +20 -0
- package/dist/components/toolbar/column-filter-control.d.ts +8 -0
- package/dist/components/toolbar/column-filter-control.d.ts.map +1 -0
- package/dist/components/toolbar/column-filter-control.js +93 -0
- package/dist/components/toolbar/data-table-toolbar.d.ts +16 -0
- package/dist/components/toolbar/data-table-toolbar.d.ts.map +1 -0
- package/dist/components/toolbar/data-table-toolbar.js +44 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +17 -0
- package/dist/core/use-data-table.d.ts +83 -0
- package/dist/core/use-data-table.d.ts.map +1 -0
- package/dist/core/use-data-table.js +1081 -0
- package/dist/features/column-filter.feature.d.ts +48 -0
- package/dist/features/column-filter.feature.d.ts.map +1 -0
- package/dist/features/column-filter.feature.js +270 -0
- package/dist/features/index.d.ts +3 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +18 -0
- package/dist/features/selection.feature.d.ts +49 -0
- package/dist/features/selection.feature.d.ts.map +1 -0
- package/dist/features/selection.feature.js +159 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/theme/create-data-table-theme.d.ts +16 -0
- package/dist/theme/create-data-table-theme.d.ts.map +1 -0
- package/dist/theme/create-data-table-theme.js +18 -0
- package/dist/theme/index.d.ts +7 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +22 -0
- package/dist/theme/mui-augmentation.d.ts +40 -0
- package/dist/theme/mui-augmentation.d.ts.map +1 -0
- package/dist/theme/mui-augmentation.js +2 -0
- package/dist/theme/palette.d.ts +24 -0
- package/dist/theme/palette.d.ts.map +1 -0
- package/dist/theme/palette.js +23 -0
- package/dist/theme/tokens.d.ts +43 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +40 -0
- package/dist/theme/use-data-table-tokens.d.ts +4 -0
- package/dist/theme/use-data-table-tokens.d.ts.map +1 -0
- package/dist/theme/use-data-table-tokens.js +42 -0
- package/dist/types/api.types.d.ts +156 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +2 -0
- package/dist/types/column.types.d.ts +60 -0
- package/dist/types/column.types.d.ts.map +1 -0
- package/dist/types/column.types.js +7 -0
- package/dist/types/data-table.types.d.ts +161 -0
- package/dist/types/data-table.types.d.ts.map +1 -0
- package/dist/types/data-table.types.js +2 -0
- package/dist/types/export.types.d.ts +32 -0
- package/dist/types/export.types.d.ts.map +1 -0
- package/dist/types/export.types.js +2 -0
- package/dist/types/filter.types.d.ts +15 -0
- package/dist/types/filter.types.d.ts.map +1 -0
- package/dist/types/filter.types.js +2 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +25 -0
- package/dist/types/logging.types.d.ts +23 -0
- package/dist/types/logging.types.d.ts.map +1 -0
- package/dist/types/logging.types.js +2 -0
- package/dist/types/selection.types.d.ts +7 -0
- package/dist/types/selection.types.d.ts.map +1 -0
- package/dist/types/selection.types.js +2 -0
- package/dist/types/slots.types.d.ts +41 -0
- package/dist/types/slots.types.d.ts.map +1 -0
- package/dist/types/slots.types.js +2 -0
- package/dist/types/state.types.d.ts +46 -0
- package/dist/types/state.types.d.ts.map +1 -0
- package/dist/types/state.types.js +2 -0
- package/dist/utils/column-helpers.d.ts +9 -0
- package/dist/utils/column-helpers.d.ts.map +1 -0
- package/dist/utils/column-helpers.js +46 -0
- package/dist/utils/debounced-fetch.utils.d.ts +22 -0
- package/dist/utils/debounced-fetch.utils.d.ts.map +1 -0
- package/dist/utils/debounced-fetch.utils.js +85 -0
- package/dist/utils/export-utils.d.ts +49 -0
- package/dist/utils/export-utils.d.ts.map +1 -0
- package/dist/utils/export-utils.js +372 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +22 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +107 -0
- package/dist/utils/special-columns.d.ts +9 -0
- package/dist/utils/special-columns.d.ts.map +1 -0
- package/dist/utils/special-columns.js +80 -0
- package/dist/utils/table-helpers.d.ts +16 -0
- package/dist/utils/table-helpers.d.ts.map +1 -0
- package/dist/utils/table-helpers.js +50 -0
- 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,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,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,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 @@
|
|
|
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,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,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,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
|
+
}
|