@mui/x-data-grid-pro 7.24.1 → 7.26.0

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/DataGridPro/DataGridPro.js +5 -4
  3. package/DataGridPro/useDataGridProComponent.js +2 -2
  4. package/components/GridDetailPanelToggleCell.js +10 -1
  5. package/components/GridPinnedRows.js +3 -4
  6. package/esm/DataGridPro/DataGridPro.js +5 -4
  7. package/esm/DataGridPro/useDataGridProComponent.js +2 -2
  8. package/esm/components/GridDetailPanelToggleCell.js +11 -2
  9. package/esm/components/GridPinnedRows.js +4 -5
  10. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -7
  11. package/esm/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
  12. package/esm/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +2 -9
  13. package/esm/hooks/features/dataSource/cache.js +1 -1
  14. package/esm/hooks/features/dataSource/useGridDataSource.js +6 -4
  15. package/esm/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
  16. package/esm/hooks/features/index.js +1 -1
  17. package/esm/hooks/features/infiniteLoader/useGridInfiniteLoader.js +5 -5
  18. package/esm/hooks/features/serverSideTreeData/utils.js +2 -3
  19. package/esm/utils/releaseInfo.js +1 -1
  20. package/esm/utils/tree/utils.js +1 -1
  21. package/hooks/features/columnHeaders/useGridColumnHeaders.js +6 -5
  22. package/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
  23. package/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +1 -8
  24. package/hooks/features/dataSource/cache.d.ts +1 -0
  25. package/hooks/features/dataSource/cache.js +1 -0
  26. package/hooks/features/dataSource/useGridDataSource.js +8 -6
  27. package/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
  28. package/hooks/features/index.d.ts +1 -1
  29. package/hooks/features/index.js +17 -11
  30. package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +3 -3
  31. package/hooks/features/serverSideTreeData/utils.d.ts +5 -5
  32. package/hooks/features/serverSideTreeData/utils.js +1 -2
  33. package/hooks/utils/useGridApiContext.d.ts +3 -1
  34. package/hooks/utils/useGridApiRef.d.ts +3 -1
  35. package/index.js +1 -1
  36. package/modern/DataGridPro/DataGridPro.js +5 -4
  37. package/modern/DataGridPro/useDataGridProComponent.js +2 -2
  38. package/modern/components/GridDetailPanelToggleCell.js +11 -2
  39. package/modern/components/GridPinnedRows.js +4 -5
  40. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -7
  41. package/modern/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
  42. package/modern/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +2 -9
  43. package/modern/hooks/features/dataSource/cache.js +1 -1
  44. package/modern/hooks/features/dataSource/useGridDataSource.js +6 -4
  45. package/modern/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
  46. package/modern/hooks/features/index.js +1 -1
  47. package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +5 -5
  48. package/modern/hooks/features/serverSideTreeData/utils.js +2 -3
  49. package/modern/index.js +1 -1
  50. package/modern/utils/releaseInfo.js +1 -1
  51. package/modern/utils/tree/utils.js +1 -1
  52. package/package.json +4 -4
  53. package/utils/releaseInfo.js +1 -1
  54. package/utils/tree/utils.d.ts +1 -1
  55. package/utils/tree/utils.js +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,154 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.26.0
