@mui/x-data-grid 7.25.0 → 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 (108) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/DataGrid/useDataGridComponent.js +2 -2
  3. package/components/GridRow.js +8 -2
  4. package/components/GridScrollArea.d.ts +5 -2
  5. package/components/GridScrollArea.js +32 -25
  6. package/components/GridSkeletonLoadingOverlay.js +2 -1
  7. package/components/containers/GridRoot.js +11 -9
  8. package/components/containers/GridRootStyles.js +3 -3
  9. package/components/virtualization/GridMainContainer.d.ts +2 -2
  10. package/components/virtualization/GridMainContainer.js +1 -1
  11. package/components/virtualization/GridVirtualScroller.js +21 -14
  12. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +1 -1
  13. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  14. package/hooks/core/useGridStateInitialization.js +3 -2
  15. package/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  16. package/hooks/features/columns/gridColumnsSelector.d.ts +0 -5
  17. package/hooks/features/columns/gridColumnsSelector.js +0 -12
  18. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +16 -0
  19. package/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
  20. package/hooks/features/dimensions/index.d.ts +1 -1
  21. package/hooks/features/dimensions/index.js +1 -2
  22. package/hooks/features/dimensions/useGridDimensions.js +97 -70
  23. package/hooks/features/editing/gridEditingSelectors.d.ts +5 -1
  24. package/hooks/features/editing/gridEditingSelectors.js +6 -1
  25. package/hooks/features/editing/useGridRowEditing.js +4 -4
  26. package/hooks/features/filter/gridFilterState.d.ts +5 -0
  27. package/hooks/features/filter/gridFilterState.js +5 -0
  28. package/hooks/features/filter/useGridFilter.js +6 -13
  29. package/hooks/features/pagination/useGridPagination.js +1 -1
  30. package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  31. package/hooks/features/rowSelection/utils.js +1 -1
  32. package/hooks/features/rows/gridRowsMetaState.d.ts +8 -0
  33. package/hooks/features/rows/gridRowsUtils.d.ts +0 -4
  34. package/hooks/features/rows/gridRowsUtils.js +0 -16
  35. package/hooks/features/rows/useGridRowsMeta.js +33 -17
  36. package/hooks/features/sorting/gridSortingSelector.js +10 -9
  37. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +6 -0
  38. package/hooks/features/virtualization/useGridVirtualScroller.js +43 -27
  39. package/hooks/utils/useGridSelector.d.ts +8 -1
  40. package/hooks/utils/useGridSelector.js +42 -8
  41. package/hooks/utils/useIsSSR.d.ts +1 -0
  42. package/hooks/utils/useIsSSR.js +5 -0
  43. package/index.js +1 -1
  44. package/internals/index.d.ts +2 -1
  45. package/internals/index.js +2 -1
  46. package/models/api/gridStateApi.d.ts +1 -0
  47. package/models/events/gridEventLookup.d.ts +6 -0
  48. package/modern/DataGrid/useDataGridComponent.js +2 -2
  49. package/modern/components/GridRow.js +8 -2
  50. package/modern/components/GridScrollArea.js +32 -25
  51. package/modern/components/GridSkeletonLoadingOverlay.js +2 -1
  52. package/modern/components/containers/GridRoot.js +11 -9
  53. package/modern/components/containers/GridRootStyles.js +3 -3
  54. package/modern/components/virtualization/GridMainContainer.js +1 -1
  55. package/modern/components/virtualization/GridVirtualScroller.js +21 -14
  56. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  57. package/modern/hooks/core/useGridStateInitialization.js +3 -2
  58. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  59. package/modern/hooks/features/columns/gridColumnsSelector.js +0 -12
  60. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
  61. package/modern/hooks/features/dimensions/index.js +1 -2
  62. package/modern/hooks/features/dimensions/useGridDimensions.js +97 -70
  63. package/modern/hooks/features/editing/gridEditingSelectors.js +6 -1
  64. package/modern/hooks/features/editing/useGridRowEditing.js +4 -4
  65. package/modern/hooks/features/filter/gridFilterState.js +5 -0
  66. package/modern/hooks/features/filter/useGridFilter.js +6 -13
  67. package/modern/hooks/features/pagination/useGridPagination.js +1 -1
  68. package/modern/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  69. package/modern/hooks/features/rowSelection/utils.js +1 -1
  70. package/modern/hooks/features/rows/gridRowsUtils.js +0 -16
  71. package/modern/hooks/features/rows/useGridRowsMeta.js +33 -17
  72. package/modern/hooks/features/sorting/gridSortingSelector.js +10 -9
  73. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +43 -27
  74. package/modern/hooks/utils/useGridSelector.js +42 -8
  75. package/modern/hooks/utils/useIsSSR.js +5 -0
  76. package/modern/index.js +1 -1
  77. package/modern/internals/index.js +2 -1
  78. package/node/DataGrid/useDataGridComponent.js +2 -2
  79. package/node/components/GridRow.js +7 -2
  80. package/node/components/GridScrollArea.js +31 -24
  81. package/node/components/GridSkeletonLoadingOverlay.js +2 -1
  82. package/node/components/containers/GridRoot.js +10 -8
  83. package/node/components/containers/GridRootStyles.js +3 -3
  84. package/node/components/virtualization/GridMainContainer.js +1 -1
  85. package/node/components/virtualization/GridVirtualScroller.js +21 -14
  86. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  87. package/node/hooks/core/useGridStateInitialization.js +3 -2
  88. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  89. package/node/hooks/features/columns/gridColumnsSelector.js +1 -13
  90. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +38 -2
  91. package/node/hooks/features/dimensions/index.js +13 -11
  92. package/node/hooks/features/dimensions/useGridDimensions.js +94 -67
  93. package/node/hooks/features/editing/gridEditingSelectors.js +5 -1
  94. package/node/hooks/features/editing/useGridRowEditing.js +4 -4
  95. package/node/hooks/features/filter/gridFilterState.js +6 -1
  96. package/node/hooks/features/filter/useGridFilter.js +5 -12
  97. package/node/hooks/features/pagination/useGridPagination.js +1 -1
  98. package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  99. package/node/hooks/features/rowSelection/utils.js +1 -1
  100. package/node/hooks/features/rows/gridRowsUtils.js +0 -17
  101. package/node/hooks/features/rows/useGridRowsMeta.js +31 -15
  102. package/node/hooks/features/sorting/gridSortingSelector.js +10 -9
  103. package/node/hooks/features/virtualization/useGridVirtualScroller.js +42 -26
  104. package/node/hooks/utils/useGridSelector.js +42 -8
  105. package/node/hooks/utils/useIsSSR.js +12 -0
  106. package/node/index.js +1 -1
  107. package/node/internals/index.js +20 -7
  108. package/package.json +3 -2
