@mui/x-data-grid-pro 8.27.3 → 8.27.4

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,62 @@
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.27.4
9
+
10
+ _Mar 5, 2026_
11
+
12
+ We'd like to extend a big thank you to the 6 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🐞 Bugfixes
15
+ - 🌎 Improve Ukrainian (uk-UA) locale
16
+
17
+ Special thanks go out to this community member for their valuable contribution:
18
+ @lion1963
19
+
20
+ The following team members contributed to this release:
21
+ @arminmeh, @brijeshb42, @dav-is, @JCQuintas, @sai6855
22
+
23
+ ### Data Grid
24
+
25
+ #### `@mui/x-data-grid@8.27.4`
26
+
27
+ - [DataGrid] Prevent unnecessary row selection checkbox rerendering (#21571) @arminmeh
28
+ - [DataGrid] Make `GridScrollArea` overrides resolver dynamic (#21612) @sai6855
29
+ - [l10n] Improve Ukrainian (uk-UA) locale (#21381) @lion1963
30
+
31
+ #### `@mui/x-data-grid-pro@8.27.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
32
+
33
+ Same changes as in `@mui/x-data-grid@8.27.4`, plus:
34
+
35
+ - [DataGridPro] Use `getRowId` prop to calculate the tree data row update (#21544) @arminmeh
36
+
37
+ #### `@mui/x-data-grid-premium@8.27.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
38
+
39
+ Same changes as in `@mui/x-data-grid-pro@8.27.4`.
40
+
41
+ ### Charts
42
+
43
+ #### `@mui/x-charts@8.27.4`
44
+
45
+ - [charts] Deprecate `ChartDataProvider` in favour of `ChartsDataProvider` (#21549) @JCQuintas
46
+ - [charts] Rename `ChartContainer` to `ChartsContainer` (#21186) @JCQuintas
47
+ - [charts] Rename `ChartZoomSlider` to `ChartsZoomSlider` (#21572) @JCQuintas
48
+
49
+ #### `@mui/x-charts-pro@8.27.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
50
+
51
+ Same changes as in `@mui/x-charts@8.27.4`.
52
+
53
+ #### `@mui/x-charts-premium@8.27.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
54
+
55
+ Same changes as in `@mui/x-charts-pro@8.27.4`.
56
+
57
+ ### Core
58
+
59
+ - [code-infra] Add eslint rule to prevent `Math.random` in docs (#21505) (#21563) @JCQuintas
60
+ - [code-infra] V8 Dedupe (#21561) @JCQuintas
61
+ - [docs-infra] Apply Cookie Banner to v8.x Branch (#21448) @dav-is
62
+ - [code-infra] Setup checkout to do full clone for non master branches (#21624) @brijeshb42
63
+
8
64
  ## 8.27.3
9
65
 
10
66
  _Feb 25, 2026_
@@ -34,7 +34,7 @@ const configuration = {
34
34
  useFilterValueGetter: apiRef => apiRef.current.getRowValue
35
35
  }
36
36
  };
37
- const releaseInfo = "MTc3MTk3NzYwMDAwMA==";
37
+ const releaseInfo = "MTc3MjY2ODgwMDAwMA==";
38
38
  const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
39
39
  packageName: "x-data-grid-pro",
40
40
  releaseInfo: releaseInfo
@@ -27,7 +27,7 @@ const configuration = {
27
27
  useFilterValueGetter: apiRef => apiRef.current.getRowValue
28
28
  }
29
29
  };
30
- const releaseInfo = "MTc3MTk3NzYwMDAwMA==";
30
+ const releaseInfo = "MTc3MjY2ODgwMDAwMA==";
31
31
  const watermark = /*#__PURE__*/_jsx(Watermark, {
32
32
  packageName: "x-data-grid-pro",
33
33
  releaseInfo: releaseInfo
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
5
  import { isDeepEqual } from '@mui/x-internals/isDeepEqual';
6
6
  import useLazyRef from '@mui/utils/useLazyRef';
7
- import { useGridSelector, GridGetRowsError, gridRowIdSelector, gridRowNodeSelector, gridRowTreeSelector, GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
7
+ import { useGridSelector, GridGetRowsError, gridRowIdSelector, gridRowNodeSelector, gridRowTreeSelector, GRID_ROOT_GROUP_ID, gridRowsLookupSelector } from '@mui/x-data-grid';
8
8
  import { gridRowGroupsToFetchSelector, useGridDataSourceBase, CacheChunkManager, gridGetRowsParamsSelector, DataSourceRowsUpdateStrategy, GridStrategyGroup, getTreeNodeDescendants } from '@mui/x-data-grid/internals';
9
9
  import { warnOnce } from '@mui/x-internals/warning';
10
10
  import { NestedDataManager, RequestStatus, getGroupKeys } from "./utils.js";
@@ -56,6 +56,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
56
56
  const onDataSourceErrorProp = props.onDataSourceError;
57
57
  const replaceGroupRows = React.useCallback((groupId, groupPath, rows) => {
58
58
  const tree = gridRowTreeSelector(apiRef);
59
+ const rowsLookup = gridRowsLookupSelector(apiRef);
59
60
  const fetchedRowIds = new Set(rows.map(row => gridRowIdSelector(apiRef, row)));
60
61
  const currentGroupRows = getTreeNodeDescendants(tree, groupId, false, true);
61
62
  const rowsToDelete = [];
@@ -69,15 +70,13 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
69
70
  if (fetchedRowIds.has(descendantId)) {
70
71
  continue;
71
72
  }
72
- rowsToDelete.push({
73
- id: descendantId,
73
+ rowsToDelete.push(_extends({}, rowsLookup[descendantId], {
74
74
  _action: 'delete'
75
- });
75
+ }));
76
76
  }
77
- rowsToDelete.push({
78
- id: rowId,
77
+ rowsToDelete.push(_extends({}, rowsLookup[rowId], {
79
78
  _action: 'delete'
80
- });
79
+ }));
81
80
  });
82
81
  if (rowsToDelete.length > 0) {
83
82
  apiRef.current.updateNestedRows(rowsToDelete, groupPath);
@@ -200,6 +199,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
200
199
  });
201
200
  }, [apiRef]);
202
201
  const removeChildrenRows = React.useCallback(parentId => {
202
+ const rowsLookup = gridRowsLookupSelector(apiRef);
203
203
  const rowNode = gridRowNodeSelector(apiRef, parentId);
204
204
  if (!rowNode || rowNode.type !== 'group' || rowNode.children.length === 0) {
205
205
  return;
@@ -213,10 +213,9 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
213
213
  if (node.type === 'group' && node.children.length > 0) {
214
214
  node.children.forEach(traverse);
215
215
  }
216
- removedRows.push({
217
- id: nodeId,
216
+ removedRows.push(_extends({}, rowsLookup[nodeId], {
218
217
  _action: 'delete'
219
- });
218
+ }));
220
219
  };
221
220
  rowNode.children.forEach(traverse);
222
221
  if (removedRows.length > 0) {
@@ -241,6 +240,7 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
241
240
  apiRef.current.setRows(response.rows);
242
241
  } else {
243
242
  const tree = gridRowTreeSelector(apiRef);
243
+ const rowsLookup = gridRowsLookupSelector(apiRef);
244
244
  // Remove existing outdated rows before setting the new ones
245
245
  // Create a set of the current root rows
246
246
  const parentRowsToDelete = new Set(getTreeNodeDescendants(tree, GRID_ROOT_GROUP_ID, false, true));
@@ -254,15 +254,13 @@ export const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
254
254
  const descendants = getTreeNodeDescendants(tree, parentRowId, false, false);
255
255
  for (let i = descendants.length - 1; i >= 0; i -= 1) {
256
256
  // delete deepest descendants first
257
- rowsToDelete.push({
258
- id: descendants[i],
257
+ rowsToDelete.push(_extends({}, rowsLookup[descendants[i]], {
259
258
  _action: 'delete'
260
- });
259
+ }));
261
260
  }
262
- rowsToDelete.push({
263
- id: parentRowId,
261
+ rowsToDelete.push(_extends({}, rowsLookup[parentRowId], {
264
262
  _action: 'delete'
265
- });
263
+ }));
266
264
  });
267
265
  }
268
266
  apiRef.current.updateRows(response.rows.concat(rowsToDelete));
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v8.27.3
2
+ * @mui/x-data-grid-pro v8.27.4
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
@@ -63,6 +63,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
63
63
  const onDataSourceErrorProp = props.onDataSourceError;
64
64
  const replaceGroupRows = React.useCallback((groupId, groupPath, rows) => {
65
65
  const tree = (0, _xDataGrid.gridRowTreeSelector)(apiRef);
66
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
66
67
  const fetchedRowIds = new Set(rows.map(row => (0, _xDataGrid.gridRowIdSelector)(apiRef, row)));
67
68
  const currentGroupRows = (0, _internals.getTreeNodeDescendants)(tree, groupId, false, true);
68
69
  const rowsToDelete = [];
@@ -76,15 +77,13 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
76
77
  if (fetchedRowIds.has(descendantId)) {
77
78
  continue;
78
79
  }
79
- rowsToDelete.push({
80
- id: descendantId,
80
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[descendantId], {
81
81
  _action: 'delete'
82
- });
82
+ }));
83
83
  }
84
- rowsToDelete.push({
85
- id: rowId,
84
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[rowId], {
86
85
  _action: 'delete'
87
- });
86
+ }));
88
87
  });
89
88
  if (rowsToDelete.length > 0) {
90
89
  apiRef.current.updateNestedRows(rowsToDelete, groupPath);
@@ -207,6 +206,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
207
206
  });
208
207
  }, [apiRef]);
