@mui/x-data-grid 8.28.2 → 8.28.6
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/CHANGELOG.md +186 -0
- package/esm/hooks/features/filter/gridFilterSelector.js +2 -1
- package/esm/hooks/features/rowSelection/useGridRowSelection.js +17 -1
- package/esm/hooks/features/rows/gridRowsUtils.js +3 -1
- package/esm/index.js +1 -1
- package/hooks/features/filter/gridFilterSelector.js +2 -1
- package/hooks/features/rowSelection/useGridRowSelection.js +17 -1
- package/hooks/features/rows/gridRowsUtils.js +3 -1
- package/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,192 @@
|
|
|
5
5
|
All notable changes to this project will be documented in this file.
|
|
6
6
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
7
7
|
|
|
8
|
+
## 8.28.6
|
|
9
|
+
|
|
10
|
+
_May 13, 2026_
|
|
11
|
+
|
|
12
|
+
We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:
|
|
13
|
+
|
|
14
|
+
- 🐞 Bugfixes
|
|
15
|
+
|
|
16
|
+
The following team members contributed to this release:
|
|
17
|
+
@LukasTy, @MBilalShafi
|
|
18
|
+
|
|
19
|
+
### Data Grid
|
|
20
|
+
|
|
21
|
+
#### `@mui/x-data-grid@8.28.6`
|
|
22
|
+
|
|
23
|
+
Internal changes.
|
|
24
|
+
|
|
25
|
+
#### `@mui/x-data-grid-pro@8.28.6` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
26
|
+
|
|
27
|
+
Same changes as in `@mui/x-data-grid@8.28.6`, plus:
|
|
28
|
+
|
|
29
|
+
- [DataGridPro] Preserve parent selection for non-selectable children (@MBilalShafi) (#22013)
|
|
30
|
+
|
|
31
|
+
#### `@mui/x-data-grid-premium@8.28.6` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
32
|
+
|
|
33
|
+
Same changes as in `@mui/x-data-grid-pro@8.28.6`.
|
|
34
|
+
|
|
35
|
+
### Docs
|
|
36
|
+
|
|
37
|
+
- [docs] Replace broken CodeSandbox iframes in migration guides (#22380) @LukasTy
|
|
38
|
+
|
|
39
|
+
## 8.28.5
|
|
40
|
+
|
|
41
|
+
_May 8, 2026_
|
|
42
|
+
|
|
43
|
+
We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:
|
|
44
|
+
|
|
45
|
+
- 🐞 Bugfixes
|
|
46
|
+
|
|
47
|
+
The following team members contributed to this release:
|
|
48
|
+
@LukasTy, @MBilalShafi
|
|
49
|
+
|
|
50
|
+
### Data Grid
|
|
51
|
+
|
|
52
|
+
#### `@mui/x-data-grid@8.28.5`
|
|
53
|
+
|
|
54
|
+
- [DataGrid] Fix active filter detection for array values (#22357) @MBilalShafi
|
|
55
|
+
- [DataGrid] Fix crash when grouping/tree-data values match `Object.prototype` property names (#22343) @LukasTy
|
|
56
|
+
|
|
57
|
+
#### `@mui/x-data-grid-pro@8.28.5` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
58
|
+
|
|
59
|
+
Same changes as in `@mui/x-data-grid@8.28.5`.
|
|
60
|
+
|
|
61
|
+
#### `@mui/x-data-grid-premium@8.28.5` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
62
|
+
|
|
63
|
+
Same changes as in `@mui/x-data-grid-pro@8.28.5`.
|
|
64
|
+
|
|
65
|
+
### Date and Time Pickers
|
|
66
|
+
|
|
67
|
+
#### `@mui/x-date-pickers@8.28.5`
|
|
68
|
+
|
|
69
|
+
- [pickers] Fix duplicate hour label in `MultiSectionDigitalClock` on DST day (#22350) @LukasTy
|
|
70
|
+
|
|
71
|
+
#### `@mui/x-date-pickers-pro@8.28.5` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
72
|
+
|
|
73
|
+
Same changes as in `@mui/x-date-pickers@8.28.5`.
|
|
74
|
+
|
|
75
|
+
### Tree View
|
|
76
|
+
|
|
77
|
+
#### `@mui/x-tree-view@8.28.5`
|
|
78
|
+
|
|
79
|
+
- [tree view] Fix stale Tree View `apiRef` after keyed remount (#22355) @MBilalShafi
|
|
80
|
+
|
|
81
|
+
#### `@mui/x-tree-view-pro@8.28.5` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
82
|
+
|
|
83
|
+
Same changes as in `@mui/x-tree-view@8.28.5`.
|
|
84
|
+
|
|
85
|
+
### Core
|
|
86
|
+
|
|
87
|
+
- [code-infra] Fix broken `valelint` and docs build (#22362) @LukasTy
|
|
88
|
+
|
|
89
|
+
## 8.28.4
|
|
90
|
+
|
|
91
|
+
_Apr 27, 2026_
|
|
92
|
+
|
|
93
|
+
We'd like to extend a big thank you to the 3 contributors who made this release possible. Here are some highlights ✨:
|
|
94
|
+
|
|
95
|
+
- 🐞 Bugfixes
|
|
96
|
+
|
|
97
|
+
Special thanks go out to these community members for their valuable contributions:
|
|
98
|
+
@supunsathsara
|
|
99
|
+
|
|
100
|
+
The following team members contributed to this release:
|
|
101
|
+
@LukasTy, @michelengelen
|
|
102
|
+
|
|
103
|
+
### Date and Time Pickers
|
|
104
|
+
|
|
105
|
+
#### `@mui/x-date-pickers@8.28.4`
|
|
106
|
+
|
|
107
|
+
- [pickers] Fix `DateRangeCalendar` drag with `AdapterDayjs` plain-constructor values (#22170) @LukasTy
|
|
108
|
+
- [pickers] Fix disabled state not overriding error border color (#22186) @supunsathsara
|
|
109
|
+
- [pickers] Use `convertToMeridiem` utility in `transferDateSectionValue` (#22132) @michelengelen
|
|
110
|
+
|
|
111
|
+
#### `@mui/x-date-pickers-pro@8.28.4` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
112
|
+
|
|
113
|
+
Same changes as in `@mui/x-date-pickers@8.28.4`.
|
|
114
|
+
|
|
115
|
+
### Docs
|
|
116
|
+
|
|
117
|
+
- [docs] Remove obsolete v7 deprecation warning for `dayOfWeekFormatter` (#22120) @LukasTy
|
|
118
|
+
- [docs] Use mui.com for broken links checker known targets (#22171) @LukasTy
|
|
119
|
+
|
|
120
|
+
## 8.28.3
|
|
121
|
+
|
|
122
|
+
_Apr 15, 2026_
|
|
123
|
+
|
|
124
|
+
We'd like to extend a big thank you to the 6 contributors who made this release possible. Here are some highlights ✨:
|
|
125
|
+
|
|
126
|
+
- 🐞 Bugfixes
|
|
127
|
+
|
|
128
|
+
Special thanks go out to this community member for their valuable contribution:
|
|
129
|
+
@nk10nikhil
|
|
130
|
+
|
|
131
|
+
The following team members contributed to this release:
|
|
132
|
+
@flaviendelangle, @LukasTy, @MBilalShafi, @michelengelen, @sai6855
|
|
133
|
+
|
|
134
|
+
### Data Grid
|
|
135
|
+
|
|
136
|
+
#### `@mui/x-data-grid@8.28.2`
|
|
137
|
+
|
|
138
|
+
Internal changes.
|
|
139
|
+
|
|
140
|
+
#### `@mui/x-data-grid-pro@8.28.2` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
141
|
+
|
|
142
|
+
Same changes as in `@mui/x-data-grid@8.28.2`, plus:
|
|
143
|
+
|
|
144
|
+
- [DataGridPro] Improve trigger for nested row reordering (#21996) @MBilalShafi
|
|
145
|
+
|
|
146
|
+
#### `@mui/x-data-grid-premium@8.28.2` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
147
|
+
|
|
148
|
+
Same changes as in `@mui/x-data-grid-pro@8.28.2`.
|
|
149
|
+
|
|
150
|
+
### Date and Time Pickers
|
|
151
|
+
|
|
152
|
+
#### `@mui/x-date-pickers@8.28.3`
|
|
153
|
+
|
|
154
|
+
- [pickers] Ensure correct `display` property on Day component (#21980) @LukasTy
|
|
155
|
+
|
|
156
|
+
#### `@mui/x-date-pickers-pro@8.28.3` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
157
|
+
|
|
158
|
+
Same changes as in `@mui/x-date-pickers@8.28.3`.
|
|
159
|
+
|
|
160
|
+
### Charts
|
|
161
|
+
|
|
162
|
+
#### `@mui/x-charts@8.28.2`
|
|
163
|
+
|
|
164
|
+
- [charts] Add missing export for `ChartsBrushOverlay` (#21993) (#22008) @nk10nikhil
|
|
165
|
+
|
|
166
|
+
#### `@mui/x-charts-pro@8.28.2` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
167
|
+
|
|
168
|
+
Same changes as in `@mui/x-charts@8.28.2`.
|
|
169
|
+
|
|
170
|
+
#### `@mui/x-charts-premium@8.28.2` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
171
|
+
|
|
172
|
+
Same changes as in `@mui/x-charts-pro@8.28.2`.
|
|
173
|
+
|
|
174
|
+
### Tree View
|
|
175
|
+
|
|
176
|
+
#### `@mui/x-tree-view@8.28.3`
|
|
177
|
+
|
|
178
|
+
- [tree view] Move `lazyLoadedItems` initialization to state initializer (#22087) @michelengelen
|
|
179
|
+
|
|
180
|
+
#### `@mui/x-tree-view-pro@8.28.3` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
181
|
+
|
|
182
|
+
Same changes as in `@mui/x-tree-view@8.28.3`, plus:
|
|
183
|
+
|
|
184
|
+
- [RichTreeViewPro] Allow to auto-expand lazy loaded items (#21957) @flaviendelangle
|
|
185
|
+
|
|
186
|
+
### Docs
|
|
187
|
+
|
|
188
|
+
- [docs] Fix `TreeDataFullExample` data grid demo crash (#22007) @sai6855
|
|
189
|
+
|
|
190
|
+
### Miscellaneous
|
|
191
|
+
|
|
192
|
+
- [core] Post v9 stable updates (#22035) @LukasTy
|
|
193
|
+
|
|
8
194
|
## 8.28.2
|
|
9
195
|
|
|
10
196
|
_Apr 1, 2026_
|
|
@@ -175,7 +175,8 @@ export const gridFilterActiveItemsSelector = createSelectorMemoized(gridFilterMo
|
|
|
175
175
|
if (!filterOperator) {
|
|
176
176
|
return false;
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
const hasFilterValue = Array.isArray(item.value) ? item.value.length > 0 : item.value != null && item.value?.toString() !== '';
|
|
179
|
+
return !filterOperator.InputComponent || hasFilterValue;
|
|
179
180
|
}));
|
|
180
181
|
/**
|
|
181
182
|
* @category Filtering
|
|
@@ -324,6 +324,21 @@ export const useGridRowSelection = (apiRef, props) => {
|
|
|
324
324
|
ids: new Set(currentSelection.ids)
|
|
325
325
|
};
|
|
326
326
|
const selectionManager = createRowSelectionManager(newSelectionModel);
|
|
327
|
+
const isOrHasSelectableDescendant = nodeId => {
|
|
328
|
+
const node = rowTree[nodeId];
|
|
329
|
+
if (!node) {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Only consider nodes that are present (not filtered out) when using client-side filtering.
|
|
334
|
+
if (props.filterMode !== 'server' && filteredRowsLookup[nodeId] === false) {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
if (node.type !== 'group') {
|
|
338
|
+
return Boolean(rowsLookup[nodeId]) && apiRef.current.isRowSelectable(nodeId);
|
|
339
|
+
}
|
|
340
|
+
return node.children.some(childId => isOrHasSelectableDescendant(childId));
|
|
341
|
+
};
|
|
327
342
|
let hasChanged = false;
|
|
328
343
|
for (const id of currentSelection.ids) {
|
|
329
344
|
if (isNonExistent(id)) {
|
|
@@ -346,7 +361,8 @@ export const useGridRowSelection = (apiRef, props) => {
|
|
|
346
361
|
continue;
|
|
347
362
|
}
|
|
348
363
|
// Keep previously selected tree data parents selected if all their children are filtered out
|
|
349
|
-
|
|
364
|
+
// or not selectable.
|
|
365
|
+
if (node.children.some(childId => filteredRowsLookup[childId] !== false && isOrHasSelectableDescendant(childId))) {
|
|
350
366
|
selectionManager.unselect(id);
|
|
351
367
|
hasChanged = true;
|
|
352
368
|
}
|
|
@@ -10,7 +10,9 @@ export const buildRootGroup = () => ({
|
|
|
10
10
|
groupingKey: null,
|
|
11
11
|
isAutoGenerated: true,
|
|
12
12
|
children: [],
|
|
13
|
-
|
|
13
|
+
// Prototype-less so user-supplied grouping values like `'constructor'`
|
|
14
|
+
// or `'__proto__'` cannot collide with `Object.prototype` properties.
|
|
15
|
+
childrenFromPath: Object.create(null),
|
|
14
16
|
childrenExpanded: true,
|
|
15
17
|
parent: null
|
|
16
18
|
});
|
package/esm/index.js
CHANGED
|
@@ -180,7 +180,8 @@ const gridFilterActiveItemsSelector = exports.gridFilterActiveItemsSelector = (0
|
|
|
180
180
|
if (!filterOperator) {
|
|
181
181
|
return false;
|
|
182
182
|
}
|
|
183
|
-
|
|
183
|
+
const hasFilterValue = Array.isArray(item.value) ? item.value.length > 0 : item.value != null && item.value?.toString() !== '';
|
|
184
|
+
return !filterOperator.InputComponent || hasFilterValue;
|
|
184
185
|
}));
|
|
185
186
|
/**
|
|
186
187
|
* @category Filtering
|
|
@@ -332,6 +332,21 @@ const useGridRowSelection = (apiRef, props) => {
|
|
|
332
332
|
ids: new Set(currentSelection.ids)
|
|
333
333
|
};
|
|
334
334
|
const selectionManager = (0, _gridRowSelectionManager.createRowSelectionManager)(newSelectionModel);
|
|
335
|
+
const isOrHasSelectableDescendant = nodeId => {
|
|
336
|
+
const node = rowTree[nodeId];
|
|
337
|
+
if (!node) {
|
|
338
|
+
return false;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Only consider nodes that are present (not filtered out) when using client-side filtering.
|
|
342
|
+
if (props.filterMode !== 'server' && filteredRowsLookup[nodeId] === false) {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
if (node.type !== 'group') {
|
|
346
|
+
return Boolean(rowsLookup[nodeId]) && apiRef.current.isRowSelectable(nodeId);
|
|
347
|
+
}
|
|
348
|
+
return node.children.some(childId => isOrHasSelectableDescendant(childId));
|
|
349
|
+
};
|
|
335
350
|
let hasChanged = false;
|
|
336
351
|
for (const id of currentSelection.ids) {
|
|
337
352
|
if (isNonExistent(id)) {
|
|
@@ -354,7 +369,8 @@ const useGridRowSelection = (apiRef, props) => {
|
|
|
354
369
|
continue;
|
|
355
370
|
}
|
|
356
371
|
// Keep previously selected tree data parents selected if all their children are filtered out
|
|
357
|
-
|
|
372
|
+
// or not selectable.
|
|
373
|
+
if (node.children.some(childId => filteredRowsLookup[childId] !== false && isOrHasSelectableDescendant(childId))) {
|
|
358
374
|
selectionManager.unselect(id);
|
|
359
375
|
hasChanged = true;
|
|
360
376
|
}
|
|
@@ -20,7 +20,9 @@ const buildRootGroup = () => ({
|
|
|
20
20
|
groupingKey: null,
|
|
21
21
|
isAutoGenerated: true,
|
|
22
22
|
children: [],
|
|
23
|
-
|
|
23
|
+
// Prototype-less so user-supplied grouping values like `'constructor'`
|
|
24
|
+
// or `'__proto__'` cannot collide with `Object.prototype` properties.
|
|
25
|
+
childrenFromPath: Object.create(null),
|
|
24
26
|
childrenExpanded: true,
|
|
25
27
|
parent: null
|
|
26
28
|
});
|
package/index.js
CHANGED