@@ -17,12 +17,12 @@ var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
17
17
  var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
18
18
  var _RtlProvider = require("@mui/system/RtlProvider");
19
19
  var _reactMajor = _interopRequireDefault(require("@mui/x-internals/reactMajor"));
20
+ var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
20
21
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
21
22
  var _useGridRootProps = require("../../utils/useGridRootProps");
22
23
  var _useGridSelector = require("../../utils/useGridSelector");
23
24
  var _useRunOnce = require("../../utils/useRunOnce");
24
25
  var _gridColumnsSelector = require("../columns/gridColumnsSelector");
25
- var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
26
26
  var _gridRowsSelector = require("../rows/gridRowsSelector");
27
27
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
28
28
  var _utils2 = require("../../utils");
@@ -68,8 +68,6 @@ const useGridVirtualScroller = () => {
68
68
  const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, () => listView ? [(0, _gridListViewSelectors.gridListColumnSelector)(apiRef.current.state)] : (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef));
69
69
  const enabledForRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridVirtualizationSelectors.gridVirtualizationRowEnabledSelector) && !_isJSDOM.isJSDOM;
70
70
  const enabledForColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridVirtualizationSelectors.gridVirtualizationColumnEnabledSelector) && !_isJSDOM.isJSDOM;
71
- const dimensions = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
72
- const outerSize = dimensions.viewportOuterSize;
73
71
  const pinnedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
