@cdx-ui/data-grid 0.3.12 → 0.3.13
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/coverage.svg +1 -1
- package/lib/commonjs/DataGrid.js +279 -40
- package/lib/commonjs/DataGrid.js.map +1 -1
- package/lib/commonjs/DataGridFilterPanel.js +136 -9
- package/lib/commonjs/DataGridFilterPanel.js.map +1 -1
- package/lib/commonjs/adapter/columns.js +16 -8
- package/lib/commonjs/adapter/columns.js.map +1 -1
- package/lib/commonjs/adapter/pinning.js +5 -1
- package/lib/commonjs/adapter/pinning.js.map +1 -1
- package/lib/commonjs/adapter/selectColumn.js +11 -0
- package/lib/commonjs/adapter/selectColumn.js.map +1 -1
- package/lib/commonjs/adapter/treeData.js +195 -0
- package/lib/commonjs/adapter/treeData.js.map +1 -0
- package/lib/commonjs/styles.js +48 -2
- package/lib/commonjs/styles.js.map +1 -1
- package/lib/commonjs/types.js +11 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useDataGridTable.js +143 -12
- package/lib/commonjs/useDataGridTable.js.map +1 -1
- package/lib/module/DataGrid.js +285 -46
- package/lib/module/DataGrid.js.map +1 -1
- package/lib/module/DataGridFilterPanel.js +139 -13
- package/lib/module/DataGridFilterPanel.js.map +1 -1
- package/lib/module/adapter/columns.js +17 -9
- package/lib/module/adapter/columns.js.map +1 -1
- package/lib/module/adapter/pinning.js +5 -1
- package/lib/module/adapter/pinning.js.map +1 -1
- package/lib/module/adapter/selectColumn.js +11 -1
- package/lib/module/adapter/selectColumn.js.map +1 -1
- package/lib/module/adapter/treeData.js +187 -0
- package/lib/module/adapter/treeData.js.map +1 -0
- package/lib/module/styles.js +47 -1
- package/lib/module/styles.js.map +1 -1
- package/lib/module/types.js +10 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/useDataGridTable.js +147 -16
- package/lib/module/useDataGridTable.js.map +1 -1
- package/lib/typescript/DataGrid.d.ts.map +1 -1
- package/lib/typescript/DataGridFilterPanel.d.ts +39 -4
- package/lib/typescript/DataGridFilterPanel.d.ts.map +1 -1
- package/lib/typescript/adapter/columns.d.ts +1 -1
- package/lib/typescript/adapter/columns.d.ts.map +1 -1
- package/lib/typescript/adapter/pinning.d.ts +1 -0
- package/lib/typescript/adapter/pinning.d.ts.map +1 -1
- package/lib/typescript/adapter/selectColumn.d.ts +8 -0
- package/lib/typescript/adapter/selectColumn.d.ts.map +1 -1
- package/lib/typescript/adapter/treeData.d.ts +36 -0
- package/lib/typescript/adapter/treeData.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/styles.d.ts +12 -1
- package/lib/typescript/styles.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +68 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useDataGridTable.d.ts +25 -3
- package/lib/typescript/useDataGridTable.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/DataGrid.tsx +399 -59
- package/src/DataGridFilterPanel.tsx +188 -17
- package/src/adapter/columns.ts +21 -7
- package/src/adapter/pinning.ts +10 -1
- package/src/adapter/selectColumn.ts +12 -1
- package/src/adapter/treeData.ts +228 -0
- package/src/index.ts +4 -0
- package/src/styles.ts +57 -1
- package/src/types.ts +76 -0
- package/src/useDataGridTable.ts +217 -15
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { SELECT_COLUMN_ID } from '../types';
|
|
3
|
+
import { DETAIL_PANEL_TOGGLE_ID, SELECT_COLUMN_ID } from '../types';
|
|
4
4
|
export const DEFAULT_PINNED_COLUMN_WIDTH = 100;
|
|
5
5
|
export const SELECT_COLUMN_WIDTH = 56;
|
|
6
|
+
export const DETAIL_PANEL_TOGGLE_WIDTH = 48;
|
|
6
7
|
export function isColumnPinningActive(state) {
|
|
7
8
|
return state.start.length > 0 || state.end.length > 0;
|
|
8
9
|
}
|
|
@@ -13,6 +14,9 @@ export function pinnedColumnPixelWidth(columnId, col) {
|
|
|
13
14
|
if (columnId === SELECT_COLUMN_ID) {
|
|
14
15
|
return SELECT_COLUMN_WIDTH;
|
|
15
16
|
}
|
|
17
|
+
if (columnId === DETAIL_PANEL_TOGGLE_ID) {
|
|
18
|
+
return DETAIL_PANEL_TOGGLE_WIDTH;
|
|
19
|
+
}
|
|
16
20
|
return Math.max(col?.width ?? DEFAULT_PINNED_COLUMN_WIDTH, col?.minWidth ?? 0);
|
|
17
21
|
}
|
|
18
22
|
export function buildPinnedOffsets(state, colByField) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SELECT_COLUMN_ID","DEFAULT_PINNED_COLUMN_WIDTH","SELECT_COLUMN_WIDTH","isColumnPinningActive","state","start","length","end","pinnedFieldSet","Set","pinnedColumnPixelWidth","columnId","col","Math","max","width","minWidth","buildPinnedOffsets","colByField","Map","startOffset","id","set","get","endOffset","index","startTotal","endTotal","pinnedCellStyle","edge","offset","isHeader","position","insetInlineStart","insetInlineEnd","zIndex","pinnedEdgeGuidesImage","offsets","color","isRTL","stops","toString","inner","push","undefined","join","warnedPinnedFlexFields","warnPinnedFlexColumns","columns","pinned","__DEV__","column","has","field","flex","add","console","warn"],"sourceRoot":"../../../src","sources":["adapter/pinning.ts"],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"names":["DETAIL_PANEL_TOGGLE_ID","SELECT_COLUMN_ID","DEFAULT_PINNED_COLUMN_WIDTH","SELECT_COLUMN_WIDTH","DETAIL_PANEL_TOGGLE_WIDTH","isColumnPinningActive","state","start","length","end","pinnedFieldSet","Set","pinnedColumnPixelWidth","columnId","col","Math","max","width","minWidth","buildPinnedOffsets","colByField","Map","startOffset","id","set","get","endOffset","index","startTotal","endTotal","pinnedCellStyle","edge","offset","isHeader","position","insetInlineStart","insetInlineEnd","zIndex","pinnedEdgeGuidesImage","offsets","color","isRTL","stops","toString","inner","push","undefined","join","warnedPinnedFlexFields","warnPinnedFlexColumns","columns","pinned","__DEV__","column","has","field","flex","add","console","warn"],"sourceRoot":"../../../src","sources":["adapter/pinning.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { SELECT_COLUMN_ID } from '../types';
|
|
3
|
+
import { DETAIL_PANEL_TOGGLE_ID, SELECT_COLUMN_ID } from '../types';
|
|
4
4
|
export function createSelectColumn() {
|
|
5
5
|
return {
|
|
6
6
|
id: SELECT_COLUMN_ID,
|
|
@@ -11,4 +11,14 @@ export function createSelectColumn() {
|
|
|
11
11
|
size: 48
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
+
export function createDetailPanelToggleColumn() {
|
|
15
|
+
return {
|
|
16
|
+
id: DETAIL_PANEL_TOGGLE_ID,
|
|
17
|
+
header: DETAIL_PANEL_TOGGLE_ID,
|
|
18
|
+
enableSorting: false,
|
|
19
|
+
enableColumnFilter: false,
|
|
20
|
+
enableGlobalFilter: false,
|
|
21
|
+
size: 48
|
|
22
|
+
};
|
|
23
|
+
}
|
|
14
24
|
//# sourceMappingURL=selectColumn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SELECT_COLUMN_ID","createSelectColumn","id","header","enableSorting","enableColumnFilter","enableGlobalFilter","size"],"sourceRoot":"../../../src","sources":["adapter/selectColumn.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,UAAU;
|
|
1
|
+
{"version":3,"names":["DETAIL_PANEL_TOGGLE_ID","SELECT_COLUMN_ID","createSelectColumn","id","header","enableSorting","enableColumnFilter","enableGlobalFilter","size","createDetailPanelToggleColumn"],"sourceRoot":"../../../src","sources":["adapter/selectColumn.ts"],"mappings":";;AAAA,SAASA,sBAAsB,EAAEC,gBAAgB,QAAQ,UAAU;AAEnE,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,OAAO;IACLC,EAAE,EAAEF,gBAAgB;IACpBG,MAAM,EAAEH,gBAAgB;IACxBI,aAAa,EAAE,KAAK;IACpBC,kBAAkB,EAAE,KAAK;IACzBC,kBAAkB,EAAE,KAAK;IACzBC,IAAI,EAAE;EACR,CAAC;AACH;AAEA,OAAO,SAASC,6BAA6BA,CAAA,EAAG;EAC9C,OAAO;IACLN,EAAE,EAAEH,sBAAsB;IAC1BI,MAAM,EAAEJ,sBAAsB;IAC9BK,aAAa,EAAE,KAAK;IACpBC,kBAAkB,EAAE,KAAK;IACzBC,kBAAkB,EAAE,KAAK;IACzBC,IAAI,EAAE;EACR,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** The shape TanStack rows share; filtered and sorted rows carry their filtered `subRows`. */
|
|
4
|
+
|
|
5
|
+
const pathKey = path => JSON.stringify(path);
|
|
6
|
+
const warnedDuplicatePaths = new Set();
|
|
7
|
+
export function buildTreeIndex(rows, getTreeDataPath, keyOf) {
|
|
8
|
+
const byPath = new Map();
|
|
9
|
+
const paths = new Map();
|
|
10
|
+
for (const row of rows) {
|
|
11
|
+
const path = getTreeDataPath(row);
|
|
12
|
+
const key = pathKey(path);
|
|
13
|
+
if (__DEV__ && byPath.has(key) && !warnedDuplicatePaths.has(key)) {
|
|
14
|
+
warnedDuplicatePaths.add(key);
|
|
15
|
+
console.warn(`[DataGrid] Duplicate tree data path ${key}. Paths must be unique.`);
|
|
16
|
+
}
|
|
17
|
+
byPath.set(key, row);
|
|
18
|
+
paths.set(row, path);
|
|
19
|
+
}
|
|
20
|
+
const roots = [];
|
|
21
|
+
const childrenOf = new Map();
|
|
22
|
+
const rowOf = new Map();
|
|
23
|
+
const parentKeyOf = new Map();
|
|
24
|
+
const childKeysOf = new Map();
|
|
25
|
+
for (const row of rows) {
|
|
26
|
+
const path = paths.get(row) ?? [];
|
|
27
|
+
const key = keyOf(row);
|
|
28
|
+
rowOf.set(key, row);
|
|
29
|
+
let parent;
|
|
30
|
+
for (let length = path.length - 1; length > 0 && parent === undefined; length -= 1) {
|
|
31
|
+
parent = byPath.get(pathKey(path.slice(0, length)));
|
|
32
|
+
}
|
|
33
|
+
if (parent === undefined || parent === row) {
|
|
34
|
+
roots.push(row);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const parentKey = keyOf(parent);
|
|
38
|
+
parentKeyOf.set(key, parentKey);
|
|
39
|
+
const siblings = childrenOf.get(parent);
|
|
40
|
+
if (siblings) {
|
|
41
|
+
siblings.push(row);
|
|
42
|
+
} else {
|
|
43
|
+
childrenOf.set(parent, [row]);
|
|
44
|
+
}
|
|
45
|
+
const siblingKeys = childKeysOf.get(parentKey);
|
|
46
|
+
if (siblingKeys) {
|
|
47
|
+
siblingKeys.push(key);
|
|
48
|
+
} else {
|
|
49
|
+
childKeysOf.set(parentKey, [key]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const depthOf = new Map();
|
|
53
|
+
const breadthFirst = roots.map(row => keyOf(row));
|
|
54
|
+
for (const key of breadthFirst) {
|
|
55
|
+
depthOf.set(key, 0);
|
|
56
|
+
}
|
|
57
|
+
// The array iterator also visits children pushed during the loop.
|
|
58
|
+
for (const key of breadthFirst) {
|
|
59
|
+
for (const child of childKeysOf.get(key) ?? []) {
|
|
60
|
+
depthOf.set(child, (depthOf.get(key) ?? 0) + 1);
|
|
61
|
+
breadthFirst.push(child);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
roots,
|
|
66
|
+
childrenOf,
|
|
67
|
+
rowOf,
|
|
68
|
+
parentKeyOf,
|
|
69
|
+
childKeysOf,
|
|
70
|
+
depthOf,
|
|
71
|
+
keysDeepestFirst: breadthFirst.reverse()
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* With `propagateParents`, a parent is `all` exactly when every child is `all`, whatever the model
|
|
77
|
+
* says about the parent itself. Without it, a parent's own selection decides, and partly selected
|
|
78
|
+
* descendants show as `some`.
|
|
79
|
+
*/
|
|
80
|
+
export function computeTreeSelection(index, selected, propagateParents) {
|
|
81
|
+
const status = new Map();
|
|
82
|
+
for (const key of index.keysDeepestFirst) {
|
|
83
|
+
const isSelected = selected.has(key);
|
|
84
|
+
const children = index.childKeysOf.get(key);
|
|
85
|
+
if (!children?.length) {
|
|
86
|
+
status.set(key, isSelected ? 'all' : 'none');
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
let all = true;
|
|
90
|
+
let some = false;
|
|
91
|
+
for (const child of children) {
|
|
92
|
+
const childStatus = status.get(child) ?? 'none';
|
|
93
|
+
if (childStatus !== 'all') {
|
|
94
|
+
all = false;
|
|
95
|
+
}
|
|
96
|
+
if (childStatus !== 'none') {
|
|
97
|
+
some = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (propagateParents) {
|
|
101
|
+
status.set(key, all ? 'all' : some || isSelected ? 'some' : 'none');
|
|
102
|
+
} else {
|
|
103
|
+
status.set(key, isSelected ? 'all' : some ? 'some' : 'none');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return status;
|
|
107
|
+
}
|
|
108
|
+
export function applyTreeSelection(index, selected, targets, value, propagateParents) {
|
|
109
|
+
const next = new Set(selected);
|
|
110
|
+
for (const key of targets) {
|
|
111
|
+
if (value) {
|
|
112
|
+
next.add(key);
|
|
113
|
+
} else {
|
|
114
|
+
next.delete(key);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (propagateParents) {
|
|
118
|
+
for (const key of index.keysDeepestFirst) {
|
|
119
|
+
const children = index.childKeysOf.get(key);
|
|
120
|
+
if (!children?.length) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (children.every(child => next.has(child))) {
|
|
124
|
+
next.add(key);
|
|
125
|
+
} else {
|
|
126
|
+
next.delete(key);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return next;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Rows a toggle writes (`targets`) and the rows whose state decides the toggle direction
|
|
135
|
+
* (`units`). With `descendants`, a row's filtered sub-rows are included; a row whose children were
|
|
136
|
+
* all filtered out takes its whole subtree, so a matching group can still be picked.
|
|
137
|
+
*/
|
|
138
|
+
export function selectionScope(rows, index, descendants) {
|
|
139
|
+
const targets = [];
|
|
140
|
+
const units = [];
|
|
141
|
+
const visitFullSubtree = key => {
|
|
142
|
+
targets.push(key);
|
|
143
|
+
const children = index.childKeysOf.get(key);
|
|
144
|
+
if (!children?.length) {
|
|
145
|
+
units.push(key);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
children.forEach(visitFullSubtree);
|
|
149
|
+
};
|
|
150
|
+
const visit = row => {
|
|
151
|
+
if (!descendants) {
|
|
152
|
+
targets.push(row.id);
|
|
153
|
+
units.push(row.id);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (row.subRows.length === 0) {
|
|
157
|
+
visitFullSubtree(row.id);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
targets.push(row.id);
|
|
161
|
+
row.subRows.forEach(visit);
|
|
162
|
+
};
|
|
163
|
+
rows.forEach(visit);
|
|
164
|
+
return {
|
|
165
|
+
targets,
|
|
166
|
+
units
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Keeps every row that matches and every ancestor of a match. */
|
|
171
|
+
export function keepMatchesWithAncestors(rows, index, keyOf, matches) {
|
|
172
|
+
const keep = new Set();
|
|
173
|
+
for (const row of rows) {
|
|
174
|
+
if (!matches(row)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
for (let key = keyOf(row); key !== undefined;) {
|
|
178
|
+
if (keep.has(key)) {
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
keep.add(key);
|
|
182
|
+
key = index.parentKeyOf.get(key);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return rows.filter(row => keep.has(keyOf(row)));
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=treeData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pathKey","path","JSON","stringify","warnedDuplicatePaths","Set","buildTreeIndex","rows","getTreeDataPath","keyOf","byPath","Map","paths","row","key","__DEV__","has","add","console","warn","set","roots","childrenOf","rowOf","parentKeyOf","childKeysOf","get","parent","length","undefined","slice","push","parentKey","siblings","siblingKeys","depthOf","breadthFirst","map","child","keysDeepestFirst","reverse","computeTreeSelection","index","selected","propagateParents","status","isSelected","children","all","some","childStatus","applyTreeSelection","targets","value","next","delete","every","selectionScope","descendants","units","visitFullSubtree","forEach","visit","id","subRows","keepMatchesWithAncestors","matches","keep","filter"],"sourceRoot":"../../../src","sources":["adapter/treeData.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/styles.js
CHANGED
|
@@ -147,7 +147,20 @@ export const dataGridBodyVariants = cva(Platform.select({
|
|
|
147
147
|
default: ''
|
|
148
148
|
}));
|
|
149
149
|
export const dataGridFilterInputVariants = cva('min-w-24');
|
|
150
|
-
|
|
150
|
+
|
|
151
|
+
// The toolbar panel sits at a fixed spot in the grid root. A panel opened from a column is anchored
|
|
152
|
+
// to its opener in a portal, so its position and width cap come from the anchored overlay instead.
|
|
153
|
+
export const dataGridFilterPanelVariants = cva('w-max gap-3 rounded-lg border border-stroke-secondary bg-surface-primary px-3 pb-2 pt-3 shadow-lg', {
|
|
154
|
+
variants: {
|
|
155
|
+
anchored: {
|
|
156
|
+
true: '',
|
|
157
|
+
false: 'absolute start-4 top-16 z-30 max-w-[calc(100%-2rem)]'
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
defaultVariants: {
|
|
161
|
+
anchored: false
|
|
162
|
+
}
|
|
163
|
+
});
|
|
151
164
|
|
|
152
165
|
// The panel is as wide as one unwrapped row, capped at the grid's width. Below that, fields wrap
|
|
153
166
|
// onto new lines and grow to fill them, so the layout follows the grid's width, not the viewport.
|
|
@@ -178,6 +191,39 @@ export const dataGridCellVariants = cva(['h-12 px-4', Platform.select({
|
|
|
178
191
|
web: 'border-b border-stroke-secondary',
|
|
179
192
|
default: ''
|
|
180
193
|
})]);
|
|
194
|
+
export const dataGridDetailToggleCellVariants = cva(['w-12 px-2', Platform.select({
|
|
195
|
+
web: 'border-b border-stroke-secondary',
|
|
196
|
+
default: ''
|
|
197
|
+
})]);
|
|
198
|
+
|
|
199
|
+
// Header labels and depth-0 content line up because both reserve the toggle slot.
|
|
200
|
+
export const dataGridTreeCellInnerVariants = cva('min-w-0 flex-1 flex-row items-center gap-2');
|
|
201
|
+
export const dataGridTreeToggleSlotVariants = cva('size-8 shrink-0 items-center justify-center');
|
|
202
|
+
export const dataGridTreeContentVariants = cva('min-w-0 flex-1 flex-row items-center');
|
|
203
|
+
export const dataGridDetailPanelCellVariants = cva(['px-4 py-3', Platform.select({
|
|
204
|
+
web: 'border-b border-stroke-secondary bg-surface-primary',
|
|
205
|
+
default: ''
|
|
206
|
+
})]);
|
|
207
|
+
|
|
208
|
+
// Same `w-0 min-w-full` trick as the header label: a declared column width truncates the value
|
|
209
|
+
// with an ellipsis instead of wrapping it onto a second line and growing the fixed-height row.
|
|
210
|
+
export const dataGridCellTextVariants = cva('min-w-0', {
|
|
211
|
+
variants: {
|
|
212
|
+
align: {
|
|
213
|
+
start: 'text-start',
|
|
214
|
+
center: 'text-center',
|
|
215
|
+
end: 'text-end'
|
|
216
|
+
},
|
|
217
|
+
fitToColumn: {
|
|
218
|
+
true: 'w-0 min-w-full',
|
|
219
|
+
false: ''
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
defaultVariants: {
|
|
223
|
+
align: 'start',
|
|
224
|
+
fitToColumn: false
|
|
225
|
+
}
|
|
226
|
+
});
|
|
181
227
|
export const dataGridSelectCellVariants = cva(['w-14 px-4', Platform.select({
|
|
182
228
|
web: 'border-b border-stroke-secondary',
|
|
183
229
|
default: ''
|
package/lib/module/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","cva","dataGridRootVariants","variants","autoHeight","true","false","defaultVariants","dataGridMainVariants","overlay","compoundVariants","className","dataGridPinnedSurfaceVariants","select","web","default","header","dataGridPinnedEdgeVariants","edge","start","end","none","dataGridToolbarVariants","dataGridToolbarSearchVariants","dataGridToolbarActionsVariants","dataGridFooterVariants","dataGridOverlayVariants","headerFilters","dataGridEmptyOverlayVariants","dataGridHeaderCellInnerVariants","align","center","fitToColumn","dataGridHeaderLabelVariants","dataGridSortButtonVariants","position","leading","trailing","sorted","dataGridTableVariants","dataGridHeaderVariants","dataGridBodyVariants","dataGridFilterInputVariants","dataGridFilterPanelVariants","dataGridFilterPanelRowVariants","dataGridFilterPanelLogicVariants","dataGridFilterPanelFieldVariants","size","column","operator","value","dataGridFilterPanelColumnVariants","dataGridFilterPanelOperatorVariants","dataGridFilterPanelValueVariants","dataGridFilterPanelFooterVariants","dataGridHeadVariants","dataGridSelectHeadVariants","dataGridCellVariants","dataGridSelectCellVariants","dataGridPaginationVariants","dataGridPaginationRangeVariants"],"sourceRoot":"../../src","sources":["styles.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["Platform","cva","dataGridRootVariants","variants","autoHeight","true","false","defaultVariants","dataGridMainVariants","overlay","compoundVariants","className","dataGridPinnedSurfaceVariants","select","web","default","header","dataGridPinnedEdgeVariants","edge","start","end","none","dataGridToolbarVariants","dataGridToolbarSearchVariants","dataGridToolbarActionsVariants","dataGridFooterVariants","dataGridOverlayVariants","headerFilters","dataGridEmptyOverlayVariants","dataGridHeaderCellInnerVariants","align","center","fitToColumn","dataGridHeaderLabelVariants","dataGridSortButtonVariants","position","leading","trailing","sorted","dataGridTableVariants","dataGridHeaderVariants","dataGridBodyVariants","dataGridFilterInputVariants","dataGridFilterPanelVariants","anchored","dataGridFilterPanelRowVariants","dataGridFilterPanelLogicVariants","dataGridFilterPanelFieldVariants","size","column","operator","value","dataGridFilterPanelColumnVariants","dataGridFilterPanelOperatorVariants","dataGridFilterPanelValueVariants","dataGridFilterPanelFooterVariants","dataGridHeadVariants","dataGridSelectHeadVariants","dataGridCellVariants","dataGridDetailToggleCellVariants","dataGridTreeCellInnerVariants","dataGridTreeToggleSlotVariants","dataGridTreeContentVariants","dataGridDetailPanelCellVariants","dataGridCellTextVariants","dataGridSelectCellVariants","dataGridPaginationVariants","dataGridPaginationRangeVariants"],"sourceRoot":"../../src","sources":["styles.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/types.js
CHANGED
|
@@ -25,8 +25,18 @@
|
|
|
25
25
|
* explicit `{ value, label }` pair.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
/** Maps a column `field` to `false` to hide it. Fields that are missing or `true` stay visible. */
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* How a selection change spreads through `treeData`. Both default to `true`, as in MUI.
|
|
32
|
+
*/
|
|
33
|
+
|
|
28
34
|
export const SELECT_COLUMN_ID = '__select__';
|
|
29
35
|
|
|
36
|
+
/** Same id as MUI X's master-detail toggle column. */
|
|
37
|
+
export const DETAIL_PANEL_TOGGLE_ID = '__detail_panel_toggle__';
|
|
38
|
+
export const EMPTY_ROW_ID_SET = new Set();
|
|
39
|
+
|
|
30
40
|
/** MUI X Data Grid checkbox-column field; accepted as an alias for {@link SELECT_COLUMN_ID}. */
|
|
31
41
|
export const MUI_CHECKBOX_FIELD = '__check__';
|
|
32
42
|
export const DEFAULT_PAGE_SIZE_OPTIONS = [25, 50, 100];
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SELECT_COLUMN_ID","MUI_CHECKBOX_FIELD","DEFAULT_PAGE_SIZE_OPTIONS","DEFAULT_PAGINATION_MODEL","page","pageSize","EMPTY_SELECTION","type","ids"
|
|
1
|
+
{"version":3,"names":["SELECT_COLUMN_ID","DETAIL_PANEL_TOGGLE_ID","EMPTY_ROW_ID_SET","Set","MUI_CHECKBOX_FIELD","DEFAULT_PAGE_SIZE_OPTIONS","DEFAULT_PAGINATION_MODEL","page","pageSize","EMPTY_SELECTION","type","ids"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AA8BA;AACA;AACA;AACA;;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;;AAYA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAwDA;;AAeA;AACA;AACA;;AA6HA,OAAO,MAAMA,gBAAgB,GAAG,YAAY;;AAE5C;AACA,OAAO,MAAMC,sBAAsB,GAAG,yBAAyB;AAE/D,OAAO,MAAMC,gBAAwC,GAAG,IAAIC,GAAG,CAAC,CAAC;;AAEjE;AACA,OAAO,MAAMC,kBAAkB,GAAG,WAAW;AAE7C,OAAO,MAAMC,yBAAyB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU;AAE/D,OAAO,MAAMC,wBAA6C,GAAG;EAC3DC,IAAI,EAAE,CAAC;EACPC,QAAQ,EAAE;AACZ,CAAC;AAED,OAAO,MAAMC,eAAsC,GAAG;EACpDC,IAAI,EAAE,SAAS;EACfC,GAAG,EAAE,IAAIR,GAAG,CAAC;AACf,CAAC","ignoreList":[]}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useMemo } from 'react';
|
|
4
|
-
import { columnFilteringFeature, columnPinningFeature, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, filterFn_includesString, globalFilteringFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_text, tableFeatures, useTable } from '@tanstack/react-table';
|
|
5
|
-
import { createSelectColumn } from './adapter/selectColumn';
|
|
3
|
+
import { useMemo, useState } from 'react';
|
|
4
|
+
import { columnFilteringFeature, columnPinningFeature, columnVisibilityFeature, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, filterFn_includesString, globalFilteringFeature, rowExpandingFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_text, tableFeatures, useTable } from '@tanstack/react-table';
|
|
5
|
+
import { createDetailPanelToggleColumn, createSelectColumn } from './adapter/selectColumn';
|
|
6
|
+
import { applyTreeSelection, buildTreeIndex, computeTreeSelection, keepMatchesWithAncestors, selectionScope } from './adapter/treeData';
|
|
6
7
|
import { applyUpdater, gridColDefToColumnDef } from './adapter/columns';
|
|
7
8
|
import { filterFn_displayText, metaUsesDisplayFilter, normalizeFilterQuery, sortFn_boolean, sortFn_datetime, sortFn_number, sortFn_selectLabel, untypedCellIncludesQuery } from './adapter/columnTypes';
|
|
8
9
|
import { filterOperatorNeedsValue, isActiveFilterItem, isBlankFilterValue, isFilterValueGroup, isOperatorFilterValue, rowMatchesFilterItem } from './adapter/filterOperators';
|
|
9
|
-
import { SELECT_COLUMN_ID } from './types';
|
|
10
|
+
import { DETAIL_PANEL_TOGGLE_ID, SELECT_COLUMN_ID } from './types';
|
|
10
11
|
function gridGlobalFilterFn(row, columnId, filterValue) {
|
|
11
|
-
if (columnId === SELECT_COLUMN_ID) {
|
|
12
|
+
if (columnId === SELECT_COLUMN_ID || columnId === DETAIL_PANEL_TOGGLE_ID) {
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
14
15
|
const meta = row.getAllCells().find(cell => cell.column.id === columnId)?.column.columnDef.meta;
|
|
@@ -20,7 +21,9 @@ function gridGlobalFilterFn(row, columnId, filterValue) {
|
|
|
20
21
|
const features = tableFeatures({
|
|
21
22
|
columnFilteringFeature,
|
|
22
23
|
columnPinningFeature,
|
|
24
|
+
columnVisibilityFeature,
|
|
23
25
|
globalFilteringFeature,
|
|
26
|
+
rowExpandingFeature,
|
|
24
27
|
rowSortingFeature,
|
|
25
28
|
rowPaginationFeature,
|
|
26
29
|
rowSelectionFeature,
|
|
@@ -193,6 +196,10 @@ export function resolveRowId(row, getRowId) {
|
|
|
193
196
|
}
|
|
194
197
|
return '';
|
|
195
198
|
}
|
|
199
|
+
const EMPTY_EXPANSION = {};
|
|
200
|
+
const EMPTY_FILTER_EXPANSION = {};
|
|
201
|
+
const EMPTY_VISIBILITY = {};
|
|
202
|
+
let warnedMissingTreeDataPath = false;
|
|
196
203
|
export function useDataGridTable({
|
|
197
204
|
rows,
|
|
198
205
|
columns,
|
|
@@ -214,8 +221,22 @@ export function useDataGridTable({
|
|
|
214
221
|
onQuickFilterChange,
|
|
215
222
|
rowSelectionModel,
|
|
216
223
|
onRowSelectionModelChange,
|
|
217
|
-
columnPinning
|
|
224
|
+
columnPinning,
|
|
225
|
+
columnVisibility = EMPTY_VISIBILITY,
|
|
226
|
+
detailPanel = false,
|
|
227
|
+
treeData: treeDataProp = false,
|
|
228
|
+
getTreeDataPath,
|
|
229
|
+
defaultGroupingExpansionDepth = 0,
|
|
230
|
+
isGroupExpandedByDefault,
|
|
231
|
+
rowSelectionPropagation
|
|
218
232
|
}) {
|
|
233
|
+
const treeData = treeDataProp && getTreeDataPath !== undefined;
|
|
234
|
+
if (__DEV__ && treeDataProp && getTreeDataPath === undefined && !warnedMissingTreeDataPath) {
|
|
235
|
+
warnedMissingTreeDataPath = true;
|
|
236
|
+
console.warn('[DataGrid] `treeData` needs `getTreeDataPath`. Rendering flat rows.');
|
|
237
|
+
}
|
|
238
|
+
const propagateDescendants = rowSelectionPropagation?.descendants ?? true;
|
|
239
|
+
const propagateParents = rowSelectionPropagation?.parents ?? true;
|
|
219
240
|
const orFilterItems = useMemo(() => {
|
|
220
241
|
if (filterLogicOperator !== 'or' || filterMode === 'server') {
|
|
221
242
|
return undefined;
|
|
@@ -223,17 +244,27 @@ export function useDataGridTable({
|
|
|
223
244
|
const active = filterModel.filter(isActiveFilterItem);
|
|
224
245
|
return active.length > 1 ? active : undefined;
|
|
225
246
|
}, [filterLogicOperator, filterMode, filterModel]);
|
|
247
|
+
const keyOf = useMemo(() => row => selectionIdKey(resolveRowId(row, getRowId)), [getRowId]);
|
|
248
|
+
const fullTree = useMemo(() => treeData ? buildTreeIndex(rows, getTreeDataPath, keyOf) : undefined, [getTreeDataPath, keyOf, rows, treeData]);
|
|
226
249
|
const data = useMemo(() => {
|
|
227
250
|
if (!orFilterItems) {
|
|
228
251
|
return [...rows];
|
|
229
252
|
}
|
|
230
253
|
const filterableColumns = new Map(columns.filter(col => col.filterable !== false).map(col => [col.field, col]));
|
|
231
|
-
|
|
254
|
+
const matches = row => orFilterItems.some(item => {
|
|
232
255
|
const col = filterableColumns.get(item.field);
|
|
233
256
|
return col !== undefined && rowMatchesFilterItem(col, row, item);
|
|
234
|
-
})
|
|
235
|
-
|
|
257
|
+
});
|
|
258
|
+
return fullTree ? keepMatchesWithAncestors(rows, fullTree, keyOf, matches) : rows.filter(matches);
|
|
259
|
+
}, [columns, fullTree, keyOf, orFilterItems, rows]);
|
|
236
260
|
const allIds = useMemo(() => data.map(row => resolveRowId(row, getRowId)), [data, getRowId]);
|
|
261
|
+
const allRowIds = useMemo(() => rows.map(row => resolveRowId(row, getRowId)), [rows, getRowId]);
|
|
262
|
+
const tree = useMemo(() => {
|
|
263
|
+
if (!fullTree || !getTreeDataPath) {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
return data.length === rows.length ? fullTree : buildTreeIndex(data, getTreeDataPath, keyOf);
|
|
267
|
+
}, [data, fullTree, getTreeDataPath, keyOf, rows.length]);
|
|
237
268
|
const columnDefs = useMemo(() => {
|
|
238
269
|
const mapped = columns.map(col => {
|
|
239
270
|
const def = gridColDefToColumnDef(col);
|
|
@@ -242,12 +273,68 @@ export function useDataGridTable({
|
|
|
242
273
|
}
|
|
243
274
|
return def;
|
|
244
275
|
});
|
|
245
|
-
return checkboxSelection ? [createSelectColumn(), ...
|
|
246
|
-
}, [checkboxSelection, columns, disableColumnSorting]);
|
|
276
|
+
return [...(checkboxSelection && !treeData ? [createSelectColumn()] : []), ...(detailPanel ? [createDetailPanelToggleColumn()] : []), ...mapped];
|
|
277
|
+
}, [checkboxSelection, columns, detailPanel, disableColumnSorting, treeData]);
|
|
247
278
|
const sortingState = useMemo(() => sortModelToSortingState(sortModel), [sortModel]);
|
|
248
279
|
const paginationState = useMemo(() => paginationModelToState(paginationModel), [paginationModel]);
|
|
249
280
|
const columnFilterState = useMemo(() => orFilterItems ? [] : filterModelToColumnFilters(filterModel), [filterModel, orFilterItems]);
|
|
250
|
-
const rowSelectionState = useMemo(() => selectionModelToRowSelection(rowSelectionModel, allIds), [rowSelectionModel, allIds]);
|
|
281
|
+
const rowSelectionState = useMemo(() => selectionModelToRowSelection(rowSelectionModel, treeData ? allRowIds : allIds), [rowSelectionModel, treeData, allRowIds, allIds]);
|
|
282
|
+
const filterSignature = treeData && filterMode === 'client' && (quickFilter.trim().length > 0 || filterModel.some(isActiveFilterItem)) ? JSON.stringify([quickFilter, filterModel, filterLogicOperator]) : '';
|
|
283
|
+
const [userExpanded, setUserExpanded] = useState({});
|
|
284
|
+
const [filterExpansion, setFilterExpansion] = useState({
|
|
285
|
+
signature: '',
|
|
286
|
+
expanded: {}
|
|
287
|
+
});
|
|
288
|
+
const filterExpanded = filterSignature !== '' && filterExpansion.signature === filterSignature ? filterExpansion.expanded : EMPTY_FILTER_EXPANSION;
|
|
289
|
+
const expandedState = useMemo(() => {
|
|
290
|
+
if (!tree) {
|
|
291
|
+
return EMPTY_EXPANSION;
|
|
292
|
+
}
|
|
293
|
+
const isExpanded = key => {
|
|
294
|
+
if (filterSignature !== '') {
|
|
295
|
+
return filterExpanded[key] ?? true;
|
|
296
|
+
}
|
|
297
|
+
const own = userExpanded[key];
|
|
298
|
+
if (own !== undefined) {
|
|
299
|
+
return own;
|
|
300
|
+
}
|
|
301
|
+
const row = tree.rowOf.get(key);
|
|
302
|
+
const depth = fullTree?.depthOf.get(key) ?? tree.depthOf.get(key) ?? 0;
|
|
303
|
+
if (row !== undefined && isGroupExpandedByDefault) {
|
|
304
|
+
return isGroupExpandedByDefault({
|
|
305
|
+
id: resolveRowId(row, getRowId),
|
|
306
|
+
row,
|
|
307
|
+
depth
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
return defaultGroupingExpansionDepth === -1 || depth < defaultGroupingExpansionDepth;
|
|
311
|
+
};
|
|
312
|
+
const state = {};
|
|
313
|
+
for (const key of tree.childKeysOf.keys()) {
|
|
314
|
+
if (isExpanded(key)) {
|
|
315
|
+
state[key] = true;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return state;
|
|
319
|
+
}, [tree, fullTree, filterSignature, filterExpanded, userExpanded, isGroupExpandedByDefault, defaultGroupingExpansionDepth, getRowId]);
|
|
320
|
+
const isRowExpanded = key => key in expandedState;
|
|
321
|
+
const toggleRowExpanded = key => {
|
|
322
|
+
const next = !isRowExpanded(key);
|
|
323
|
+
if (filterSignature !== '') {
|
|
324
|
+
setFilterExpansion(previous => ({
|
|
325
|
+
signature: filterSignature,
|
|
326
|
+
expanded: {
|
|
327
|
+
...(previous.signature === filterSignature ? previous.expanded : {}),
|
|
328
|
+
[key]: next
|
|
329
|
+
}
|
|
330
|
+
}));
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
setUserExpanded(previous => ({
|
|
334
|
+
...previous,
|
|
335
|
+
[key]: next
|
|
336
|
+
}));
|
|
337
|
+
};
|
|
251
338
|
const resetPaginationPage = () => {
|
|
252
339
|
if (paginationModel.page !== 0) {
|
|
253
340
|
onPaginationModelChange({
|
|
@@ -274,8 +361,11 @@ export function useDataGridTable({
|
|
|
274
361
|
const table = useTable({
|
|
275
362
|
features,
|
|
276
363
|
columns: columnDefs,
|
|
277
|
-
data,
|
|
278
|
-
getRowId: row =>
|
|
364
|
+
data: tree ? tree.roots : data,
|
|
365
|
+
getRowId: row => keyOf(row),
|
|
366
|
+
getSubRows: tree ? row => tree.childrenOf.get(row) : undefined,
|
|
367
|
+
filterFromLeafRows: treeData,
|
|
368
|
+
paginateExpandedRows: false,
|
|
279
369
|
enableMultiSort: false,
|
|
280
370
|
enableMultiRowSelection: true,
|
|
281
371
|
globalFilterFn: gridGlobalFilterFn,
|
|
@@ -290,7 +380,9 @@ export function useDataGridTable({
|
|
|
290
380
|
columnFilters: columnFilterState,
|
|
291
381
|
globalFilter: quickFilter,
|
|
292
382
|
rowSelection: rowSelectionState,
|
|
293
|
-
columnPinning
|
|
383
|
+
columnPinning,
|
|
384
|
+
columnVisibility,
|
|
385
|
+
expanded: expandedState
|
|
294
386
|
},
|
|
295
387
|
onSortingChange: updater => {
|
|
296
388
|
const next = applyUpdater(updater, sortingState);
|
|
@@ -319,11 +411,50 @@ export function useDataGridTable({
|
|
|
319
411
|
onFilterModelChange(model);
|
|
320
412
|
resetPaginationPage();
|
|
321
413
|
};
|
|
414
|
+
const treeSelection = useMemo(() => {
|
|
415
|
+
if (!fullTree) {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
const selectedKeys = new Set(Object.keys(rowSelectionState));
|
|
419
|
+
return {
|
|
420
|
+
selectedKeys,
|
|
421
|
+
statuses: computeTreeSelection(fullTree, selectedKeys, propagateParents)
|
|
422
|
+
};
|
|
423
|
+
}, [fullTree, propagateParents, rowSelectionState]);
|
|
424
|
+
let treeState;
|
|
425
|
+
if (fullTree && treeSelection) {
|
|
426
|
+
const {
|
|
427
|
+
selectedKeys,
|
|
428
|
+
statuses
|
|
429
|
+
} = treeSelection;
|
|
430
|
+
const selectionStatus = key => statuses.get(key) ?? 'none';
|
|
431
|
+
const commit = scope => {
|
|
432
|
+
const value = !scope.units.every(key => selectionStatus(key) === 'all');
|
|
433
|
+
const next = applyTreeSelection(fullTree, selectedKeys, scope.targets, value, propagateParents);
|
|
434
|
+
onRowSelectionModelChange(rowSelectionToModel(Object.fromEntries([...next].map(key => [key, true])), rowSelectionModel, allRowIds));
|
|
435
|
+
};
|
|
436
|
+
const filtered = table.getFilteredRowModel();
|
|
437
|
+
const headerScope = propagateDescendants ? selectionScope(filtered.rows, fullTree, true) : selectionScope(filtered.flatRows, fullTree, false);
|
|
438
|
+
const selectedUnits = headerScope.units.filter(key => selectionStatus(key) !== 'none');
|
|
439
|
+
const allUnitsSelected = headerScope.units.length > 0 && headerScope.units.every(key => selectionStatus(key) === 'all');
|
|
440
|
+
treeState = {
|
|
441
|
+
isRowExpanded,
|
|
442
|
+
toggleRowExpanded,
|
|
443
|
+
selectionStatus,
|
|
444
|
+
toggleRowSelected: row => commit(selectionScope([row], fullTree, propagateDescendants)),
|
|
445
|
+
toggleAllRowsSelected: () => commit(headerScope),
|
|
446
|
+
headerSelection: {
|
|
447
|
+
checked: allUnitsSelected,
|
|
448
|
+
indeterminate: !allUnitsSelected && selectedUnits.length > 0
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
}
|
|
322
452
|
return {
|
|
323
453
|
table,
|
|
324
454
|
setQuickFilter,
|
|
325
455
|
setColumnFilter,
|
|
326
|
-
setFilterModel
|
|
456
|
+
setFilterModel,
|
|
457
|
+
tree: treeState
|
|
327
458
|
};
|
|
328
459
|
}
|
|
329
460
|
//# sourceMappingURL=useDataGridTable.js.map
|