7
+
8
+ _Feb 7, 2025_
9
+
10
+ We'd like to offer a big thanks to the 6 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - ⚡ Mount and resize performance improvements for the Data Grid
13
+ - 🐞 Bugfixes
14
+
15
+ Special thanks go out to the community contributors who have helped make this release possible:
16
+ @lauri865.
17
+ Following are all team members who have contributed to this release:
18
+ @arminmeh, @noraleonte, @LukasTy, @KenanYusuf, @flaviendelangle.
19
+
20
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
21
+
22
+ ### Data Grid
23
+
24
+ #### `@mui/x-data-grid@7.26.0`
25
+
26
+ - [DataGrid] Avoid `<GridRoot />` double-render pass on mount in SPA mode (#16480) @lauri865
27
+
28
+ #### `@mui/x-data-grid-pro@7.26.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
29
+
30
+ Same changes as in `@mui/x-data-grid@7.26.0`, plus:
31
+
32
+ - [DataGridPro] Fix the return type of `useGridApiContext()` for Pro and Premium packages on React < 19 (#16446) @arminmeh
33
+
34
+ #### `@mui/x-data-grid-premium@7.26.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
35
+
36
+ Same changes as in `@mui/x-data-grid-pro@7.26.0`, plus:
37
+
38
+ - [DataGridPremium] Fix "no rows" overlay not showing with active aggregation (#16468) @KenanYusuf
39
+
40
+ ### Date and Time Pickers
41
+
42
+ #### `@mui/x-date-pickers@7.26.0`
43
+
44
+ Internal changes.
45
+
46
+ #### `@mui/x-date-pickers-pro@7.26.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
47
+
48
+ Same changes as in `@mui/x-date-pickers@7.26.0`, plus:
49
+
50
+ - [DateRangePicker] Fix `currentMonthCalendarPosition` prop behavior on mobile (#16457) @LukasTy
51
+ - [DateRangePicker] Fix vertical alignment for multi input fields (#16490) @noraleonte
52
+
53
+ ### Charts
54
+
55
+ #### `@mui/x-charts@7.26.0`
56
+
57
+ Internal changes.
58
+
59
+ #### `@mui/x-charts-pro@7.26.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
60
+
61
+ Same changes as in `@mui/x-charts@7.26.0`.
62
+
63
+ ### Tree View
64
+
65
+ #### `@mui/x-tree-view@7.26.0`
66
+
67
+ Internal changes.
68
+
69
+ #### `@mui/x-tree-view-pro@7.26.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
70
+
71
+ Same changes as in `@mui/x-tree-view@7.26.0`.
72
+
73
+ ### Core
74
+
75
+ - [core] Fix corepack and pnpm installation in CircleCI (#16452) @flaviendelangle
76
+
77
+ ## 7.25.0
78
+
79
+ _Jan 31, 2025_
80
+
81
+ We'd like to offer a big thanks to the 5 contributors who made this release possible. Here are some highlights ✨:
82
+
83
+ - 🐞 Bugfixes
84
+
85
+ Special thanks go out to the community contributors who have helped make this release possible:
86
+ @k-rajat19, @lauri865.
87
+ Following are all team members who have contributed to this release:
88
+ @KenanYusuf, @MBilalShafi, @arminmeh.
89
+
90
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
91
+
92
+ ### Data Grid
93
+
94
+ #### `@mui/x-data-grid@7.25.0`
95
+
96
+ - [DataGrid] Fix `renderContext` calculation with scroll bounce / over-scroll (#16368) @lauri865
97
+ - [DataGrid] Refactor row state propagation (#16351) @lauri865
98
+ - [DataGrid] Add missing style overrides (#16272) (#16358) @KenanYusuf
99
+ - [DataGrid] Fix header filters keyboard navigation when there are no rows (#16369) @k-rajat19
100
+ - [DataGrid] Fix order of `onClick` prop on toolbar buttons (#16364) @KenanYusuf
101
+ - [DataGrid] Improve test coverage of server side data source (#15988) @MBilalShafi
102
+ - [DataGrid] Remove outdated warning (#16370) @MBilalShafi
103
+ - [DataGrid] Respect width of `iconContainer` during autosizing (#16409) @michelengelen
104
+
105
+ #### `@mui/x-data-grid-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
106
+
107
+ Same changes as in `@mui/x-data-grid@7.25.0`, plus:
108
+
109
+ - [DataGridPro] Fix the return type of `useGridApiRef` for Pro and Premium packages on React < 19 (#16348) @arminmeh
110
+ - [DataGridPro] Fetch new rows only once when multiple models are changed in one cycle (#16382) @arminmeh
111
+
112
+ #### `@mui/x-data-grid-premium@7.25.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
113
+
114
+ Same changes as in `@mui/x-data-grid-pro@7.25.0`.
115
+
116
+ ### Date and Time Pickers
117
+
118
+ #### `@mui/x-date-pickers@7.25.0`
119
+
120
+ Internal changes.
121
+
122
+ #### `@mui/x-date-pickers-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
123
+
124
+ Same changes as in `@mui/x-date-pickers@7.25.0`.
125
+
126
+ ### Charts
127
+
128
+ #### `@mui/x-charts@7.25.0`
129
+
130
+ Internal changes.
131
+
132
+ #### `@mui/x-charts-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
133
+
134
+ Same changes as in `@mui/x-charts@7.25.0`.
135
+
136
+ ### Tree View
137
+
138
+ #### `@mui/x-tree-view@7.25.0`
139
+
140
+ Internal changes.
141
+
142
+ #### `@mui/x-tree-view-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
143
+
144
+ Same changes as in `@mui/x-tree-view@7.25.0`.
145
+
146
+ ### Docs
147
+
148
+ - [docs] Improve release documentation (#16322) @MBilalShafi
149
+
150
+ ### Core
151
+
152
+ - [test] Fix flaky data source tests in DataGrid (#16382) @lauri865
153
+
6
154
  ## 7.24.1
7
155
 
8
156
  _Jan 24, 2025_
@@ -28,6 +28,10 @@ const configuration = {
28
28
  }
29
29
  };
30
30
  const releaseInfo = (0, _releaseInfo.getReleaseInfo)();
31
+ const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
32
+ packageName: "x-data-grid-pro",
33
+ releaseInfo: releaseInfo
34
+ });
31
35
  const DataGridProRaw = (0, _forwardRef.forwardRef)(function DataGridPro(inProps, ref) {
32
36
  const props = (0, _useDataGridProProps.useDataGridProProps)(inProps);
33
37
  const privateApiRef = (0, _useDataGridProComponent.useDataGridProComponent)(props.apiRef, props);
@@ -45,10 +49,7 @@ const DataGridProRaw = (0, _forwardRef.forwardRef)(function DataGridPro(inProps,
45
49
  sx: props.sx
46
50
  }, props.forwardedProps, props.slotProps?.root, {
47
51
  ref: ref,
48
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
49
- packageName: "x-data-grid-pro",
50
- releaseInfo: releaseInfo
51
- })
52
+ children: watermark
52
53
  }))
53
54
  });
54
55
  });
@@ -44,7 +44,6 @@ const useDataGridProComponent = (inputApiRef, props) => {
44
44
  /**
45
45
  * Register all state initializers here.
46
46
  */
47
- (0, _internals.useGridInitializeState)(_internals.dimensionsStateInitializer, apiRef, props);
48
47
  (0, _internals.useGridInitializeState)(_internals.headerFilteringStateInitializer, apiRef, props);
49
48
  (0, _internals.useGridInitializeState)(_internals.rowSelectionStateInitializer, apiRef, props);
50
49
  (0, _internals.useGridInitializeState)(_useGridDetailPanel.detailPanelStateInitializer, apiRef, props);
@@ -62,11 +61,12 @@ const useDataGridProComponent = (inputApiRef, props) => {
62
61
  (0, _internals.useGridInitializeState)(_internals.densityStateInitializer, apiRef, props);
63
62
  (0, _internals.useGridInitializeState)(_useGridColumnReorder.columnReorderStateInitializer, apiRef, props);
64
63
  (0, _internals.useGridInitializeState)(_internals.columnResizeStateInitializer, apiRef, props);
65
- (0, _internals.useGridInitializeState)(_internals.rowsMetaStateInitializer, apiRef, props);
66
64
  (0, _internals.useGridInitializeState)(_internals.columnMenuStateInitializer, apiRef, props);
67
65
  (0, _internals.useGridInitializeState)(_internals.columnGroupsStateInitializer, apiRef, props);
68
66
  (0, _internals.useGridInitializeState)(_internals.virtualizationStateInitializer, apiRef, props);
69
67
  (0, _internals.useGridInitializeState)(_useGridDataSource.dataSourceStateInitializer, apiRef, props);
68
+ (0, _internals.useGridInitializeState)(_internals.dimensionsStateInitializer, apiRef, props);
69
+ (0, _internals.useGridInitializeState)(_internals.rowsMetaStateInitializer, apiRef, props);
70
70
  (0, _internals.useGridInitializeState)(_internals.listViewStateInitializer, apiRef, props);
71
71
  (0, _internals.useGridHeaderFiltering)(apiRef, props);
72
72
  (0, _useGridTreeData.useGridTreeData)(apiRef, props);
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
13
13
  var _xDataGrid = require("@mui/x-data-grid");
14
+ var _internals = require("@mui/x-data-grid/internals");
14
15
  var _useGridRootProps = require("../hooks/utils/useGridRootProps");
15
16
  var _useGridApiContext = require("../hooks/utils/useGridApiContext");
16
17
  var _gridDetailPanelSelector = require("../hooks/features/detailPanel/gridDetailPanelSelector");
@@ -25,11 +26,19 @@ const useUtilityClasses = ownerState => {
25
26
  };
26
27
  return (0, _composeClasses.default)(slots, _xDataGrid.getDataGridUtilityClass, classes);
27
28
  };
29
+ const isExpandedSelector = (0, _internals.createSelectorV8)(_gridDetailPanelSelector.gridDetailPanelExpandedRowIdsSelector, (expandedRowIds, rowId) => {
30
+ return expandedRowIds.includes(rowId);
31
+ });
28
32
  function GridDetailPanelToggleCell(props) {
29
33
  const {
30
34
  id,
31
- value: isExpanded
35
+ row,
36
+ api
32
37
  } = props;
38
+ const rowId = api.getRowId(row);
39
+ const isExpanded = (0, _internals.useGridSelectorV8)({
40
+ current: api
41
+ }, isExpandedSelector, rowId);
33
42
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
34
43
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
35
44
  const ownerState = {
@@ -24,15 +24,14 @@ function GridPinnedRows({
24
24
  }) {
25
25
  const classes = useUtilityClasses();
26
26
  const apiRef = (0, _internals.useGridPrivateApiContext)();
27
- const renderContext = (0, _xDataGrid.useGridSelector)(apiRef, _internals.gridRenderContextSelector);
28
27
  const pinnedRowsData = (0, _xDataGrid.useGridSelector)(apiRef, _internals.gridPinnedRowsSelector);
29
28
  const rows = pinnedRowsData[position];
30
29
  const pinnedRenderContext = React.useMemo(() => ({
31
30
  firstRowIndex: 0,
32
31
  lastRowIndex: rows.length,
33
- firstColumnIndex: renderContext.firstColumnIndex,
34
- lastColumnIndex: renderContext.lastColumnIndex
35
- }), [rows, renderContext.firstColumnIndex, renderContext.lastColumnIndex]);
32
+ firstColumnIndex: -1,
33
+ lastColumnIndex: -1
34
+ }), [rows]);
36
35
  if (rows.length === 0) {
37
36
  return null;
38
37
  }
@@ -21,6 +21,10 @@ const configuration = {
21
21
  }
22
22
  };
23
23
  const releaseInfo = getReleaseInfo();
24
+ const watermark = /*#__PURE__*/_jsx(Watermark, {
25
+ packageName: "x-data-grid-pro",
26
+ releaseInfo: releaseInfo
27
+ });
24
28
  const DataGridProRaw = forwardRef(function DataGridPro(inProps, ref) {
25
29
  const props = useDataGridProProps(inProps);
26
30
  const privateApiRef = useDataGridProComponent(props.apiRef, props);
@@ -38,10 +42,7 @@ const DataGridProRaw = forwardRef(function DataGridPro(inProps, ref) {
38
42
  sx: props.sx
39
43
  }, props.forwardedProps, props.slotProps?.root, {
40
44
  ref: ref,
41
- children: /*#__PURE__*/_jsx(Watermark, {
42
- packageName: "x-data-grid-pro",
43
- releaseInfo: releaseInfo
44
- })
45
+ children: watermark
45
46
  }))
46
47
  });
47
48
  });
@@ -37,7 +37,6 @@ export const useDataGridProComponent = (inputApiRef, props) => {
37
37
  /**
38
38
  * Register all state initializers here.
39
39
  */
40
- useGridInitializeState(dimensionsStateInitializer, apiRef, props);
41
40
  useGridInitializeState(headerFilteringStateInitializer, apiRef, props);
42
41
  useGridInitializeState(rowSelectionStateInitializer, apiRef, props);
43
42
  useGridInitializeState(detailPanelStateInitializer, apiRef, props);
@@ -55,11 +54,12 @@ export const useDataGridProComponent = (inputApiRef, props) => {
55
54
  useGridInitializeState(densityStateInitializer, apiRef, props);
56
55
  useGridInitializeState(columnReorderStateInitializer, apiRef, props);
57
56
  useGridInitializeState(columnResizeStateInitializer, apiRef, props);
58
- useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
59
57
  useGridInitializeState(columnMenuStateInitializer, apiRef, props);
60
58
  useGridInitializeState(columnGroupsStateInitializer, apiRef, props);
61
59
  useGridInitializeState(virtualizationStateInitializer, apiRef, props);
62
60
  useGridInitializeState(dataSourceStateInitializer, apiRef, props);
61
+ useGridInitializeState(dimensionsStateInitializer, apiRef, props);
62
+ useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
63
63
  useGridInitializeState(listViewStateInitializer, apiRef, props);
64
64
  useGridHeaderFiltering(apiRef, props);
65
65
  useGridTreeData(apiRef, props);
@@ -3,9 +3,10 @@ import * as React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import composeClasses from '@mui/utils/composeClasses';
5
5
  import { getDataGridUtilityClass, useGridSelector } from '@mui/x-data-grid';
6
+ import { createSelectorV8, useGridSelectorV8 } from '@mui/x-data-grid/internals';
6
7
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
7
8
  import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
8
- import { gridDetailPanelExpandedRowsContentCacheSelector } from "../hooks/features/detailPanel/gridDetailPanelSelector.js";
9
+ import { gridDetailPanelExpandedRowIdsSelector, gridDetailPanelExpandedRowsContentCacheSelector } from "../hooks/features/detailPanel/gridDetailPanelSelector.js";
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
10
11
  const useUtilityClasses = ownerState => {
11
12
  const {
@@ -17,11 +18,19 @@ const useUtilityClasses = ownerState => {
17
18
  };
18
19
  return composeClasses(slots, getDataGridUtilityClass, classes);
19
20
  };
21
+ const isExpandedSelector = createSelectorV8(gridDetailPanelExpandedRowIdsSelector, (expandedRowIds, rowId) => {
22
+ return expandedRowIds.includes(rowId);
23
+ });
20
24
  function GridDetailPanelToggleCell(props) {
21
25
  const {
22
26
  id,
23
- value: isExpanded
27
+ row,
28
+ api
24
29
  } = props;
30
+ const rowId = api.getRowId(row);
31
+ const isExpanded = useGridSelectorV8({
32
+ current: api
33
+ }, isExpandedSelector, rowId);
25
34
  const rootProps = useGridRootProps();
26
35
  const apiRef = useGridApiContext();
27
36
  const ownerState = {
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import clsx from 'clsx';
3
3
  import composeClasses from '@mui/utils/composeClasses';
4
4
  import { getDataGridUtilityClass, gridClasses, useGridSelector } from '@mui/x-data-grid';
5
- import { gridPinnedRowsSelector, gridRenderContextSelector, useGridPrivateApiContext } from '@mui/x-data-grid/internals';
5
+ import { gridPinnedRowsSelector, useGridPrivateApiContext } from '@mui/x-data-grid/internals';
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  const useUtilityClasses = () => {
8
8
  const slots = {
@@ -16,15 +16,14 @@ export function GridPinnedRows({
16
16
  }) {
17
17
  const classes = useUtilityClasses();
18
18
  const apiRef = useGridPrivateApiContext();
19
- const renderContext = useGridSelector(apiRef, gridRenderContextSelector);
20
19
  const pinnedRowsData = useGridSelector(apiRef, gridPinnedRowsSelector);
21
20
  const rows = pinnedRowsData[position];
22
21
  const pinnedRenderContext = React.useMemo(() => ({
23
22
  firstRowIndex: 0,
24
23
  lastRowIndex: rows.length,
25
- firstColumnIndex: renderContext.firstColumnIndex,
26
- lastColumnIndex: renderContext.lastColumnIndex
27
- }), [rows, renderContext.firstColumnIndex, renderContext.lastColumnIndex]);
24
+ firstColumnIndex: -1,
25
+ lastColumnIndex: -1
26
+ }), [rows]);
28
27
  if (rows.length === 0) {
29
28
  return null;
30
29
  }
@@ -2,8 +2,8 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  const _excluded = ["getColumnsToRender", "getPinnedCellOffset", "renderContext", "leftRenderContext", "rightRenderContext", "pinnedColumns", "visibleColumns", "columnPositions"];
4
4
  import * as React from 'react';
5
- import { gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, gridTabIndexColumnHeaderFilterSelector, getDataGridUtilityClass, gridDimensionsSelector } from '@mui/x-data-grid';
6
- import { useGridColumnHeaders as useGridColumnHeadersCommunity, useGridPrivateApiContext, getGridFilter, GridColumnHeaderRow, shouldCellShowLeftBorder, shouldCellShowRightBorder, PinnedColumnPosition } from '@mui/x-data-grid/internals';
5
+ import { gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, gridTabIndexColumnHeaderFilterSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
6
+ import { gridColumnsTotalWidthSelector, gridHasFillerSelector, gridHeaderFilterHeightSelector, gridVerticalScrollbarWidthSelector, useGridColumnHeaders as useGridColumnHeadersCommunity, useGridPrivateApiContext, getGridFilter, GridColumnHeaderRow, shouldCellShowLeftBorder, shouldCellShowRightBorder, PinnedColumnPosition } from '@mui/x-data-grid/internals';
7
7
  import composeClasses from '@mui/utils/composeClasses';
8
8
  import { useGridRootProps } from "../../utils/useGridRootProps.js";
9
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -48,9 +48,11 @@ export const useGridColumnHeaders = props => {
48
48
  const rootProps = useGridRootProps();
49
49
  const classes = useUtilityClasses(rootProps);
50
50
  const disableHeaderFiltering = !rootProps.headerFilters;
51
- const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
52
51
  const filterModel = useGridSelector(apiRef, gridFilterModelSelector);
53
- const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
52
+ const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
53
+ const gridHasFiller = useGridSelector(apiRef, gridHasFillerSelector);
54
+ const headerFilterHeight = useGridSelector(apiRef, gridHeaderFilterHeightSelector);
55
+ const scrollbarWidth = useGridSelector(apiRef, gridVerticalScrollbarWidthSelector);
54
56
  const columnHeaderFilterFocus = useGridSelector(apiRef, gridFocusColumnHeaderFilterSelector);
55
57
  const getFilterItem = React.useCallback(colDef => {
56
58
  const filterModelItem = filterModel?.items.find(it => it.field === colDef.field && it.operator !== 'isAnyOf');
@@ -87,15 +89,14 @@ export const useGridColumnHeaders = props => {
87
89
  }) : colDef.headerClassName;
88
90
  const item = getFilterItem(colDef);
89
91
  const pinnedPosition = params?.position;
90
- const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
91
- const pinnedOffset = getPinnedCellOffset(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
92
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, columnsTotalWidth, scrollbarWidth);
92
93
  const indexInSection = i;
93
94
  const sectionLength = renderedColumns.length;
94
95
  const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
95
96
  const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
96
97
  filters.push(/*#__PURE__*/_jsx(rootProps.slots.headerFilterCell, _extends({
97
98
  colIndex: columnIndex,
98
- height: dimensions.headerFilterHeight,
99
+ height: headerFilterHeight,
99
100
  width: colDef.computedWidth,
100
101
  colDef: colDef,
101
102
  hasFocus: hasFocus,
@@ -140,7 +140,7 @@ export const useGridColumnPinning = (apiRef, props) => {
140
140
  }, [apiRef]);
141
141
  const setPinnedColumns = React.useCallback(newPinnedColumns => {
142
142
  setState(apiRef, newPinnedColumns);
143
- apiRef.current.forceUpdate();
143
+ apiRef.current.requestPipeProcessorsApplication('hydrateColumns');
144
144
  }, [apiRef]);
145
145
  const isColumnPinned = React.useCallback(field => {
146
146
  const leftPinnedColumns = pinnedColumns.left || [];
@@ -1,19 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { gridPinnedColumnsSelector, useGridRegisterPipeProcessor, eslintUseValue, gridVisiblePinnedColumnDefinitionsSelector } from '@mui/x-data-grid/internals';
3
+ import { useGridRegisterPipeProcessor, gridVisiblePinnedColumnDefinitionsSelector } from '@mui/x-data-grid/internals';
4
4
  export const useGridColumnPinningPreProcessors = (apiRef, props) => {
5
5
  const {
6
6
  disableColumnPinning
7
7
  } = props;
8
- let pinnedColumns;
9
- if (apiRef.current.state.columns) {
10
- pinnedColumns = gridPinnedColumnsSelector(apiRef.current.state);
11
- } else {
12
- pinnedColumns = null;
13
- }
14
8
  const prevAllPinnedColumns = React.useRef([]);
15
9
  const reorderPinnedColumns = React.useCallback(columnsState => {
16
- eslintUseValue(pinnedColumns);
17
10
  if (columnsState.orderedFields.length === 0 || disableColumnPinning) {
18
11
  return columnsState;
19
12
  }
@@ -105,7 +98,7 @@ export const useGridColumnPinningPreProcessors = (apiRef, props) => {
105
98
  return _extends({}, columnsState, {
106
99
  orderedFields: [...leftPinnedColumns, ...centerColumns, ...rightPinnedColumns]
107
100
  });
108
- }, [apiRef, disableColumnPinning, pinnedColumns]);
101
+ }, [apiRef, disableColumnPinning]);
109
102
  useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', reorderPinnedColumns);
110
103
  const isColumnPinned = React.useCallback((initialValue, field) => apiRef.current.isColumnPinned(field), [apiRef]);
111
104
  useGridRegisterPipeProcessor(apiRef, 'isColumnPinned', isColumnPinned);
@@ -1,4 +1,4 @@
1
- function getKey(params) {
1
+ export function getKey(params) {
2
2
  return JSON.stringify([params.paginationModel, params.filterModel, params.sortModel, params.groupKeys, params.groupFields]);
3
3
  }
4
4
  export class GridDataSourceCacheDefault {
@@ -3,8 +3,9 @@ import * as React from 'react';
3
3
  import useLazyRef from '@mui/utils/useLazyRef';
4
4
  import { useGridApiEventHandler, gridRowsLoadingSelector, useGridApiMethod, useGridSelector } from '@mui/x-data-grid';
5
5
  import { gridRowGroupsToFetchSelector } from '@mui/x-data-grid/internals';
6
+ import { unstable_debounce as debounce } from '@mui/utils';
6
7
  import { gridGetRowsParamsSelector, gridDataSourceErrorsSelector } from "./gridDataSourceSelector.js";
7
- import { runIfServerMode, NestedDataManager, RequestStatus } from "./utils.js";
8
+ import { NestedDataManager, RequestStatus, runIfServerMode } from "./utils.js";
8
9
  import { GridDataSourceCacheDefault } from "./cache.js";
9
10
  const INITIAL_STATE = {
10
11
  loading: {},
@@ -177,6 +178,7 @@ export const useGridDataSource = (apiRef, props) => {
177
178
  });
178
179
  });
179
180
  }, [apiRef]);
181
+ const debouncedFetchRows = React.useMemo(() => debounce(fetchRows, 0), [fetchRows]);
180
182
  const dataSourceApi = {
181
183
  unstable_dataSource: {
182
184
  setChildrenLoading,
@@ -191,9 +193,9 @@ export const useGridDataSource = (apiRef, props) => {
191
193
  };
192
194
  useGridApiMethod(apiRef, dataSourceApi, 'public');
193
195
  useGridApiMethod(apiRef, dataSourcePrivateApi, 'private');
194
- useGridApiEventHandler(apiRef, 'sortModelChange', runIfServerMode(props.sortingMode, fetchRows));
195
- useGridApiEventHandler(apiRef, 'filterModelChange', runIfServerMode(props.filterMode, fetchRows));
196
- useGridApiEventHandler(apiRef, 'paginationModelChange', runIfServerMode(props.paginationMode, fetchRows));
196
+ useGridApiEventHandler(apiRef, 'sortModelChange', runIfServerMode(props.sortingMode, debouncedFetchRows));
197
+ useGridApiEventHandler(apiRef, 'filterModelChange', runIfServerMode(props.filterMode, debouncedFetchRows));
198
+ useGridApiEventHandler(apiRef, 'paginationModelChange', runIfServerMode(props.paginationMode, debouncedFetchRows));
197
199
  const isFirstRender = React.useRef(true);
198
200
  React.useEffect(() => {
199
201
  if (isFirstRender.current) {
@@ -4,9 +4,6 @@ import { useGridSelector, useGridApiEventHandler, useGridApiMethod, gridDataRowI
4
4
  import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
5
5
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from "./gridDetailPanelToggleColDef.js";
6
6
  import { gridDetailPanelExpandedRowIdsSelector, gridDetailPanelExpandedRowsContentCacheSelector, gridDetailPanelExpandedRowsHeightCacheSelector, gridDetailPanelRawHeightCacheSelector } from "./gridDetailPanelSelector.js";
7
- // FIXME: calling `api.updateDimensions()` here triggers a cycle where `updateDimensions` is
8
- // called 3 times when opening/closing a panel.
9
-
10
7
  export const detailPanelStateInitializer = (state, props) => {
11
8
  return _extends({}, state, {
12
9
  detailPanel: {
@@ -101,8 +98,6 @@ export const useGridDetailPanel = (apiRef, props) => {
101
98
  })
102
99
  });
103
100
  });
104
- apiRef.current.updateDimensions();
105
- apiRef.current.forceUpdate();
106
101
  }, [apiRef]);
107
102
  const storeDetailPanelHeight = React.useCallback((id, height) => {
108
103
  const heightCache = gridDetailPanelRawHeightCacheSelector(apiRef.current.state);
@@ -120,7 +115,6 @@ export const useGridDetailPanel = (apiRef, props) => {
120
115
  })
121
116
  });
122
117
  });
123
- apiRef.current.updateDimensions();
124
118
  apiRef.current.requestPipeProcessorsApplication('rowHeight');
125
119
  }, [apiRef]);
126
120
  const detailPanelHasAutoHeight = React.useCallback(id => {
@@ -147,17 +141,19 @@ export const useGridDetailPanel = (apiRef, props) => {
147
141
  }
148
142
  }, [apiRef, props.detailPanelExpandedRowIds]);
149
143
  const updateCachesAndForceUpdate = React.useCallback(() => {
144
+ if (!props.getDetailPanelContent) {
145
+ return;
146
+ }
150
147
  apiRef.current.setState(state => {
151
148
  return _extends({}, state, {
152
149
  detailPanel: _extends({}, state.detailPanel, cacheContentAndHeight(apiRef, props.getDetailPanelContent, props.getDetailPanelHeight, state.detailPanel.heightCache))
153
150
  });
154
151
  });
155
- apiRef.current.updateDimensions?.();
156
152
  apiRef.current.forceUpdate();
157
153
  }, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
158
154
  useGridApiEventHandler(apiRef, 'sortedRowsSet', updateCachesAndForceUpdate);
159
- const previousGetDetailPanelContentProp = React.useRef(null);
160
- const previousGetDetailPanelHeightProp = React.useRef(null);
155
+ const previousGetDetailPanelContentProp = React.useRef(undefined);
156
+ const previousGetDetailPanelHeightProp = React.useRef(undefined);
161
157
  const updateCachesIfNeeded = React.useCallback(() => {
162
158
  if (props.getDetailPanelContent === previousGetDetailPanelContentProp.current && props.getDetailPanelHeight === previousGetDetailPanelHeightProp.current) {
163
159
  return;
@@ -167,7 +163,6 @@ export const useGridDetailPanel = (apiRef, props) => {
167
163
  detailPanel: _extends({}, state.detailPanel, cacheContentAndHeight(apiRef, props.getDetailPanelContent, props.getDetailPanelHeight, state.detailPanel.heightCache))
168
164
  });
169
165
  });
170
- apiRef.current.updateDimensions?.();
171
166
  previousGetDetailPanelContentProp.current = props.getDetailPanelContent;
172
167
  previousGetDetailPanelHeightProp.current = props.getDetailPanelHeight;
173
168
  }, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
@@ -181,7 +176,8 @@ export const useGridDetailPanel = (apiRef, props) => {
181
176
  initialValue.detail = heightCache[row.id] ?? 0; // Fallback to zero because the cache might not be ready yet (for example page was changed)
182
177
  return initialValue;
183
178
  }, [apiRef, expandedRowIds, updateCachesIfNeeded]);
184
- useGridRegisterPipeProcessor(apiRef, 'rowHeight', addDetailHeight);
179
+ const enabled = props.getDetailPanelContent !== undefined;
180
+ useGridRegisterPipeProcessor(apiRef, 'rowHeight', addDetailHeight, enabled);
185
181
  const isFirstRender = React.useRef(true);
186
182
  if (isFirstRender.current) {
187
183
  updateCachesIfNeeded();
@@ -189,7 +185,6 @@ export const useGridDetailPanel = (apiRef, props) => {
189
185
  React.useEffect(() => {
190
186
  if (!isFirstRender.current) {
191
187
  updateCachesIfNeeded();
192
- apiRef.current.hydrateRowsMeta();
193
188
  }
194
189
  isFirstRender.current = false;
195
190
  }, [apiRef, updateCachesIfNeeded]);
@@ -6,4 +6,4 @@ export * from "./treeData/index.js";
6
6
  export * from "./detailPanel/index.js";
7
7
  export * from "./rowPinning/index.js";
8
8
  export * from "./dataSource/interfaces.js";
9
- export * from "./dataSource/cache.js";
9
+ export { GridDataSourceCacheDefault } from "./dataSource/cache.js";
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { useGridSelector, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, useGridApiMethod, gridDimensionsSelector } from '@mui/x-data-grid';
3
- import { useGridVisibleRows, useTimeout } from '@mui/x-data-grid/internals';
2
+ import { useGridSelector, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, useGridApiMethod } from '@mui/x-data-grid';
3
+ import { useGridVisibleRows, useTimeout, gridHorizontalScrollbarHeightSelector } from '@mui/x-data-grid/internals';
4
4
  import useEventCallback from '@mui/utils/useEventCallback';
5
5
  import { styled } from '@mui/system';
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -40,8 +40,6 @@ export const useGridInfiniteLoader = (apiRef, props) => {
40
40
  }
41
41
  });
42
42
  const virtualScroller = apiRef.current.virtualScrollerRef.current;
43
- const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
44
- const marginBottom = props.scrollEndThreshold - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
45
43
  React.useEffect(() => {
46
44
  if (!isEnabled) {
47
45
  return;
@@ -50,6 +48,8 @@ export const useGridInfiniteLoader = (apiRef, props) => {
50
48
  return;
51
49
  }
52
50
  observer.current?.disconnect();
51
+ const horizontalScrollbarHeight = gridHorizontalScrollbarHeightSelector(apiRef.current.state);
52
+ const marginBottom = props.scrollEndThreshold - horizontalScrollbarHeight;
53
53
  observer.current = new IntersectionObserver(handleLoadMoreRows, {
54
54
  threshold: 1,
55
55
  root: virtualScroller,
@@ -58,7 +58,7 @@ export const useGridInfiniteLoader = (apiRef, props) => {
58
58
  if (triggerElement.current) {
59
59
  observer.current.observe(triggerElement.current);
60
60
  }
61
- }, [virtualScroller, handleLoadMoreRows, isEnabled, marginBottom]);
61
+ }, [apiRef, virtualScroller, handleLoadMoreRows, isEnabled, props.scrollEndThreshold]);
62
62
  const updateTarget = node => {
63
63
  if (triggerElement.current !== node) {
64
64
  observer.current?.disconnect();
@@ -1,9 +1,8 @@
1
1
  import { GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
2
- import { getTreeNodeDescendants } from '@mui/x-data-grid/internals';
2
+ import { defaultGridFilterLookup, getTreeNodeDescendants } from '@mui/x-data-grid/internals';
3
3
  export function skipFiltering(rowTree) {
4
4
  const filteredRowsLookup = {};
5
5
  const filteredChildrenCountLookup = {};
6
- const filteredDescendantCountLookup = {};
7
6
  const nodes = Object.values(rowTree);
8
7
  for (let i = 0; i < nodes.length; i += 1) {
9
8
  const node = nodes[i];
@@ -13,7 +12,7 @@ export function skipFiltering(rowTree) {
13
12
  return {
14
13
  filteredRowsLookup,
15
14
  filteredChildrenCountLookup,
16
- filteredDescendantCountLookup
15
+ filteredDescendantCountLookup: defaultGridFilterLookup.filteredDescendantCountLookup
17
16
  };
18
17
  }
19
18
  export function skipSorting(rowTree) {
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTczNzY1ODgwMDAwMA==";
3
+ const releaseInfo = "MTczODg4MjgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -166,7 +166,7 @@ export const getVisibleRowsLookup = ({
166
166
  }
167
167
  const visibleRowsLookup = {};
168
168
  const handleTreeNode = (node, areAncestorsExpanded) => {
169
- const isPassingFiltering = filteredRowsLookup[node.id];
169
+ const isPassingFiltering = filteredRowsLookup[node.id] !== false;
170
170
  if (node.type === 'group') {
171
171
  node.children.forEach(childId => {
172
172
  const childNode = tree[childId];