@mui/x-data-grid 5.8.0 → 5.9.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 (242) hide show
  1. package/CHANGELOG.md +141 -63
  2. package/DataGrid/DataGrid.js +1 -1
  3. package/DataGrid/useDataGridComponent.js +3 -1
  4. package/LICENSE +21 -0
  5. package/README.md +1 -1
  6. package/components/GridRow.d.ts +4 -0
  7. package/components/GridRow.js +49 -23
  8. package/components/base/GridOverlays.js +4 -3
  9. package/components/cell/GridActionsCell.d.ts +5 -1
  10. package/components/cell/GridActionsCell.js +170 -21
  11. package/components/cell/GridActionsCellItem.d.ts +66 -4
  12. package/components/cell/GridActionsCellItem.js +7 -5
  13. package/components/cell/GridCell.d.ts +1 -0
  14. package/components/cell/GridCell.js +28 -7
  15. package/components/cell/GridEditInputCell.js +1 -1
  16. package/components/cell/GridEditSingleSelectCell.js +22 -13
  17. package/components/columnHeaders/GridColumnHeaderItem.js +4 -7
  18. package/components/columnHeaders/GridColumnHeaders.d.ts +0 -1
  19. package/components/columnHeaders/GridColumnHeaders.js +1 -1
  20. package/components/columnSelection/GridCellCheckboxRenderer.d.ts +3 -3
  21. package/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
  22. package/components/panel/GridPanel.js +1 -0
  23. package/components/panel/filterPanel/GridFilterForm.js +14 -10
  24. package/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  25. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -15
  26. package/components/panel/filterPanel/GridFilterInputValue.js +22 -15
  27. package/components/toolbar/GridToolbarDensitySelector.js +1 -1
  28. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  29. package/components/virtualization/GridVirtualScroller.js +2 -0
  30. package/components/virtualization/GridVirtualScrollerContent.js +1 -3
  31. package/constants/gridDetailPanelToggleField.d.ts +1 -0
  32. package/constants/gridDetailPanelToggleField.js +2 -0
  33. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +32 -15
  34. package/hooks/core/pipeProcessing/index.d.ts +1 -0
  35. package/hooks/core/pipeProcessing/index.js +2 -1
  36. package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +8 -3
  37. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
  38. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +3 -0
  39. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  40. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +0 -3
  41. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  42. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
  43. package/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
  44. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -1
  45. package/hooks/features/columns/gridColumnsUtils.d.ts +19 -1
  46. package/hooks/features/columns/gridColumnsUtils.js +61 -8
  47. package/hooks/features/columns/useGridColumnSpanning.d.ts +7 -0
  48. package/hooks/features/columns/useGridColumnSpanning.js +109 -0
  49. package/hooks/features/columns/useGridColumns.js +24 -18
  50. package/hooks/features/dimensions/useGridDimensions.js +3 -3
  51. package/hooks/features/editRows/useGridCellEditing.new.js +18 -10
  52. package/hooks/features/editRows/useGridEditing.new.js +7 -3
  53. package/hooks/features/editRows/useGridRowEditing.new.js +23 -15
  54. package/hooks/features/filter/useGridFilter.js +14 -9
  55. package/hooks/features/focus/useGridFocus.js +19 -9
  56. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -0
  57. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -7
  58. package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
  59. package/hooks/features/rows/gridRowsSelector.js +1 -0
  60. package/hooks/features/rows/gridRowsState.d.ts +4 -0
  61. package/hooks/features/rows/useGridRows.d.ts +2 -2
  62. package/hooks/features/rows/useGridRows.js +5 -4
  63. package/hooks/features/rows/useGridRowsMeta.js +6 -13
  64. package/hooks/features/scroll/useGridScroll.d.ts +2 -0
  65. package/hooks/features/scroll/useGridScroll.js +25 -3
  66. package/hooks/features/selection/useGridSelection.js +3 -2
  67. package/hooks/features/sorting/useGridSorting.js +10 -10
  68. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +7 -0
  69. package/hooks/features/virtualization/useGridVirtualScroller.js +54 -27
  70. package/index.js +1 -1
  71. package/internals/index.d.ts +1 -0
  72. package/internals/index.js +1 -0
  73. package/legacy/DataGrid/DataGrid.js +1 -1
  74. package/legacy/DataGrid/useDataGridComponent.js +3 -1
  75. package/legacy/components/GridRow.js +47 -23
  76. package/legacy/components/base/GridOverlays.js +4 -3
  77. package/legacy/components/cell/GridActionsCell.js +188 -27
  78. package/legacy/components/cell/GridActionsCellItem.js +7 -5
  79. package/legacy/components/cell/GridCell.js +29 -7
  80. package/legacy/components/cell/GridEditInputCell.js +1 -1
  81. package/legacy/components/cell/GridEditSingleSelectCell.js +33 -24
  82. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +4 -7
  83. package/legacy/components/columnHeaders/GridColumnHeaders.js +2 -3
  84. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +21 -3
  85. package/legacy/components/panel/GridPanel.js +1 -0
  86. package/legacy/components/panel/filterPanel/GridFilterForm.js +14 -10
  87. package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  88. package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -17
  89. package/legacy/components/panel/filterPanel/GridFilterInputValue.js +22 -17
  90. package/legacy/components/toolbar/GridToolbarDensitySelector.js +1 -1
  91. package/legacy/components/virtualization/GridVirtualScroller.js +2 -0
  92. package/legacy/components/virtualization/GridVirtualScrollerContent.js +1 -3
  93. package/legacy/constants/gridDetailPanelToggleField.js +2 -0
  94. package/legacy/hooks/core/pipeProcessing/index.js +2 -1
  95. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +60 -24
  96. package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  97. package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  98. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +89 -10
  99. package/legacy/hooks/features/columns/gridColumnsUtils.js +79 -22
  100. package/legacy/hooks/features/columns/useGridColumnSpanning.js +107 -0
  101. package/legacy/hooks/features/columns/useGridColumns.js +24 -18
  102. package/legacy/hooks/features/dimensions/useGridDimensions.js +3 -3
  103. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -8
  104. package/legacy/hooks/features/editRows/useGridEditing.new.js +7 -3
  105. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +32 -24
  106. package/legacy/hooks/features/filter/useGridFilter.js +14 -9
  107. package/legacy/hooks/features/focus/useGridFocus.js +19 -9
  108. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -6
  109. package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
  110. package/legacy/hooks/features/rows/useGridRows.js +5 -4
  111. package/legacy/hooks/features/rows/useGridRowsMeta.js +6 -13
  112. package/legacy/hooks/features/scroll/useGridScroll.js +25 -3
  113. package/legacy/hooks/features/selection/useGridSelection.js +3 -2
  114. package/legacy/hooks/features/sorting/useGridSorting.js +5 -7
  115. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +65 -37
  116. package/legacy/index.js +1 -1
  117. package/legacy/internals/index.js +1 -0
  118. package/legacy/locales/huHU.js +120 -0
  119. package/legacy/locales/index.js +1 -0
  120. package/legacy/models/api/gridColumnSpanning.js +1 -0
  121. package/legacy/models/events/gridEvents.js +2 -3
  122. package/legacy/models/gridColumnSpanning.js +1 -0
  123. package/locales/huHU.d.ts +2 -0
  124. package/locales/huHU.js +108 -0
  125. package/locales/index.d.ts +1 -0
  126. package/locales/index.js +1 -0
  127. package/models/api/gridApiCommon.d.ts +2 -1
  128. package/models/api/gridColumnSpanning.d.ts +28 -0
  129. package/models/api/gridColumnSpanning.js +1 -0
  130. package/models/api/gridEditingApi.d.ts +49 -3
  131. package/models/colDef/gridColDef.d.ts +5 -0
  132. package/models/events/gridEventLookup.d.ts +3 -8
  133. package/models/events/gridEvents.d.ts +9 -14
  134. package/models/events/gridEvents.js +2 -3
  135. package/models/gridColumnSpanning.d.ts +12 -0
  136. package/models/gridColumnSpanning.js +1 -0
  137. package/models/gridEditRowModel.d.ts +1 -1
  138. package/models/params/gridCellParams.d.ts +12 -2
  139. package/models/params/gridRowParams.d.ts +5 -0
  140. package/models/props/DataGridProps.d.ts +1 -1
  141. package/modern/DataGrid/DataGrid.js +1 -1
  142. package/modern/DataGrid/useDataGridComponent.js +3 -1
  143. package/modern/components/GridRow.js +47 -21
  144. package/modern/components/base/GridOverlays.js +4 -3
  145. package/modern/components/cell/GridActionsCell.js +168 -21
  146. package/modern/components/cell/GridActionsCellItem.js +7 -5
  147. package/modern/components/cell/GridCell.js +28 -7
  148. package/modern/components/cell/GridEditInputCell.js +1 -1
  149. package/modern/components/cell/GridEditSingleSelectCell.js +20 -11
  150. package/modern/components/columnHeaders/GridColumnHeaderItem.js +4 -7
  151. package/modern/components/columnHeaders/GridColumnHeaders.js +1 -1
  152. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
  153. package/modern/components/panel/GridPanel.js +1 -0
  154. package/modern/components/panel/filterPanel/GridFilterForm.js +10 -6
  155. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +11 -6
  156. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +20 -13
  157. package/modern/components/panel/filterPanel/GridFilterInputValue.js +20 -13
  158. package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -1
  159. package/modern/components/virtualization/GridVirtualScroller.js +2 -0
  160. package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -3
  161. package/modern/constants/gridDetailPanelToggleField.js +2 -0
  162. package/modern/hooks/core/pipeProcessing/index.js +2 -1
  163. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
  164. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  165. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  166. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
  167. package/modern/hooks/features/columns/gridColumnsUtils.js +61 -8
  168. package/modern/hooks/features/columns/useGridColumnSpanning.js +107 -0
  169. package/modern/hooks/features/columns/useGridColumns.js +24 -18
  170. package/modern/hooks/features/dimensions/useGridDimensions.js +3 -3
  171. package/modern/hooks/features/editRows/useGridCellEditing.new.js +18 -10
  172. package/modern/hooks/features/editRows/useGridEditing.new.js +7 -3
  173. package/modern/hooks/features/editRows/useGridRowEditing.new.js +23 -15
  174. package/modern/hooks/features/filter/useGridFilter.js +14 -9
  175. package/modern/hooks/features/focus/useGridFocus.js +19 -9
  176. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +37 -7
  177. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  178. package/modern/hooks/features/rows/useGridRows.js +5 -4
  179. package/modern/hooks/features/rows/useGridRowsMeta.js +6 -13
  180. package/modern/hooks/features/scroll/useGridScroll.js +23 -3
  181. package/modern/hooks/features/selection/useGridSelection.js +3 -2
  182. package/modern/hooks/features/sorting/useGridSorting.js +10 -10
  183. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +54 -23
  184. package/modern/index.js +1 -1
  185. package/modern/internals/index.js +1 -0
  186. package/modern/locales/huHU.js +108 -0
  187. package/modern/locales/index.js +1 -0
  188. package/modern/models/api/gridColumnSpanning.js +1 -0
  189. package/modern/models/events/gridEvents.js +2 -3
  190. package/modern/models/gridColumnSpanning.js +1 -0
  191. package/node/DataGrid/DataGrid.js +1 -1
  192. package/node/DataGrid/useDataGridComponent.js +4 -1
  193. package/node/components/GridRow.js +50 -23
  194. package/node/components/base/GridOverlays.js +3 -2
  195. package/node/components/cell/GridActionsCell.js +172 -21
  196. package/node/components/cell/GridActionsCellItem.js +7 -4
  197. package/node/components/cell/GridCell.js +28 -7
  198. package/node/components/cell/GridEditInputCell.js +1 -1
  199. package/node/components/cell/GridEditSingleSelectCell.js +23 -13
  200. package/node/components/columnHeaders/GridColumnHeaderItem.js +4 -7
  201. package/node/components/columnHeaders/GridColumnHeaders.js +1 -1
  202. package/node/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
  203. package/node/components/panel/GridPanel.js +1 -0
  204. package/node/components/panel/filterPanel/GridFilterForm.js +15 -10
  205. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +14 -8
  206. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +23 -15
  207. package/node/components/panel/filterPanel/GridFilterInputValue.js +23 -15
  208. package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
  209. package/node/components/virtualization/GridVirtualScroller.js +2 -0
  210. package/node/components/virtualization/GridVirtualScrollerContent.js +1 -3
  211. package/node/constants/gridDetailPanelToggleField.js +9 -0
  212. package/node/hooks/core/pipeProcessing/index.js +13 -0
  213. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +51 -20
  214. package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +42 -0
  215. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -3
  216. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +80 -10
  217. package/node/hooks/features/columns/gridColumnsUtils.js +65 -9
  218. package/node/hooks/features/columns/useGridColumnSpanning.js +130 -0
  219. package/node/hooks/features/columns/useGridColumns.js +23 -17
  220. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  221. package/node/hooks/features/editRows/useGridCellEditing.new.js +18 -10
  222. package/node/hooks/features/editRows/useGridEditing.new.js +6 -2
  223. package/node/hooks/features/editRows/useGridRowEditing.new.js +21 -14
  224. package/node/hooks/features/filter/useGridFilter.js +14 -9
  225. package/node/hooks/features/focus/useGridFocus.js +19 -9
  226. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +40 -7
  227. package/node/hooks/features/rows/gridRowsSelector.js +3 -1
  228. package/node/hooks/features/rows/useGridRows.js +5 -4
  229. package/node/hooks/features/rows/useGridRowsMeta.js +6 -14
  230. package/node/hooks/features/scroll/useGridScroll.js +26 -2
  231. package/node/hooks/features/selection/useGridSelection.js +4 -2
  232. package/node/hooks/features/sorting/useGridSorting.js +10 -10
  233. package/node/hooks/features/virtualization/useGridVirtualScroller.js +59 -27
  234. package/node/index.js +1 -1
  235. package/node/internals/index.js +8 -0
  236. package/node/locales/huHU.js +118 -0
  237. package/node/locales/index.js +13 -0
  238. package/node/models/api/gridColumnSpanning.js +5 -0
  239. package/node/models/events/gridEvents.js +2 -3
  240. package/node/models/gridColumnSpanning.js +5 -0
  241. package/package.json +4 -4
  242. package/utils/domUtils.d.ts +2 -2
