@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 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` [![pro](https://mui.com/r/x-pro-svg)](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` [![premium](https://mui.com/r/x-premium-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![premium](https://mui.com/r/x-premium-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![premium](https://mui.com/r/x-premium-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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` [![premium](https://mui.com/r/x-premium-svg)](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` [![pro](https://mui.com/r/x-pro-svg)](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
- return !filterOperator.InputComponent || item.value != null && item.value?.toString() !== '';
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
- if (!node.children.every(childId => filteredRowsLookup[childId] === false)) {
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
- childrenFromPath: {},
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.28.2
2
+ * @mui/x-data-grid v8.28.6
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -180,7 +180,8 @@ const gridFilterActiveItemsSelector = exports.gridFilterActiveItemsSelector = (0
180
180
  if (!filterOperator) {
181
181
  return false;
182
182
  }
183
- return !filterOperator.InputComponent || item.value != null && item.value?.toString() !== '';
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
- if (!node.children.every(childId => filteredRowsLookup[childId] === false)) {
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
- childrenFromPath: {},
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.28.2
2
+ * @mui/x-data-grid v8.28.6
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "8.28.2",
3
+ "version": "8.28.6",
4
4
  "author": "MUI Team",
5
5
  "description": "The Community plan edition of the MUI X Data Grid components.",
6
6
  "license": "MIT",