74
72
  const pinnedColumnDefinitions = (0, _gridColumnsSelector.gridVisiblePinnedColumnDefinitionsSelector)(apiRef);
75
73
  const pinnedColumns = listView ? _columns.EMPTY_PINNED_COLUMN_FIELDS : pinnedColumnDefinitions;
@@ -82,10 +80,14 @@ const useGridVirtualScroller = () => {
82
80
  const scrollerRef = apiRef.current.virtualScrollerRef;
83
81
  const scrollbarVerticalRef = apiRef.current.virtualScrollbarVerticalRef;
84
82
  const scrollbarHorizontalRef = apiRef.current.virtualScrollbarHorizontalRef;
85
- const contentHeight = dimensions.contentSize.height;
86
- const columnsTotalWidth = dimensions.columnsTotalWidth;
87
83
  const hasColSpan = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridHasColSpanSelector);
88
84
  const isRenderContextReady = React.useRef(false);
85
+ const rowHeight = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridRowHeightSelector);
86
+ const contentHeight = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridContentHeightSelector);
87
+ const columnsTotalWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridColumnsTotalWidthSelector);
88
+ const needsHorizontalScrollbar = (0, _useGridSelector.useGridSelector)(apiRef, needsHorizontalScrollbarSelector);
89
+ const verticalScrollbarWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridVerticalScrollbarWidthSelector);
90
+ const gridHasFiller = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasFillerSelector);
89
91
  const previousSize = React.useRef(null);
90
92
  const mainRefCallback = React.useCallback(node => {
91
93
  mainRef.current = node;
@@ -152,7 +154,7 @@ const useGridVirtualScroller = () => {
152
154
  const focusedVirtualCell = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector);
153
155
  const scrollTimeout = (0, _useTimeout.default)();
154
156
  const frozenContext = React.useRef(undefined);
155
- const scrollCache = (0, _useLazyRef.default)(() => createScrollCache(isRtl, rootProps.rowBufferPx, rootProps.columnBufferPx, dimensions.rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6)).current;
157
+ const scrollCache = (0, _useLazyRef.default)(() => createScrollCache(isRtl, rootProps.rowBufferPx, rootProps.columnBufferPx, rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6)).current;
156
158
  const updateRenderContext = React.useCallback(nextRenderContext => {
157
159
  if (areRenderContextsEqual(nextRenderContext, apiRef.current.state.virtualization.renderContext)) {
158
160
  return;
@@ -167,19 +169,21 @@ const useGridVirtualScroller = () => {
167
169
  });
168
170
 
169
171
  // The lazy-loading hook is listening to `renderedRowsIntervalChange`,
170
- // but only does something if the dimensions are also available.
171
- // So we wait until we have valid dimensions before publishing the first event.
172
- if (dimensions.isReady && didRowsIntervalChange) {
172
+ // but only does something if we already have a render context, because
173
+ // otherwise we would call an update directly on mount
174
+ const isReady = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state).isReady;
175
+ if (isReady && didRowsIntervalChange) {
173
176
  previousRowContext.current = nextRenderContext;
174
177
  apiRef.current.publishEvent('renderedRowsIntervalChange', nextRenderContext);
175
178
  }
176
179
  previousContextScrollPosition.current = scrollPosition.current;
177
- }, [apiRef, dimensions.isReady]);
180
+ }, [apiRef]);
178
181
  const triggerUpdateRenderContext = (0, _utils.unstable_useEventCallback)(() => {
179
182
  const scroller = scrollerRef.current;
180
183
  if (!scroller) {
181
184
  return undefined;
182
185
  }
186
+ const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
183
187
  const maxScrollTop = Math.ceil(dimensions.minimumSize.height - dimensions.viewportOuterSize.height);
184
188
  const maxScrollLeft = Math.ceil(dimensions.minimumSize.width - dimensions.viewportInnerSize.width);
185
189
 
@@ -199,7 +203,7 @@ const useGridVirtualScroller = () => {
199
203
  const columnScroll = Math.abs(scrollPosition.current.left - previousContextScrollPosition.current.left);
200
204
 
201
205
  // PERF: use the computed minimum column width instead of a static one
202
- const didCrossThreshold = rowScroll >= dimensions.rowHeight || columnScroll >= MINIMUM_COLUMN_WIDTH;
206
+ const didCrossThreshold = rowScroll >= rowHeight || columnScroll >= MINIMUM_COLUMN_WIDTH;
203
207
  const didChangeDirection = scrollCache.direction !== direction;
204
208
  const shouldUpdate = didCrossThreshold || didChangeDirection;
205
209
  if (!shouldUpdate) {
@@ -221,7 +225,7 @@ const useGridVirtualScroller = () => {
221
225
  }
222
226
  }
223
227
  scrollCache.direction = direction;
224
- scrollCache.buffer = bufferForDirection(isRtl, direction, rootProps.rowBufferPx, rootProps.columnBufferPx, dimensions.rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6);
228
+ scrollCache.buffer = bufferForDirection(isRtl, direction, rootProps.rowBufferPx, rootProps.columnBufferPx, rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6);
225
229
  const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);
226
230
  const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);
227
231
 
@@ -233,6 +237,10 @@ const useGridVirtualScroller = () => {
233
237
  return nextRenderContext;
234
238
  });