@@ -7,8 +7,7 @@ import { gridDensityRowHeightSelector, gridDensityFactorSelector } from '../dens
7
7
  import { gridFilterStateSelector } from '../filter/gridFilterSelector';
8
8
  import { gridPaginationSelector } from '../pagination/gridPaginationSelector';
9
9
  import { gridSortingStateSelector } from '../sorting/gridSortingSelector';
10
- import { GridEvents } from '../../../models/events/gridEvents';
11
- import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
10
+ import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
12
11
  export const rowsMetaStateInitializer = state => _extends({}, state, {
13
12
  rowsMeta: {
14
13
  currentPageTotalHeight: 0,
@@ -65,10 +64,11 @@ export const useGridRowsMeta = (apiRef, props) => {
65
64
  if (getRowSpacing) {
66
65
  var _spacing$top, _spacing$bottom;
67
66
 
68
- const index = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
67
+ const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
69
68
  const spacing = getRowSpacing(_extends({}, row, {
70
- isFirstVisible: index === 0,
71
- isLastVisible: index === currentPage.rows.length - 1
69
+ isFirstVisible: indexRelativeToCurrentPage === 0,
70
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
71
+ indexRelativeToCurrentPage
72
72
  }));
73
73
  initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
74
74
  initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
@@ -120,14 +120,7 @@ export const useGridRowsMeta = (apiRef, props) => {
120
120
  React.useEffect(() => {
121
121
  hydrateRowsMeta();
122
122
  }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
123
- const handlepipeProcessorRegister = React.useCallback(name => {
124
- if (name !== 'rowHeight') {
125
- return;
126
- }
127
-
128
- hydrateRowsMeta();
129
- }, [hydrateRowsMeta]);
130
- useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
123
+ useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
131
124
  const rowsMetaApi = {
132
125
  unstable_getRowHeight: getTargetRowHeight,
133
126
  unstable_getRowInternalSizes: getRowInternalSizes,
@@ -6,5 +6,7 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
6
6
  * @requires useGridColumns (state) - can be after, async only
7
7
  * @requires useGridRows (state) - can be after, async only
8
8
  * @requires useGridRowsMeta (state) - can be after, async only
9
+ * @requires useGridFilter (state)
10
+ * @requires useGridColumnSpanning (method)
9
11
  */
10
12
  export declare const useGridScroll: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination'>) => void;
@@ -1,10 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { useGridLogger } from '../../utils/useGridLogger';
3
3
  import { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
4
+ import { useGridSelector } from '../../utils/useGridSelector';
4
5
  import { gridPageSelector, gridPageSizeSelector } from '../pagination/gridPaginationSelector';
5
6
  import { gridRowCountSelector } from '../rows/gridRowsSelector';
6
7
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
7
- import { useGridApiMethod } from '../../utils/useGridApiMethod'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
8
+ import { useGridApiMethod } from '../../utils/useGridApiMethod';
9
+ import { gridVisibleSortedRowEntriesSelector } from '../filter/gridFilterSelector'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
8
10
  // Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
9
11
 
10
12
  function scrollIntoView(dimensions) {
@@ -31,6 +33,8 @@ function scrollIntoView(dimensions) {
31
33
  * @requires useGridColumns (state) - can be after, async only
32
34
  * @requires useGridRows (state) - can be after, async only
33
35
  * @requires useGridRowsMeta (state) - can be after, async only
36
+ * @requires useGridFilter (state)
37
+ * @requires useGridColumnSpanning (method)
34
38
  */
35
39
 
36
40
 
@@ -38,6 +42,7 @@ export const useGridScroll = (apiRef, props) => {
38
42
  const logger = useGridLogger(apiRef, 'useGridScroll');
39
43
  const colRef = apiRef.current.columnHeadersElementRef;
40
44
  const windowRef = apiRef.current.windowRef;
45
+ const visibleSortedRows = useGridSelector(apiRef, gridVisibleSortedRowEntriesSelector);
41
46
  const scrollToIndexes = React.useCallback(params => {
42
47
  const totalRowCount = gridRowCountSelector(apiRef);
43
48
  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
@@ -52,10 +57,27 @@ export const useGridScroll = (apiRef, props) => {
52
57
 
53
58
  if (params.colIndex != null) {
54
59
  const columnPositions = gridColumnPositionsSelector(apiRef);
60
+ let cellWidth;
61
+
62
+ if (typeof params.rowIndex !== 'undefined') {
63
+ var _visibleSortedRows$pa;
64
+
65
+ const rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
66
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
67
+
68
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
69
+ cellWidth = cellColSpanInfo.cellProps.width;
70
+ }
71
+ }
72
+
73
+ if (typeof cellWidth === 'undefined') {
74
+ cellWidth = visibleColumns[params.colIndex].computedWidth;
75
+ }
76
+
55
77
  scrollCoordinates.left = scrollIntoView({
56
78
  clientHeight: windowRef.current.clientWidth,
57
79
  scrollTop: windowRef.current.scrollLeft,
58
- offsetHeight: visibleColumns[params.colIndex].computedWidth,
80
+ offsetHeight: cellWidth,
59
81
  offsetTop: columnPositions[params.colIndex]
60
82
  });
61
83
  }
@@ -82,7 +104,7 @@ export const useGridScroll = (apiRef, props) => {
82
104
  }
83
105
 
84
106
  return false;
85
- }, [logger, apiRef, windowRef, props.pagination]);
107
+ }, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
86
108
  const scroll = React.useCallback(params => {
87
109
  if (windowRef.current && params.left != null && colRef.current) {
88
110
  colRef.current.scrollLeft = params.left;
@@ -13,6 +13,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../..
13
13
  import { GridCellModes } from '../../../models/gridEditRowModel';
14
14
  import { isKeyboardEvent, isNavigationKey } from '../../../utils/keyboardUtils';
15
15
  import { getVisibleRows, useGridVisibleRows } from '../../utils/useGridVisibleRows';
16
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
16
17
 
17
18
  const getSelectionModelPropValue = (selectionModelProp, prevSelectionModel) => {
18
19
  if (selectionModelProp == null) {
@@ -240,7 +241,7 @@ export const useGridSelection = (apiRef, props) => {
240
241
  return;
241
242
  }
242
243
 
243
- if (params.field === '__detail_panel_toggle__') {
244
+ if (params.field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
244
245
  // click to open the detail panel should not select the row
245
246
  return;
246
247
  }
@@ -348,7 +349,7 @@ export const useGridSelection = (apiRef, props) => {
348
349
  selectRows(apiRef.current.getAllRowIds(), true);
349
350
  }
350
351
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
351
- useGridApiEventHandler(apiRef, GridEvents.visibleRowsSet, removeOutdatedSelection);
352
+ useGridApiEventHandler(apiRef, GridEvents.sortedRowsSet, removeOutdatedSelection);
352
353
  useGridApiEventHandler(apiRef, GridEvents.cellClick, handleCellClick);
353
354
  useGridApiEventHandler(apiRef, GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
354
355
  useGridApiEventHandler(apiRef, GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
@@ -80,17 +80,16 @@ export const useGridSorting = (apiRef, props) => {
80
80
  */
81
81
 
82
82
  const applySorting = React.useCallback(() => {
83
- if (props.sortingMode === GridFeatureModeConstant.server) {
84
- logger.debug('Skipping sorting rows as sortingMode = server');
85
- apiRef.current.setState(state => _extends({}, state, {
86
- sorting: _extends({}, state.sorting, {
87
- sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
88
- })
89
- }));
90
- return;
91
- }
92
-
93
83
  apiRef.current.setState(state => {
84
+ if (props.sortingMode === GridFeatureModeConstant.server) {
85
+ logger.debug('Skipping sorting rows as sortingMode = server');
86
+ return _extends({}, state, {
87
+ sorting: _extends({}, state.sorting, {
88
+ sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
89
+ })
90
+ });
91
+ }
92
+
94
93
  const sortModel = gridSortModelSelector(state, apiRef.current.instanceId);
95
94
  const sortRowList = buildAggregatedSortingApplier(sortModel, apiRef);
96
95
  const sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
@@ -102,6 +101,7 @@ export const useGridSorting = (apiRef, props) => {
102
101
  })
103
102
  });
104
103
  });
104
+ apiRef.current.publishEvent(GridEvents.sortedRowsSet);
105
105
  apiRef.current.forceUpdate();
106
106
  }, [apiRef, logger, props.sortingMode]);
107
107
  const setSortModel = React.useCallback(model => {
@@ -2,6 +2,13 @@ import * as React from 'react';
2
2
  import { GridRenderContext } from '../../../models';
3
3
  import { GridRowId, GridRowModel } from '../../../models/gridRows';
4
4
  export declare function getIndexFromScroll(offset: number, positions: number[], sliceStart?: number, sliceEnd?: number): number;
5
+ export declare const getRenderableIndexes: ({ firstIndex, lastIndex, buffer, minFirstIndex, maxLastIndex, }: {
6
+ firstIndex: number;
7
+ lastIndex: number;
8
+ buffer: number;
9
+ minFirstIndex: number;
10
+ maxLastIndex: number;
11
+ }) => number[];
5
12
  interface UseGridVirtualScrollerProps {
6
13
  ref: React.Ref<HTMLDivElement>;
7
14
  disableVirtualization?: boolean;
@@ -2,6 +2,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  const _excluded = ["style"];
4
4
  import * as React from 'react';
5
+ import * as ReactDOM from 'react-dom';
5
6
  import { useForkRef } from '@mui/material/utils';
6
7
  import { useGridApiContext } from '../../utils/useGridApiContext';
7
8
  import { useGridRootProps } from '../../utils/useGridRootProps';
@@ -16,8 +17,9 @@ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
16
17
  import { clamp } from '../../../utils/utils';
17
18
  import { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';
18
19
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
20
+ import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions
21
+
19
22
  import { jsx as _jsx } from "react/jsx-runtime";
20
- // Uses binary search to avoid looping through all possible positions
21
23
  export function getIndexFromScroll(offset, positions, sliceStart = 0, sliceEnd = positions.length) {
22
24
  if (positions.length <= 0) {
23
25
  return -1;
@@ -31,9 +33,16 @@ export function getIndexFromScroll(offset, positions, sliceStart = 0, sliceEnd =
31
33
  const itemOffset = positions[pivot];
32
34
  return offset <= itemOffset ? getIndexFromScroll(offset, positions, sliceStart, pivot) : getIndexFromScroll(offset, positions, pivot + 1, sliceEnd);
33
35
  }
36
+ export const getRenderableIndexes = ({
37
+ firstIndex,
38
+ lastIndex,
39
+ buffer,
40
+ minFirstIndex,
41
+ maxLastIndex
42
+ }) => {
43
+ return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
44
+ };
34
45
  export const useGridVirtualScroller = props => {
35
- var _currentPage$range2;
36
-
37
46
  const apiRef = useGridApiContext();
38
47
  const rootProps = useGridRootProps();
39
48
  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
@@ -108,34 +117,28 @@ export const useGridVirtualScroller = props => {
108
117
  }
109
118
  }, []);
110
119
  useGridApiEventHandler(apiRef, GridEvents.resize, handleResize);
111
-
112
- const getRenderableIndexes = ({
113
- firstIndex,
114
- lastIndex,
115
- buffer,
116
- minFirstIndex,
117
- maxLastIndex
118
- }) => {
119
- return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
120
- };
121
-
122
120
  const updateRenderZonePosition = React.useCallback(nextRenderContext => {
123
- var _currentPage$range;
124
-
125
- const [firstRowToRender] = getRenderableIndexes({
121
+ const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
126
122
  firstIndex: nextRenderContext.firstRowIndex,
127
123
  lastIndex: nextRenderContext.lastRowIndex,
128
124
  minFirstIndex: 0,
129
- maxLastIndex: ((_currentPage$range = currentPage.range) == null ? void 0 : _currentPage$range.lastRowIndex) || 0,
125
+ maxLastIndex: currentPage.rows.length,
130
126
  buffer: rootProps.rowBuffer
131
127
  });
132
- const [firstColumnToRender] = getRenderableIndexes({
128
+ const [initialFirstColumnToRender] = getRenderableIndexes({
133
129
  firstIndex: nextRenderContext.firstColumnIndex,
134
130
  lastIndex: nextRenderContext.lastColumnIndex,
135
131
  minFirstIndex: renderZoneMinColumnIndex,
136
132
  maxLastIndex: renderZoneMaxColumnIndex,
137
133
  buffer: rootProps.columnBuffer
138
134
  });
135
+ const firstColumnToRender = getFirstNonSpannedColumnToRender({
136
+ firstColumnToRender: initialFirstColumnToRender,
137
+ apiRef,
138
+ firstRowToRender,
139
+ lastRowToRender,
140
+ visibleRows: currentPage.rows
141
+ });
139
142
  const top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];
140
143
  const left = gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
141
144
 
@@ -147,19 +150,22 @@ export const useGridVirtualScroller = props => {
147
150
  left
148
151
  });
149
152
  }
150
- }, [apiRef, (_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.lastRowIndex, onRenderZonePositioning, renderZoneMaxColumnIndex, renderZoneMinColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
153
+ }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
154
+ React.useLayoutEffect(() => {
155
+ if (renderContext) {
156
+ updateRenderZonePosition(renderContext);
157
+ }
158
+ }, [renderContext, updateRenderZonePosition]);
151
159
  const updateRenderContext = React.useCallback(nextRenderContext => {
152
160
  setRenderContext(nextRenderContext);
153
- updateRenderZonePosition(nextRenderContext);
154
161
  prevRenderContext.current = nextRenderContext;
155
- }, [setRenderContext, prevRenderContext, updateRenderZonePosition]);
162
+ }, [setRenderContext, prevRenderContext]);
156
163
  React.useEffect(() => {
157
164
  if (containerWidth == null) {
158
165
  return;
159
166
  }
160
167
 
161
168
  const initialRenderContext = computeRenderContext();
162
- prevRenderContext.current = initialRenderContext;
163
169
  updateRenderContext(initialRenderContext);
164
170
  const {
165
171
  top,
@@ -197,10 +203,13 @@ export const useGridVirtualScroller = props => {
197
203
  top: scrollTop,
198
204
  left: scrollLeft,
199
205
  renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
200
- });
206
+ }, event);
201
207
 
202
208
  if (shouldSetState) {
203
- updateRenderContext(nextRenderContext);
209
+ // Prevents batching render context changes
210
+ ReactDOM.flushSync(() => {
211
+ updateRenderContext(nextRenderContext);
212
+ });
204
213
  prevTotalWidth.current = columnsTotalWidth;
205
214
  }
206
215
  };
@@ -228,14 +237,32 @@ export const useGridVirtualScroller = props => {
228
237
  maxLastIndex: currentPage.rows.length,
229
238
  buffer: rowBuffer
230
239
  });
231
- const [firstColumnToRender, lastColumnToRender] = getRenderableIndexes({
240
+ const renderedRows = [];
241
+
242
+ for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
243
+ const row = currentPage.rows[i];
244
+ renderedRows.push(row);
245
+ apiRef.current.unstable_calculateColSpan({
246
+ rowId: row.id,
247
+ minFirstColumn,
248
+ maxLastColumn
249
+ });
250
+ }
251
+
252
+ const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({
232
253
  firstIndex: nextRenderContext.firstColumnIndex,
233
254
  lastIndex: nextRenderContext.lastColumnIndex,
234
255
  minFirstIndex: minFirstColumn,
235
256
  maxLastIndex: maxLastColumn,
236
257
  buffer: columnBuffer
237
258
  });
238
- const renderedRows = currentPage.rows.slice(firstRowToRender, lastRowToRender);
259
+ const firstColumnToRender = getFirstNonSpannedColumnToRender({
260
+ firstColumnToRender: initialFirstColumnToRender,
261
+ apiRef,
262
+ firstRowToRender,
263
+ lastRowToRender,
264
+ visibleRows: currentPage.rows
265
+ });
239
266
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
240
267
  const rows = [];
241
268
 
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MUI v5.8.0
1
+ /** @license MUI v5.9.0
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -12,6 +12,7 @@ export { useGridClipboard } from '../hooks/features/clipboard/useGridClipboard';
12
12
  export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridColumnHeaders';
13
13
  export { useGridColumnMenu, columnMenuStateInitializer, } from '../hooks/features/columnMenu/useGridColumnMenu';
14
14
  export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
15
+ export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
15
16
  export type { GridColumnRawLookup, GridColumnsRawState, GridHydrateColumnsValue, } from '../hooks/features/columns/gridColumnsInterfaces';
16
17
  export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
17
18
  export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
@@ -10,6 +10,7 @@ export { useGridClipboard } from '../hooks/features/clipboard/useGridClipboard';
10
10
  export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridColumnHeaders';
11
11
  export { useGridColumnMenu, columnMenuStateInitializer } from '../hooks/features/columnMenu/useGridColumnMenu';
12
12
  export { useGridColumns, columnsStateInitializer } from '../hooks/features/columns/useGridColumns';
13
+ export { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
13
14
  export { useGridDensity, densityStateInitializer } from '../hooks/features/density/useGridDensity';
14
15
  export { useGridCsvExport } from '../hooks/features/export/useGridCsvExport';
15
16
  export { useGridPrintExport } from '../hooks/features/export/useGridPrintExport';
@@ -460,7 +460,7 @@ DataGridRaw.propTypes = {
460
460
  * @param {GridEditCellPropsParams} params With all properties from [[GridEditCellPropsParams]].
461
461
  * @param {MuiEvent<React.SyntheticEvent>} event The event that caused this prop to be called.
462
462
  * @param {GridCallbackDetails} details Additional details for this callback.
463
- * @deprecated use `preProcessEditCellProps` from the [`GridColDef`](/api/data-grid/grid-col-def/)
463
+ * @deprecated use `preProcessEditCellProps` from the [`GridColDef`](/x/api/data-grid/grid-col-def/)
464
464
  */
465
465
  onEditCellPropsChange: PropTypes.func,
466
466
 
@@ -24,6 +24,7 @@ import { useGridEvents } from '../hooks/features/events/useGridEvents';
24
24
  import { useGridDimensions } from '../hooks/features/dimensions/useGridDimensions';
25
25
  import { rowsMetaStateInitializer, useGridRowsMeta } from '../hooks/features/rows/useGridRowsMeta';
26
26
  import { useGridStatePersistence } from '../hooks/features/statePersistence/useGridStatePersistence';
27
+ import { useGridColumnSpanning } from '../hooks/features/columns/useGridColumnSpanning';
27
28
  export var useDataGridComponent = function useDataGridComponent(props) {
28
29
  var _props$experimentalFe, _props$experimentalFe2;
29
30
 
@@ -55,12 +56,13 @@ export var useDataGridComponent = function useDataGridComponent(props) {
55
56
  useGridColumns(apiRef, props);
56
57
  useGridRows(apiRef, props);
57
58
  useGridParamsApi(apiRef);
59
+ useGridColumnSpanning(apiRef);
58
60
  var useGridEditing = (_props$experimentalFe2 = props.experimentalFeatures) != null && _props$experimentalFe2.newEditingApi ? useGridEditing_new : useGridEditing_old;
59
61
  useGridEditing(apiRef, props);
60
62
  useGridFocus(apiRef, props);
61
- useGridSorting(apiRef, props);
62
63
  useGridPreferencesPanel(apiRef);
63
64
  useGridFilter(apiRef, props);
65
+ useGridSorting(apiRef, props);
64
66
  useGridDensity(apiRef, props);
65
67
  useGridPagination(apiRef, props);
66
68
  useGridRowsMeta(apiRef, props);
@@ -20,6 +20,7 @@ import { useGridVisibleRows } from '../hooks/utils/useGridVisibleRows';
20
20
  import { findParentElementFromClassName } from '../utils/domUtils';
21
21
  import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../colDef/gridCheckboxSelectionColDef';
22
22
  import { GRID_ACTIONS_COLUMN_TYPE } from '../colDef/gridActionsColDef';
23
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../constants/gridDetailPanelToggleField';
23
24
  import { jsx as _jsx } from "react/jsx-runtime";
24
25
  import { jsxs as _jsxs } from "react/jsx-runtime";
25
26
 
@@ -134,7 +135,7 @@ function GridRow(props) {
134
135
  } // User opened a detail panel
135
136
 
136
137
 
137
- if (field === '__detail_panel_toggle__') {
138
+ if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
138
139
  return;
139
140
  } // User is editing a cell
140
141
 
@@ -179,7 +180,8 @@ function GridRow(props) {
179
180
 
180
181
  var rowParams = _extends({}, apiRef.current.getRowParams(rowId), {
181
182
  isFirstVisible: indexRelativeToCurrentPage === 0,
182
- isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1
183
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
184
+ indexRelativeToCurrentPage: indexRelativeToCurrentPage
183
185
  });
184
186
 
185
187
  rowClassName = rootProps.getRowClassName(rowParams);
@@ -188,8 +190,6 @@ function GridRow(props) {
188
190
  var cells = [];
189
191
 
190
192
  for (var i = 0; i < renderedColumns.length; i += 1) {
191
- var _rootProps$components;
192
-
193
193
  var column = renderedColumns[i];
194
194
  var indexRelativeToAllColumns = firstColumnToRender + i;
195
195
  var isLastColumn = indexRelativeToAllColumns === visibleColumns.length - 1;
@@ -218,7 +218,16 @@ function GridRow(props) {
218
218
  if (editCellState != null && column.renderEditCell) {
219
219
  var _rootProps$classes2;
220
220
 
221
- var params = _extends({}, cellParams, editCellState, {
221
+ var updatedRow = row;
222
+
223
+ if (apiRef.current.unstable_getRowWithUpdatedValues) {
224
+ // Only the new editing API has this method
225
+ updatedRow = apiRef.current.unstable_getRowWithUpdatedValues(rowId, column.field);
226
+ }
227
+
228
+ var params = _extends({}, cellParams, {
229
+ row: updatedRow
230
+ }, editCellState, {
222
231
  api: apiRef.current
223
232
  });
224
233
 
@@ -234,24 +243,34 @@ function GridRow(props) {
234
243
 
235
244
  var hasFocus = cellFocus !== null && cellFocus.id === rowId && cellFocus.field === column.field;
236
245
  var tabIndex = cellTabIndex !== null && cellTabIndex.id === rowId && cellTabIndex.field === column.field && cellParams.cellMode === 'view' ? 0 : -1;
237
- cells.push( /*#__PURE__*/_jsx(rootProps.components.Cell, _extends({
238
- value: cellParams.value,
239
- field: column.field,
240
- width: column.computedWidth,
241
- rowId: rowId,
242
- height: rowHeight,
243
- showRightBorder: showRightBorder,
244
- formattedValue: cellParams.formattedValue,
245
- align: column.align || 'left',
246
- cellMode: cellParams.cellMode,
247
- colIndex: indexRelativeToAllColumns,
248
- isEditable: cellParams.isEditable,
249
- hasFocus: hasFocus,
250
- tabIndex: tabIndex,
251
- className: clsx(classNames)
252
- }, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.cell, {
253
- children: content
254
- }), column.field));
246
+ var cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
247
+
248
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
249
+ var _rootProps$components;
250
+
251
+ var _cellColSpanInfo$cell = cellColSpanInfo.cellProps,
252
+ colSpan = _cellColSpanInfo$cell.colSpan,
253
+ width = _cellColSpanInfo$cell.width;
254
+ cells.push( /*#__PURE__*/_jsx(rootProps.components.Cell, _extends({
255
+ value: cellParams.value,
256
+ field: column.field,
257
+ width: width,
258
+ rowId: rowId,
259
+ height: rowHeight,
260
+ showRightBorder: showRightBorder,
261
+ formattedValue: cellParams.formattedValue,
262
+ align: column.align || 'left',
263
+ cellMode: cellParams.cellMode,
264
+ colIndex: indexRelativeToAllColumns,
265
+ isEditable: cellParams.isEditable,
266
+ hasFocus: hasFocus,
267
+ tabIndex: tabIndex,
268
+ className: clsx(classNames),
269
+ colSpan: colSpan
270
+ }, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.cell, {
271
+ children: content
272
+ }), column.field));
273
+ }
255
274
  }
256
275
 
257
276
  var emptyCellWidth = containerWidth - columnsTotalWidth;
@@ -285,6 +304,11 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
285
304
  containerWidth: PropTypes.number.isRequired,
286
305
  editRowsState: PropTypes.object.isRequired,
287
306
  firstColumnToRender: PropTypes.number.isRequired,
307
+
308
+ /**
309
+ * Index of the row in the whole sorted and filtered dataset.
310
+ * If some rows above have expanded children, this index also take those children into account.
311
+ */
288
312
  index: PropTypes.number.isRequired,
289
313
  isLastVisible: PropTypes.bool,
290
314
  lastColumnToRender: PropTypes.number.isRequired,
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';
5
5
  import { useGridSelector } from '../../hooks/utils/useGridSelector';
6
6
  import { gridVisibleRowCountSelector } from '../../hooks/features/filter/gridFilterSelector';
7
- import { gridRowCountSelector } from '../../hooks/features/rows/gridRowsSelector';
7
+ import { gridRowCountSelector, gridRowsLoadingSelector } from '../../hooks/features/rows/gridRowsSelector';
8
8
  import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
9
9
  import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
10
10
  import { gridDensityHeaderHeightSelector } from '../../hooks/features/density/densitySelector';
@@ -61,8 +61,9 @@ export function GridOverlays() {
61
61
  var rootProps = useGridRootProps();
62
62
  var totalRowCount = useGridSelector(apiRef, gridRowCountSelector);
63
63
  var visibleRowCount = useGridSelector(apiRef, gridVisibleRowCountSelector);
64
- var showNoRowsOverlay = !rootProps.loading && totalRowCount === 0;
65
- var showNoResultsOverlay = !rootProps.loading && totalRowCount > 0 && visibleRowCount === 0;
64
+ var loading = useGridSelector(apiRef, gridRowsLoadingSelector);
65
+ var showNoRowsOverlay = !loading && totalRowCount === 0;
66
+ var showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
66
67
  var overlay = null;
67
68
 
68
69
  if (showNoRowsOverlay) {