209
208
  const removeChildrenRows = React.useCallback(parentId => {
209
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
210
210
  const rowNode = (0, _xDataGrid.gridRowNodeSelector)(apiRef, parentId);
211
211
  if (!rowNode || rowNode.type !== 'group' || rowNode.children.length === 0) {
212
212
  return;
@@ -220,10 +220,9 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
220
220
  if (node.type === 'group' && node.children.length > 0) {
221
221
  node.children.forEach(traverse);
222
222
  }
223
- removedRows.push({
224
- id: nodeId,
223
+ removedRows.push((0, _extends2.default)({}, rowsLookup[nodeId], {
225
224
  _action: 'delete'
226
- });
225
+ }));
227
226
  };
228
227
  rowNode.children.forEach(traverse);
229
228
  if (removedRows.length > 0) {
@@ -248,6 +247,7 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
248
247
  apiRef.current.setRows(response.rows);
249
248
  } else {
250
249
  const tree = (0, _xDataGrid.gridRowTreeSelector)(apiRef);
250
+ const rowsLookup = (0, _xDataGrid.gridRowsLookupSelector)(apiRef);
251
251
  // Remove existing outdated rows before setting the new ones
252
252
  // Create a set of the current root rows
253
253
  const parentRowsToDelete = new Set((0, _internals.getTreeNodeDescendants)(tree, _xDataGrid.GRID_ROOT_GROUP_ID, false, true));
@@ -261,15 +261,13 @@ const useGridDataSourceBasePro = (apiRef, props, options = {}) => {
261
261
  const descendants = (0, _internals.getTreeNodeDescendants)(tree, parentRowId, false, false);
262
262
  for (let i = descendants.length - 1; i >= 0; i -= 1) {
263
263
  // delete deepest descendants first
264
- rowsToDelete.push({
265
- id: descendants[i],
264
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[descendants[i]], {
266
265
  _action: 'delete'
267
- });
266
+ }));
268
267
  }
269
- rowsToDelete.push({
270
- id: parentRowId,
268
+ rowsToDelete.push((0, _extends2.default)({}, rowsLookup[parentRowId], {
271
269
  _action: 'delete'
272
- });
270
+ }));
273
271
  });
274
272
  }
275
273
  apiRef.current.updateRows(response.rows.concat(rowsToDelete));
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v8.27.3
2
+ * @mui/x-data-grid-pro v8.27.4
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-pro",
3
- "version": "8.27.3",
3
+ "version": "8.27.4",
4
4
  "author": "MUI Team",
5
5
  "description": "The Pro plan edition of the MUI X Data Grid components.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -37,9 +37,9 @@
37
37
  "@mui/utils": "^7.3.5",
38
38
  "clsx": "^2.1.1",
39
39
  "prop-types": "^15.8.1",
40
- "@mui/x-data-grid": "8.27.3",
41
40
  "@mui/x-internals": "8.26.0",
42
- "@mui/x-license": "8.26.0"
41
+ "@mui/x-license": "8.26.0",
42
+ "@mui/x-data-grid": "8.27.4"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",