235
239
  const forceUpdateRenderContext = () => {
240
+ // skip update if dimensions are not ready and virtualization is enabled
241
+ if (!(0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state).isReady && (enabledForRows || enabledForColumns)) {
242
+ return;
243
+ }
236
244
  const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);
237
245
  const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);
238
246
  // Reset the frozen context when the render context changes, see the illustration in https://github.com/mui/mui-x/pull/12353
@@ -261,7 +269,12 @@ const useGridVirtualScroller = () => {
261
269
  if (!params.rows && !currentPage.range) {
262
270
  return [];
263
271
  }
264
- const baseRenderContext = params.renderContext ?? renderContext;
272
+ let baseRenderContext = renderContext;
273
+ if (params.renderContext) {
274
+ baseRenderContext = params.renderContext;
275
+ baseRenderContext.firstColumnIndex = renderContext.firstColumnIndex;
276
+ baseRenderContext.lastColumnIndex = renderContext.lastColumnIndex;
277
+ }
265
278
  const isLastSection = !hasBottomPinnedRows && params.position === undefined || hasBottomPinnedRows && params.position === 'bottom';
266
279
  const isPinnedSection = params.position !== undefined;
267
280
  let rowIndexOffset;
@@ -355,7 +368,7 @@ const useGridVirtualScroller = () => {
355
368
  }
356
369
  }
357
370
  let currentRenderContext = baseRenderContext;
358
- if (!isPinnedSection && frozenContext.current && rowIndexInPage >= frozenContext.current.firstRowIndex && rowIndexInPage < frozenContext.current.lastRowIndex) {
371
+ if (frozenContext.current && rowIndexInPage >= frozenContext.current.firstRowIndex && rowIndexInPage < frozenContext.current.lastRowIndex) {
359
372
  currentRenderContext = frozenContext.current;
360
373
  }
361
374
  const isVirtualFocusRow = rowIndexInPage === virtualRowIndex;
@@ -370,7 +383,7 @@ const useGridVirtualScroller = () => {
370
383
  index: rowIndex,
371
384
  selected: isSelected,
372
385
  offsetLeft: offsetLeft,
373
- columnsTotalWidth: dimensions.columnsTotalWidth,
386
+ columnsTotalWidth: columnsTotalWidth,
374
387
  rowHeight: baseRowHeight,
375
388
  pinnedColumns: pinnedColumns,
376
389
  visibleColumns: visibleColumns,
@@ -381,8 +394,8 @@ const useGridVirtualScroller = () => {
381
394
  isLastVisible: isLastVisible,
382
395
  isNotVisible: isVirtualFocusRow,
383
396
  showBottomBorder: showBottomBorder,
384
- scrollbarWidth: dimensions.hasScrollY ? dimensions.scrollbarSize : 0,
385
- gridHasFiller: dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width
397
+ scrollbarWidth: verticalScrollbarWidth,
398
+ gridHasFiller: gridHasFiller
386
399
  }, rowProps), id));
