@dmsi/wedgekit-react 0.0.214 → 0.0.216
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-UKSJPFN2.js → chunk-3M23BFB4.js} +3 -3
- package/dist/{chunk-2WRRRPEB.js → chunk-BHFIS4ZV.js} +1 -1
- package/dist/{chunk-JITZWSPR.js → chunk-NA3ODQCN.js} +2 -2
- package/dist/{chunk-33W2KSCB.js → chunk-OC6RTDZT.js} +7 -6
- package/dist/{chunk-ERW3AMED.js → chunk-QHHNFGEX.js} +1 -1
- package/dist/{chunk-CZ55LUFC.js → chunk-SC24WU65.js} +8 -8
- package/dist/{chunk-NIHZMIOL.js → chunk-VP36B2MM.js} +1 -1
- package/dist/{chunk-E6Y7ZHQX.js → chunk-ZU2K7BD3.js} +36 -22
- package/dist/components/DataGridCell.js +9 -9
- package/dist/components/DateInput.js +7 -7
- package/dist/components/DateRangeInput.js +7 -7
- package/dist/components/FilterGroup.js +5 -5
- package/dist/components/Input.js +2 -2
- package/dist/components/Menu.js +3 -3
- package/dist/components/MenuOption.js +3 -3
- package/dist/components/MobileDataGrid.js +3 -3
- package/dist/components/Modal.js +5 -5
- package/dist/components/ModalButtons.js +2 -2
- package/dist/components/ModalHeader.js +2 -2
- package/dist/components/NavigationTab.js +2 -2
- package/dist/components/NavigationTabs.js +2 -2
- package/dist/components/NestedMenu.js +3 -3
- package/dist/components/Notification.js +3 -3
- package/dist/components/OptionPill.js +2 -2
- package/dist/components/PDFViewer.js +7 -7
- package/dist/components/Password.js +2 -2
- package/dist/components/ProjectBar.js +1 -1
- package/dist/components/Search.js +3 -3
- package/dist/components/Select.cjs +6 -5
- package/dist/components/Select.js +3 -3
- package/dist/components/Stepper.js +5 -5
- package/dist/components/Time.js +3 -3
- package/dist/components/Toast.js +3 -3
- package/dist/components/Upload.js +3 -3
- package/dist/components/index.cjs +94 -62
- package/dist/components/index.css +3 -0
- package/dist/components/index.js +74 -52
- package/dist/components/useMenuSystem.js +2 -2
- package/dist/hooks/index.cjs +30 -21
- package/dist/hooks/index.js +1 -1
- package/dist/index.css +3 -0
- package/package.json +1 -1
- package/src/components/DataGrid/PinnedColumns.tsx +1 -1
- package/src/components/DataGrid/TableBody/TableBodyRow.tsx +16 -6
- package/src/components/DataGrid/index.tsx +60 -30
- package/src/components/DataGrid/types.ts +2 -0
- package/src/components/Select.tsx +1 -1
- package/src/hooks/useTableLayout.ts +44 -28
- package/dist/{chunk-ED7FXZRX.js → chunk-BW2MWMVM.js} +3 -3
- package/dist/{chunk-7W4I2NK3.js → chunk-GW7OVMMC.js} +3 -3
- package/dist/{chunk-FYW64H7N.js → chunk-JFPRYMID.js} +3 -3
- package/dist/{chunk-A5ROZWIH.js → chunk-R4H6D4SZ.js} +3 -3
- package/dist/{chunk-47KTDBGA.js → chunk-T7UCZWWK.js} +3 -3
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import {
|
|
3
3
|
useMenuPosition,
|
|
4
4
|
useSubMenuSystem
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-VP36B2MM.js";
|
|
6
|
+
import "../chunk-ZU2K7BD3.js";
|
|
7
7
|
import "../chunk-VXWSAIB5.js";
|
|
8
8
|
import "../chunk-T3F37S6Z.js";
|
|
9
9
|
import "../chunk-5UH6QUFB.js";
|
package/dist/hooks/index.cjs
CHANGED
|
@@ -129,38 +129,47 @@ var import_react4 = require("react");
|
|
|
129
129
|
function useTableLayout(initialColumns, key) {
|
|
130
130
|
const [columns, setColumns] = (0, import_react4.useState)(initialColumns);
|
|
131
131
|
const [isReady, setIsReady] = (0, import_react4.useState)(false);
|
|
132
|
-
const
|
|
132
|
+
const renderCountRef = (0, import_react4.useRef)(0);
|
|
133
|
+
const handleSaveLayout = (0, import_react4.useCallback)(
|
|
134
|
+
(setter, _internal) => {
|
|
135
|
+
if (!isReady && !_internal || !key) return;
|
|
136
|
+
setColumns((prevColumns) => {
|
|
137
|
+
const newColumns = typeof setter === "function" ? setter(prevColumns) : setter;
|
|
138
|
+
if (JSON.stringify(newColumns) === JSON.stringify(prevColumns) && !_internal)
|
|
139
|
+
return prevColumns;
|
|
140
|
+
localStorage.setItem(`${key}-tableLayout`, JSON.stringify(newColumns));
|
|
141
|
+
return newColumns;
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
[isReady, key]
|
|
145
|
+
);
|
|
133
146
|
(0, import_react4.useEffect)(() => {
|
|
134
147
|
if (!key) return setIsReady(true);
|
|
148
|
+
if (renderCountRef.current > 1) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`useTableLayout should only be called once per component render cycle.
|
|
151
|
+
${renderCountRef.current} Renders detected.
|
|
152
|
+
Check dependency stability`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
renderCountRef.current += 1;
|
|
135
156
|
const savedLayout = localStorage.getItem(`${key}-tableLayout`);
|
|
136
157
|
if (savedLayout) {
|
|
137
|
-
|
|
158
|
+
handleSaveLayout(
|
|
138
159
|
mergeObjectArrays(
|
|
139
160
|
initialColumns,
|
|
140
161
|
JSON.parse(savedLayout)
|
|
141
|
-
)
|
|
162
|
+
),
|
|
163
|
+
true
|
|
142
164
|
);
|
|
143
165
|
}
|
|
144
166
|
if (!savedLayout) handleSaveLayout(initialColumns, true);
|
|
145
|
-
setLayoutSignal((prev) => prev + 1);
|
|
146
167
|
setIsReady(true);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (JSON.stringify(newColumns) === JSON.stringify(columns) && !_internal)
|
|
153
|
-
return null;
|
|
154
|
-
if (key) {
|
|
155
|
-
localStorage.setItem(`${key}-tableLayout`, JSON.stringify(newColumns));
|
|
156
|
-
}
|
|
157
|
-
setColumns(newColumns);
|
|
158
|
-
setLayoutSignal((prev) => prev + 1);
|
|
159
|
-
return newColumns;
|
|
160
|
-
},
|
|
161
|
-
[columns, isReady, key]
|
|
162
|
-
);
|
|
163
|
-
return { columns, setColumns: handleSaveLayout, layoutSignal, isReady };
|
|
168
|
+
return () => {
|
|
169
|
+
renderCountRef.current = 0;
|
|
170
|
+
};
|
|
171
|
+
}, [handleSaveLayout, initialColumns, key]);
|
|
172
|
+
return { columns, setColumns: handleSaveLayout, isReady };
|
|
164
173
|
}
|
|
165
174
|
// Annotate the CommonJS export names for ESM import in node:
|
|
166
175
|
0 && (module.exports = {
|
package/dist/hooks/index.js
CHANGED
package/dist/index.css
CHANGED
package/package.json
CHANGED
|
@@ -59,6 +59,7 @@ export function TableBodyRow<T>({
|
|
|
59
59
|
<tr
|
|
60
60
|
key={row.id}
|
|
61
61
|
className={clsx(
|
|
62
|
+
"min-h-10",
|
|
62
63
|
"transition-colors hover:bg-background-action-secondary-hover",
|
|
63
64
|
row.getIsSelected() && "!bg-background-action-secondary-hover",
|
|
64
65
|
isError && "!bg-background-action-critical-secondary-hover",
|
|
@@ -81,7 +82,6 @@ export function TableBodyRow<T>({
|
|
|
81
82
|
// fake empty column to the left for virtualization scroll padding
|
|
82
83
|
<td style={{ display: "flex", width: virtualPaddingLeft }} />
|
|
83
84
|
) : null}
|
|
84
|
-
|
|
85
85
|
{columns.map((column) => {
|
|
86
86
|
const cell = locked
|
|
87
87
|
? (column as Cell<T, unknown>)
|
|
@@ -90,6 +90,7 @@ export function TableBodyRow<T>({
|
|
|
90
90
|
if (!cell) {
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
|
+
const cellAlignment = cell.column.columnDef.meta?.align;
|
|
93
94
|
const cellValue = cell.getValue();
|
|
94
95
|
|
|
95
96
|
return cell.column.columnDef.meta?.useCustomRenderer ? (
|
|
@@ -104,9 +105,20 @@ export function TableBodyRow<T>({
|
|
|
104
105
|
testid ? `${testid}-row-${row.id}-cell-${cell.id}` : undefined
|
|
105
106
|
}
|
|
106
107
|
cell={cell}
|
|
107
|
-
className={clsx(
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
className={clsx(
|
|
109
|
+
cellAlignment
|
|
110
|
+
? {
|
|
111
|
+
"justify-start": cellAlignment === "left",
|
|
112
|
+
"justify-end": cellAlignment === "right",
|
|
113
|
+
}
|
|
114
|
+
: {
|
|
115
|
+
"justify-end": typeof cellValue === "number",
|
|
116
|
+
},
|
|
117
|
+
)}
|
|
118
|
+
width={
|
|
119
|
+
(cell.column.columnDef.meta?.headerWidth as string | undefined) ??
|
|
120
|
+
`${cell.column.getSize()}px`
|
|
121
|
+
}
|
|
110
122
|
>
|
|
111
123
|
<Tooltip
|
|
112
124
|
id={id ? `${id}-tooltip-${cell.id}` : undefined}
|
|
@@ -122,12 +134,10 @@ export function TableBodyRow<T>({
|
|
|
122
134
|
</CellElement>
|
|
123
135
|
);
|
|
124
136
|
})}
|
|
125
|
-
|
|
126
137
|
{!locked && virtualPaddingRight ? (
|
|
127
138
|
// fake empty column to the right for virtualization scroll padding
|
|
128
139
|
<td style={{ display: "flex", width: virtualPaddingRight }} />
|
|
129
140
|
) : null}
|
|
130
|
-
|
|
131
141
|
{enableColumnSelector && !locked && (
|
|
132
142
|
<td className="p-2" style={{ width: "48.8px" }}></td>
|
|
133
143
|
)}
|
|
@@ -57,6 +57,7 @@ const NO_RESULTS_HEIGHT = "h-[185px]";
|
|
|
57
57
|
|
|
58
58
|
export function DataGrid<T extends Record<string, unknown>>({
|
|
59
59
|
id,
|
|
60
|
+
rowIdAccessor,
|
|
60
61
|
testid,
|
|
61
62
|
data,
|
|
62
63
|
columns,
|
|
@@ -87,11 +88,8 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
87
88
|
const [localRowSelection, setLocalRowSelection] = useState<
|
|
88
89
|
Record<string, boolean>
|
|
89
90
|
>({});
|
|
90
|
-
const {
|
|
91
|
-
columns
|
|
92
|
-
setColumns: setTableColumns,
|
|
93
|
-
layoutSignal,
|
|
94
|
-
} = useTableLayout<T>(columns, id ?? testid);
|
|
91
|
+
const { columns: tableColumns, setColumns: setTableColumns } =
|
|
92
|
+
useTableLayout<T>(columns, id ?? testid);
|
|
95
93
|
const [columnOrder, setColumnOrder] = useState<string[]>(
|
|
96
94
|
tableColumns.map((c) => c.id!),
|
|
97
95
|
);
|
|
@@ -106,10 +104,23 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
106
104
|
),
|
|
107
105
|
);
|
|
108
106
|
|
|
107
|
+
const resetColumnVisibility = useCallback(
|
|
108
|
+
(updateOrder?: boolean) => {
|
|
109
|
+
setColumnVisibility(
|
|
110
|
+
Object.fromEntries(
|
|
111
|
+
tableColumns
|
|
112
|
+
.filter((column) => !!column.id)
|
|
113
|
+
.map((column) => [column.id, column.meta?.visible ?? true]),
|
|
114
|
+
),
|
|
115
|
+
);
|
|
116
|
+
if (updateOrder) setColumnOrder(tableColumns.map((c) => c.id!));
|
|
117
|
+
},
|
|
118
|
+
[tableColumns],
|
|
119
|
+
);
|
|
120
|
+
|
|
109
121
|
useEffect(() => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}, [layoutSignal]);
|
|
122
|
+
resetColumnVisibility(true);
|
|
123
|
+
}, [resetColumnVisibility]);
|
|
113
124
|
|
|
114
125
|
const sortingState = pagination
|
|
115
126
|
? (externalSorting ?? localSorting)
|
|
@@ -147,13 +158,13 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
147
158
|
}
|
|
148
159
|
: setLocalColumnFilters;
|
|
149
160
|
|
|
150
|
-
const rowSelection =
|
|
151
|
-
|
|
152
|
-
: localRowSelection;
|
|
161
|
+
const rowSelection = externalRowSelection ?? localRowSelection;
|
|
162
|
+
|
|
153
163
|
const setRowSelection: React.Dispatch<
|
|
154
164
|
React.SetStateAction<Record<string, boolean>>
|
|
155
|
-
> =
|
|
156
|
-
|
|
165
|
+
> = useCallback(
|
|
166
|
+
(updaterOrValue) => {
|
|
167
|
+
if (pagination) {
|
|
157
168
|
const value =
|
|
158
169
|
typeof updaterOrValue === "function"
|
|
159
170
|
? (
|
|
@@ -163,8 +174,23 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
163
174
|
)(externalRowSelection ?? {})
|
|
164
175
|
: updaterOrValue;
|
|
165
176
|
(onRowSelectionChange ?? setLocalRowSelection)(value);
|
|
177
|
+
} else if (externalRowSelection && onRowSelectionChange) {
|
|
178
|
+
const value =
|
|
179
|
+
typeof updaterOrValue === "function"
|
|
180
|
+
? (
|
|
181
|
+
updaterOrValue as (
|
|
182
|
+
prev: Record<string, boolean>,
|
|
183
|
+
) => Record<string, boolean>
|
|
184
|
+
)(externalRowSelection ?? {})
|
|
185
|
+
: updaterOrValue;
|
|
186
|
+
|
|
187
|
+
onRowSelectionChange(value);
|
|
188
|
+
} else {
|
|
189
|
+
setLocalRowSelection(updaterOrValue);
|
|
166
190
|
}
|
|
167
|
-
|
|
191
|
+
},
|
|
192
|
+
[externalRowSelection, onRowSelectionChange, pagination],
|
|
193
|
+
);
|
|
168
194
|
|
|
169
195
|
const dndId = useId();
|
|
170
196
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
@@ -186,16 +212,6 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
186
212
|
[setTableColumns],
|
|
187
213
|
);
|
|
188
214
|
|
|
189
|
-
const resetColumnVisibility = useCallback(() => {
|
|
190
|
-
setColumnVisibility(
|
|
191
|
-
Object.fromEntries(
|
|
192
|
-
tableColumns
|
|
193
|
-
.filter((column) => !!column.id)
|
|
194
|
-
.map((column) => [column.id, column.meta?.visible ?? true]),
|
|
195
|
-
),
|
|
196
|
-
);
|
|
197
|
-
}, [tableColumns]);
|
|
198
|
-
|
|
199
215
|
const table = useReactTable<T>({
|
|
200
216
|
columns: tableColumns,
|
|
201
217
|
data,
|
|
@@ -203,7 +219,9 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
203
219
|
getSortedRowModel: getSortedRowModel(),
|
|
204
220
|
getFilteredRowModel: getFilteredRowModel(),
|
|
205
221
|
columnResizeMode: "onChange",
|
|
206
|
-
getRowId:
|
|
222
|
+
getRowId: rowIdAccessor
|
|
223
|
+
? (row) => String(row[rowIdAccessor])
|
|
224
|
+
: (row, index) => String(row.id ?? index + 1),
|
|
207
225
|
state: {
|
|
208
226
|
columnOrder,
|
|
209
227
|
sorting: sortingState,
|
|
@@ -405,6 +423,12 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
405
423
|
.getRowModel()
|
|
406
424
|
.rows[0]?.getValue(header.column.id);
|
|
407
425
|
|
|
426
|
+
const cellAlignment: "left" | "right" | "center" =
|
|
427
|
+
(header.column.columnDef.meta?.align ??
|
|
428
|
+
cellValue === "number")
|
|
429
|
+
? "right"
|
|
430
|
+
: "left";
|
|
431
|
+
|
|
408
432
|
return (
|
|
409
433
|
<DraggableCellHeader
|
|
410
434
|
key={header.id}
|
|
@@ -423,13 +447,19 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
423
447
|
? "cursor-pointer"
|
|
424
448
|
: "cursor-grab",
|
|
425
449
|
"group",
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
450
|
+
cellAlignment
|
|
451
|
+
? {
|
|
452
|
+
"justify-start": cellAlignment === "left",
|
|
453
|
+
"justify-end": cellAlignment === "right",
|
|
454
|
+
}
|
|
455
|
+
: {
|
|
456
|
+
"justify-end":
|
|
457
|
+
typeof cellValue === "number",
|
|
458
|
+
},
|
|
429
459
|
)}
|
|
430
460
|
useMenuDefaultMinWidth={useMenuDefaultMinWidth}
|
|
431
461
|
>
|
|
432
|
-
{
|
|
462
|
+
{cellAlignment === "left" && (
|
|
433
463
|
<Subheader tall>
|
|
434
464
|
{header.column.columnDef.header}
|
|
435
465
|
</Subheader>
|
|
@@ -450,7 +480,7 @@ export function DataGrid<T extends Record<string, unknown>>({
|
|
|
450
480
|
{header.column.getSortIndex() + 1}
|
|
451
481
|
</Subheader>
|
|
452
482
|
)}
|
|
453
|
-
{
|
|
483
|
+
{cellAlignment === "right" && (
|
|
454
484
|
<Subheader tall>
|
|
455
485
|
{header.column.columnDef.header}
|
|
456
486
|
</Subheader>
|
|
@@ -27,6 +27,7 @@ export interface DataGridPagination {
|
|
|
27
27
|
|
|
28
28
|
export interface DataGridProps<T extends Record<string, unknown>> {
|
|
29
29
|
id?: string;
|
|
30
|
+
rowIdAccessor?: keyof T;
|
|
30
31
|
testid?: string;
|
|
31
32
|
data: T[];
|
|
32
33
|
columns: ColumnDef<T>[];
|
|
@@ -83,5 +84,6 @@ declare module "@tanstack/react-table" {
|
|
|
83
84
|
header: Header<TData, TValue>;
|
|
84
85
|
table: Table<TData>;
|
|
85
86
|
}) => ReactNode;
|
|
87
|
+
align?: "left" | "right";
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import { mergeObjectArrays } from "../utils";
|
|
4
4
|
import { ColumnDef } from "@dmsi/wedgekit-react/components";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
useState,
|
|
7
|
+
useEffect,
|
|
8
|
+
SetStateAction,
|
|
9
|
+
useCallback,
|
|
10
|
+
useRef,
|
|
11
|
+
} from "react";
|
|
6
12
|
export type PersistedTableLayout<T> = {
|
|
7
13
|
columns: ColumnDef<T>[];
|
|
8
|
-
setColumns: (setter: SetStateAction<ColumnDef<T>[]>) =>
|
|
9
|
-
layoutSignal: number;
|
|
14
|
+
setColumns: (setter: SetStateAction<ColumnDef<T>[]>) => void;
|
|
10
15
|
isReady: boolean;
|
|
11
16
|
};
|
|
12
17
|
|
|
@@ -22,47 +27,58 @@ export function useTableLayout<T>(
|
|
|
22
27
|
initialColumns: Array<ColumnDef<T>>,
|
|
23
28
|
key?: string,
|
|
24
29
|
): PersistedTableLayout<T> {
|
|
30
|
+
// Use useMemo to ensure initialColumns is stable
|
|
25
31
|
const [columns, setColumns] = useState<ColumnDef<T>[]>(initialColumns);
|
|
26
32
|
const [isReady, setIsReady] = useState(false);
|
|
27
|
-
const
|
|
33
|
+
const renderCountRef = useRef(0);
|
|
34
|
+
|
|
35
|
+
const handleSaveLayout = useCallback(
|
|
36
|
+
(setter: React.SetStateAction<ColumnDef<T>[]>, _internal?: boolean) => {
|
|
37
|
+
if ((!isReady && !_internal) || !key) return;
|
|
38
|
+
// get value from passed setter
|
|
39
|
+
setColumns((prevColumns) => {
|
|
40
|
+
const newColumns =
|
|
41
|
+
typeof setter === "function" ? setter(prevColumns) : setter;
|
|
42
|
+
if (
|
|
43
|
+
JSON.stringify(newColumns) === JSON.stringify(prevColumns) &&
|
|
44
|
+
!_internal
|
|
45
|
+
)
|
|
46
|
+
return prevColumns;
|
|
47
|
+
localStorage.setItem(`${key}-tableLayout`, JSON.stringify(newColumns));
|
|
48
|
+
return newColumns;
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
[isReady, key],
|
|
52
|
+
);
|
|
28
53
|
|
|
29
54
|
useEffect(() => {
|
|
30
55
|
if (!key) return setIsReady(true);
|
|
56
|
+
if (renderCountRef.current > 1) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`useTableLayout should only be called once per component render cycle.
|
|
59
|
+
${renderCountRef.current} Renders detected.
|
|
60
|
+
Check dependency stability`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
renderCountRef.current += 1;
|
|
31
64
|
const savedLayout = localStorage.getItem(`${key}-tableLayout`);
|
|
32
65
|
if (savedLayout) {
|
|
33
|
-
|
|
66
|
+
handleSaveLayout(
|
|
34
67
|
mergeObjectArrays<ColumnDef<T>>(
|
|
35
68
|
initialColumns,
|
|
36
69
|
JSON.parse(savedLayout),
|
|
37
70
|
),
|
|
71
|
+
true,
|
|
38
72
|
);
|
|
39
73
|
}
|
|
40
74
|
if (!savedLayout) handleSaveLayout(initialColumns, true);
|
|
41
|
-
setLayoutSignal((prev) => prev + 1);
|
|
42
75
|
setIsReady(true);
|
|
43
76
|
|
|
77
|
+
return () => {
|
|
78
|
+
renderCountRef.current = 0;
|
|
79
|
+
};
|
|
44
80
|
// Load the layout from local storage on init
|
|
45
|
-
|
|
46
|
-
}, []);
|
|
47
|
-
|
|
48
|
-
const handleSaveLayout = useCallback(
|
|
49
|
-
(setter: React.SetStateAction<ColumnDef<T>[]>, _internal?: boolean) => {
|
|
50
|
-
if (!isReady && !_internal) return null;
|
|
51
|
-
// get value from passed setter
|
|
52
|
-
const newColumns =
|
|
53
|
-
typeof setter === "function" ? setter(columns) : setter;
|
|
54
|
-
if (JSON.stringify(newColumns) === JSON.stringify(columns) && !_internal)
|
|
55
|
-
return null;
|
|
56
|
-
if (key) {
|
|
57
|
-
localStorage.setItem(`${key}-tableLayout`, JSON.stringify(newColumns));
|
|
58
|
-
}
|
|
59
|
-
setColumns(newColumns);
|
|
60
|
-
setLayoutSignal((prev) => prev + 1);
|
|
61
|
-
|
|
62
|
-
return newColumns;
|
|
63
|
-
},
|
|
64
|
-
[columns, isReady, key],
|
|
65
|
-
);
|
|
81
|
+
}, [handleSaveLayout, initialColumns, key]);
|
|
66
82
|
|
|
67
|
-
return { columns, setColumns: handleSaveLayout,
|
|
83
|
+
return { columns, setColumns: handleSaveLayout, isReady };
|
|
68
84
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Label
|
|
3
3
|
} from "./chunk-CJVTFYI4.js";
|
|
4
|
-
import {
|
|
5
|
-
Button
|
|
6
|
-
} from "./chunk-SK742QNF.js";
|
|
7
4
|
import {
|
|
8
5
|
Icon
|
|
9
6
|
} from "./chunk-UAPWR2KE.js";
|
|
7
|
+
import {
|
|
8
|
+
Button
|
|
9
|
+
} from "./chunk-SK742QNF.js";
|
|
10
10
|
import {
|
|
11
11
|
baseTransition,
|
|
12
12
|
componentGap,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Label
|
|
3
|
+
} from "./chunk-CJVTFYI4.js";
|
|
1
4
|
import {
|
|
2
5
|
formatCurrencyDisplay,
|
|
3
6
|
formatDecimalValue,
|
|
4
7
|
getDecimalPlaceholder
|
|
5
8
|
} from "./chunk-5UH6QUFB.js";
|
|
6
|
-
import {
|
|
7
|
-
Label
|
|
8
|
-
} from "./chunk-CJVTFYI4.js";
|
|
9
9
|
import {
|
|
10
10
|
Icon
|
|
11
11
|
} from "./chunk-UAPWR2KE.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Heading2
|
|
3
3
|
} from "./chunk-REOLWEZG.js";
|
|
4
|
-
import {
|
|
5
|
-
Button
|
|
6
|
-
} from "./chunk-SK742QNF.js";
|
|
7
4
|
import {
|
|
8
5
|
Icon
|
|
9
6
|
} from "./chunk-UAPWR2KE.js";
|
|
7
|
+
import {
|
|
8
|
+
Button
|
|
9
|
+
} from "./chunk-SK742QNF.js";
|
|
10
10
|
import {
|
|
11
11
|
layoutGroupGap,
|
|
12
12
|
layoutPaddding
|