387
400
  if (isVirtualFocusRow) {
388
401
  return;
@@ -399,7 +412,6 @@ const useGridVirtualScroller = () => {
399
412
  });
400
413
  return rows;
401
414
  };
402
- const needsHorizontalScrollbar = outerSize.width && columnsTotalWidth > outerSize.width;
403
415
  const scrollerStyle = React.useMemo(() => ({
404
416
  overflowX: !needsHorizontalScrollbar || listView ? 'hidden' : undefined,
405
417
  overflowY: rootProps.autoHeight ? 'hidden' : undefined
@@ -435,14 +447,11 @@ const useGridVirtualScroller = () => {
435
447
  scrollerRef.current.scrollLeft = 0;
436
448
  }
437
449
  }, [listView, scrollerRef]);
438
- (0, _useRunOnce.useRunOnce)(outerSize.width !== 0, () => {
439
- const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);
440
- const initialRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);
441
- updateRenderContext(initialRenderContext);
450
+ (0, _useRunOnce.useRunOnce)(renderContext !== _useGridVirtualization.EMPTY_RENDER_CONTEXT, () => {
442
451
  apiRef.current.publishEvent('scrollPositionChange', {
443
452
  top: scrollPosition.current.top,
444
453
  left: scrollPosition.current.left,
445
- renderContext: initialRenderContext
454
+ renderContext
446
455
  });
447
456
  isRenderContextReady.current = true;
448
457
  if (rootProps.initialState?.scroll && scrollerRef.current) {
@@ -495,9 +504,9 @@ const useGridVirtualScroller = () => {
495
504
  apiRef.current.register('private', {
496
505
  updateRenderContext: forceUpdateRenderContext
497
506
  });
498
- (0, _utils2.useGridApiEventHandler)(apiRef, 'columnsChange', forceUpdateRenderContext);
499
- (0, _utils2.useGridApiEventHandler)(apiRef, 'filteredRowsSet', forceUpdateRenderContext);
500
- (0, _utils2.useGridApiEventHandler)(apiRef, 'rowExpansionChange', forceUpdateRenderContext);
507
+ (0, _utils2.useGridApiOptionHandler)(apiRef, 'sortedRowsSet', forceUpdateRenderContext);
508
+ (0, _utils2.useGridApiOptionHandler)(apiRef, 'paginationModelChange', forceUpdateRenderContext);
509
+ (0, _utils2.useGridApiOptionHandler)(apiRef, 'columnsChange', forceUpdateRenderContext);
501
510
  return {
502
511
  renderContext,
503
512
  setPanels,
@@ -533,10 +542,17 @@ const useGridVirtualScroller = () => {
533
542
  ref: scrollbarHorizontalRef,
534
543
  role: 'presentation',
535
544
  scrollPosition
545
+ }),
546
+ getScrollAreaProps: () => ({
547
+ scrollPosition
536
548
  })
537
549
  };
538
550
  };
539
551
  exports.useGridVirtualScroller = useGridVirtualScroller;
552
+ // dimension selectors
553
+ function needsHorizontalScrollbarSelector(state) {
554
+ return state.dimensions.viewportOuterSize.width > 0 && state.dimensions.columnsTotalWidth > state.dimensions.viewportOuterSize.width;
555
+ }
540
556
  function inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns) {
541
557
  const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
542
558
  const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, rootProps);
@@ -8,8 +8,8 @@ exports.useGridSelectorV8 = exports.useGridSelector = exports.objectShallowCompa
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare");
10
10
  var _warning = require("@mui/x-internals/warning");
11
+ var _shim = require("use-sync-external-store/shim");
11
12
  var _useLazyRef = require("./useLazyRef");
12
- var _useOnMount = require("./useOnMount");
13
13
  function isOutputSelector(selector) {
14
14
  return selector.acceptsApiRef;
15
15
  }
@@ -50,8 +50,10 @@ const createRefs = () => ({
50
50
  state: null,
51
51
  equals: null,
52
52
  selector: null,
53
- args: null
53
+ args: undefined
54
54
  });
55
+ const EMPTY = [];
56
+ const emptyGetSnapshot = () => null;
55
57
 
56
58
  // TODO v8: Remove this function
57
59
  const useGridSelector = (apiRef, selector, equals = defaultCompare) => {
@@ -68,15 +70,31 @@ const useGridSelector = (apiRef, selector, equals = defaultCompare) => {
68
70
  refs.current.state = state;
69
71
  refs.current.equals = equals;
70
72
  refs.current.selector = selector;
71
- (0, _useOnMount.useOnMount)(() => {
72
- return apiRef.current.store.subscribe(() => {
73
+ const subscribe = React.useCallback(() => {
74
+ if (refs.current.subscription) {
75
+ return null;
76
+ }
77
+ refs.current.subscription = apiRef.current.store.subscribe(() => {
73
78
  const newState = applySelector(apiRef, refs.current.selector);
74
79
  if (!refs.current.equals(refs.current.state, newState)) {
75
80
  refs.current.state = newState;
76
81
  setState(newState);
77
82
  }
78
83
  });
79
- });
84
+ return null;
85
+ },
86
+ // eslint-disable-next-line react-hooks/exhaustive-deps
87
+ EMPTY);
88
+ const unsubscribe = React.useCallback(() => {
89
+ return () => {
90
+ if (refs.current.subscription) {
91
+ refs.current.subscription();
92
+ refs.current.subscription = undefined;
93
+ }
94
+ };
95
+ // eslint-disable-next-line react-hooks/exhaustive-deps
96
+ }, EMPTY);
97
+ (0, _shim.useSyncExternalStore)(unsubscribe, subscribe, emptyGetSnapshot);
80
98
  return state;
81
99
  };
82
100
 
@@ -105,15 +123,31 @@ const useGridSelectorV8 = (apiRef, selector, args = undefined, equals = defaultC
105
123
  setState(newState);
106
124
  }
107
125
  }
108
- (0, _useOnMount.useOnMount)(() => {
109
- return apiRef.current.store.subscribe(() => {
126
+ const subscribe = React.useCallback(() => {
127
+ if (refs.current.subscription) {
128
+ return null;
129
+ }
130
+ refs.current.subscription = apiRef.current.store.subscribe(() => {
110
131
  const newState = applySelectorV8(apiRef, refs.current.selector, refs.current.args, apiRef.current.instanceId);
111
132
  if (!refs.current.equals(refs.current.state, newState)) {
112
133
  refs.current.state = newState;
113
134
  setState(newState);
114
135
  }
115
136
  });
116
- });
137
+ return null;
138
+ },
139
+ // eslint-disable-next-line react-hooks/exhaustive-deps
140
+ EMPTY);
141
+ const unsubscribe = React.useCallback(() => {
142
+ return () => {
143
+ if (refs.current.subscription) {
144
+ refs.current.subscription();
145
+ refs.current.subscription = undefined;
146
+ }
147
+ };
148
+ // eslint-disable-next-line react-hooks/exhaustive-deps
149
+ }, EMPTY);
150
+ (0, _shim.useSyncExternalStore)(unsubscribe, subscribe, emptyGetSnapshot);
117
151
  return state;
118
152
  };
119
153
  exports.useGridSelectorV8 = useGridSelectorV8;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useIsSSR = void 0;
7
+ var _shim = require("use-sync-external-store/shim");
8
+ const emptySubscribe = () => () => {};
9
+ const clientSnapshot = () => false;
10
+ const serverSnapshot = () => true;
11
+ const useIsSSR = () => (0, _shim.useSyncExternalStore)(emptySubscribe, clientSnapshot, serverSnapshot);
12
+ exports.useIsSSR = useIsSSR;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.25.0
2
+ * @mui/x-data-grid v7.26.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -32,6 +32,7 @@ var _exportNames = {
32
32
  useGridPrintExport: true,
33
33
  useGridFilter: true,
34
34
  filterStateInitializer: true,
35
+ defaultGridFilterLookup: true,
35
36
  passFilterLogic: true,
36
37
  gridFilteredChildrenCountLookupSelector: true,
37
38
  gridExpandedSortedRowTreeLevelPositionLookupSelector: true,
@@ -57,7 +58,6 @@ var _exportNames = {
57
58
  buildRootGroup: true,
58
59
  getRowIdFromRowModel: true,
59
60
  GRID_ID_AUTOGENERATED: true,
60
- calculatePinnedRowsHeight: true,
61
61
  useGridRowsMeta: true,
62
62
  rowsMetaStateInitializer: true,
63
63
  useGridParamsApi: true,
@@ -171,12 +171,6 @@ Object.defineProperty(exports, "buildRootGroup", {
171
171
  return _gridRowsUtils.buildRootGroup;
172
172
  }
173
173
  });
174
- Object.defineProperty(exports, "calculatePinnedRowsHeight", {
175
- enumerable: true,
176
- get: function () {
177
- return _gridRowsUtils.calculatePinnedRowsHeight;
178
- }
179
- });
180
174
  Object.defineProperty(exports, "columnGroupsStateInitializer", {
181
175
  enumerable: true,
182
176
  get: function () {
@@ -231,6 +225,12 @@ Object.defineProperty(exports, "defaultGetRowsToExport", {
231
225
  return _utils2.defaultGetRowsToExport;
232
226
  }
233
227
  });
228
+ Object.defineProperty(exports, "defaultGridFilterLookup", {
229
+ enumerable: true,
230
+ get: function () {
231
+ return _gridFilterState.defaultGridFilterLookup;
232
+ }
233
+ });
234
234
  Object.defineProperty(exports, "densityStateInitializer", {
235
235
  enumerable: true,
236
236
  get: function () {
@@ -762,6 +762,7 @@ var _useGridDensity = require("../hooks/features/density/useGridDensity");
762
762
  var _useGridCsvExport = require("../hooks/features/export/useGridCsvExport");
763
763
  var _useGridPrintExport = require("../hooks/features/export/useGridPrintExport");
764
764
  var _useGridFilter = require("../hooks/features/filter/useGridFilter");
765
+ var _gridFilterState = require("../hooks/features/filter/gridFilterState");
765
766
  var _gridFilterUtils = require("../hooks/features/filter/gridFilterUtils");
766
767
  var _gridFilterSelector = require("../hooks/features/filter/gridFilterSelector");
767
768
  var _filterPanelUtils = require("../components/panel/filterPanel/filterPanelUtils");
@@ -788,6 +789,18 @@ var _gridSortingSelector = require("../hooks/features/sorting/gridSortingSelecto
788
789
  var _useGridScroll = require("../hooks/features/scroll/useGridScroll");
789
790
  var _useGridEvents = require("../hooks/features/events/useGridEvents");
790
791
  var _useGridDimensions = require("../hooks/features/dimensions/useGridDimensions");
792
+ var _gridDimensionsSelectors = require("../hooks/features/dimensions/gridDimensionsSelectors");
793
+ Object.keys(_gridDimensionsSelectors).forEach(function (key) {
794
+ if (key === "default" || key === "__esModule") return;
795
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
796
+ if (key in exports && exports[key] === _gridDimensionsSelectors[key]) return;
797
+ Object.defineProperty(exports, key, {
798
+ enumerable: true,
799
+ get: function () {
800
+ return _gridDimensionsSelectors[key];
801
+ }
802
+ });
803
+ });
791
804
  var _useGridStatePersistence = require("../hooks/features/statePersistence/useGridStatePersistence");
792
805
  var _useGridVirtualScroller = require("../hooks/features/virtualization/useGridVirtualScroller");
793
806
  var _virtualization = require("../hooks/features/virtualization");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "7.25.0",
3
+ "version": "7.26.0",
4
4
  "description": "The Community plan edition of the Data Grid components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -42,7 +42,8 @@
42
42
  "clsx": "^2.1.1",
43
43
  "prop-types": "^15.8.1",
44
44
  "reselect": "^5.1.1",
45
- "@mui/x-internals": "7.25.0"
45
+ "use-sync-external-store": "^1.0.0",
46
+ "@mui/x-internals": "7.26.0"
46
47
  },
47
48
  "peerDependencies": {
48
49
  "@emotion/react": "^11.9.0",