@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
@@ -45,11 +45,7 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
45
45
  stateSelector: gridFilterModelSelector,
46
46
  changeEvent: GridEvents.filterModelChange
47
47
  });
48
- /**
49
- * API METHODS
50
- */
51
-
52
- var applyFilters = React.useCallback(function () {
48
+ var updateFilteredRows = React.useCallback(function () {
53
49
  apiRef.current.setState(function (state) {
54
50
  var filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);
55
51
  var isRowMatchingFilters = props.filterMode === GridFeatureModeConstant.client ? buildAggregatedFilterApplier(filterModel, apiRef) : null;
@@ -60,9 +56,16 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
60
56
  filter: _extends({}, state.filter, filteringResult)
61
57
  });
62
58
  });
63
- apiRef.current.publishEvent(GridEvents.visibleRowsSet);
59
+ apiRef.current.publishEvent(GridEvents.filteredRowsSet);
60
+ }, [props.filterMode, apiRef]);
61
+ /**
62
+ * API METHODS
63
+ */
64
+
65
+ var applyFilters = React.useCallback(function () {
66
+ updateFilteredRows();
64
67
  apiRef.current.forceUpdate();
65
- }, [apiRef, props.filterMode]);
68
+ }, [apiRef, updateFilteredRows]);
66
69
  var upsertFilterItem = React.useCallback(function (item) {
67
70
  var filterModel = gridFilterModelSelector(apiRef);
68
71
 
@@ -260,8 +263,10 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
260
263
  if (methodName === 'filtering') {
261
264
  apiRef.current.unstable_applyFilters();
262
265
  }
263
- }, [apiRef]);
264
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.unstable_applyFilters);
266
+ }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
267
+ // Otherwise, the state is not consistent during the render
268
+
269
+ useGridApiEventHandler(apiRef, GridEvents.rowsSet, updateFilteredRows);
265
270
  useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
266
271
  useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
267
272
  useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
@@ -105,21 +105,31 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
105
105
  rowIndexToFocus += 1;
106
106
  }
107
107
 
108
+ var currentPage = getVisibleRows(apiRef, {
109
+ pagination: props.pagination,
110
+ paginationMode: props.paginationMode
111
+ });
112
+
108
113
  if (columnIndexToFocus >= visibleColumns.length) {
109
- // Go to next row if we are at the last column
114
+ // Go to next row if we are after the last column
110
115
  rowIndexToFocus += 1;
111
- columnIndexToFocus = 0;
116
+
117
+ if (rowIndexToFocus < currentPage.rows.length) {
118
+ // Go to first column of the next row if there's one more row
119
+ columnIndexToFocus = 0;
120
+ }
112
121
  } else if (columnIndexToFocus < 0) {
113
- // Go to previous row if we are at the first column
122
+ // Go to previous row if we are before the first column
114
123
  rowIndexToFocus -= 1;
115
- columnIndexToFocus = visibleColumns.length - 1;
124
+
125
+ if (rowIndexToFocus >= 0) {
126
+ // Go to last column of the previous if there's one more row
127
+ columnIndexToFocus = visibleColumns.length - 1;
128
+ }
116
129
  }
117
130
 
118
- var currentPage = getVisibleRows(apiRef, {
119
- pagination: props.pagination,
120
- paginationMode: props.paginationMode
121
- });
122
- rowIndexToFocus = clamp(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
131
+ rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
132
+ columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
123
133
  var rowToFocus = currentPage.rows[rowIndexToFocus];
124
134
  var columnToFocus = visibleColumns[columnIndexToFocus];
125
135
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
@@ -9,6 +9,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef/gridCheckboxSel
9
9
  import { gridClasses } from '../../../constants/gridClasses';
10
10
  import { GridCellModes } from '../../../models/gridEditRowModel';
11
11
  import { isNavigationKey } from '../../../utils/keyboardUtils';
12
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
12
13
  /**
13
14
  * @requires useGridSorting (method) - can be after
14
15
  * @requires useGridFilter (state) - can be after
@@ -16,21 +17,41 @@ import { isNavigationKey } from '../../../utils/keyboardUtils';
16
17
  * @requires useGridDimensions (method) - can be after
17
18
  * @requires useGridFocus (method) - can be after
18
19
  * @requires useGridScroll (method) - can be after
20
+ * @requires useGridColumnSpanning (method) - can be after
19
21
  */
20
22
 
21
23
  export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef, props) {
22
24
  var logger = useGridLogger(apiRef, 'useGridKeyboardNavigation');
23
25
  var currentPage = useGridVisibleRows(apiRef, props);
26
+ /**
27
+ * @param {number} colIndex Index of the column to focus
28
+ * @param {number} rowIndex index of the row to focus
29
+ * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
30
+ */
31
+
24
32
  var goToCell = React.useCallback(function (colIndex, rowIndex) {
33
+ var _visibleSortedRows$ro;
34
+
35
+ var closestColumnToUse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'left';
36
+ var visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
37
+ var rowId = (_visibleSortedRows$ro = visibleSortedRows[rowIndex]) == null ? void 0 : _visibleSortedRows$ro.id;
38
+ var nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
39
+
40
+ if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
41
+ if (closestColumnToUse === 'left') {
42
+ colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
43
+ } else if (closestColumnToUse === 'right') {
44
+ colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
45
+ }
46
+ }
47
+
25
48
  logger.debug("Navigating to cell row ".concat(rowIndex, ", col ").concat(colIndex));
26
49
  apiRef.current.scrollToIndexes({
27
50
  colIndex: colIndex,
28
51
  rowIndex: rowIndex
29
52
  });
30
53
  var field = apiRef.current.getVisibleColumns()[colIndex].field;
31
- var visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
32
- var node = visibleSortedRows[rowIndex];
33
- apiRef.current.setCellFocus(node.id, field);
54
+ apiRef.current.setCellFocus(rowId, field);
34
55
  }, [apiRef, logger]);
35
56
  var goToHeader = React.useCallback(function (colIndex, event) {
36
57
  logger.debug("Navigating to header col ".concat(colIndex));
@@ -85,7 +106,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
85
106
  case 'ArrowRight':
86
107
  {
87
108
  if (colIndexBefore < lastColIndex) {
88
- goToCell(colIndexBefore + 1, rowIndexBefore);
109
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
89
110
  }
90
111
 
91
112
  break;
@@ -104,9 +125,9 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
104
125
  {
105
126
  // "Tab" is only triggered by the row / cell editing feature
106
127
  if (event.shiftKey && colIndexBefore > firstColIndex) {
107
- goToCell(colIndexBefore - 1, rowIndexBefore);
128
+ goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
108
129
  } else if (!event.shiftKey && colIndexBefore < lastColIndex) {
109
- goToCell(colIndexBefore + 1, rowIndexBefore);
130
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
110
131
  }
111
132
 
112
133
  break;
@@ -114,6 +135,18 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
114
135
 
115
136
  case ' ':
116
137
  {
138
+ var field = params.field;
139
+
140
+ if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
141
+ break;
142
+ }
143
+
144
+ var colDef = params.colDef;
145
+
146
+ if (colDef && colDef.type === 'treeDataGroup') {
147
+ break;
148
+ }
149
+
117
150
  if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
118
151
  goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
119
152
  }
@@ -5,6 +5,9 @@ export var gridRowsStateSelector = function gridRowsStateSelector(state) {
5
5
  export var gridRowCountSelector = createSelector(gridRowsStateSelector, function (rows) {
6
6
  return rows.totalRowCount;
7
7
  });
8
+ export var gridRowsLoadingSelector = createSelector(gridRowsStateSelector, function (rows) {
9
+ return rows.loading;
10
+ });
8
11
  export var gridTopLevelRowCountSelector = createSelector(gridRowsStateSelector, function (rows) {
9
12
  return rows.totalTopLevelRowCount;
10
13
  });
@@ -44,7 +44,7 @@ var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
44
44
  };
45
45
  };
46
46
 
47
- var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTree, apiRef, rowCountProp) {
47
+ var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTree, apiRef, rowCountProp, loadingProp) {
48
48
  var value = rowsCache.state.value;
49
49
  var rowCount = rowCountProp != null ? rowCountProp : 0;
50
50
  var groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', _extends({}, value, {
@@ -54,6 +54,7 @@ var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTr
54
54
  return node.parent == null;
55
55
  }).length;
56
56
  return _extends({}, groupingResponse, {
57
+ loading: loadingProp,
57
58
  totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
58
59
  totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
59
60
  });
@@ -76,7 +77,7 @@ export var rowsStateInitializer = function rowsStateInitializer(state, props, ap
76
77
  lastUpdateMs: Date.now()
77
78
  };
78
79
  return _extends({}, state, {
79
- rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount),
80
+ rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
80
81
  rowsCache: rowsCache // TODO remove from state
81
82
 
82
83
  });
@@ -109,7 +110,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
109
110
  rowsCache.current.lastUpdateMs = Date.now();
110
111
  apiRef.current.setState(function (state) {
111
112
  return _extends({}, state, {
112
- rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount)
113
+ rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
113
114
  });
114
115
  });
115
116
  apiRef.current.publishEvent(GridEvents.rowsSet);
@@ -136,7 +137,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
136
137
  }
137
138
 
138
139
  run();
139
- }, [props.throttleRowsMs, props.rowCount, apiRef]);
140
+ }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
140
141
  /**
141
142
  * API METHODS
142
143
  */
@@ -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 var rowsMetaStateInitializer = function rowsMetaStateInitializer(state) {
13
12
  return _extends({}, state, {
14
13
  rowsMeta: {
@@ -65,10 +64,11 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
65
64
  if (getRowSpacing) {
66
65
  var _spacing$top, _spacing$bottom;
67
66
 
68
- var index = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
67
+ var indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
69
68
  var 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: 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;
@@ -122,14 +122,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
122
122
  React.useEffect(function () {
123
123
  hydrateRowsMeta();
124
124
  }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
125
- var handlepipeProcessorRegister = React.useCallback(function (name) {
126
- if (name !== 'rowHeight') {
127
- return;
128
- }
129
-
130
- hydrateRowsMeta();
131
- }, [hydrateRowsMeta]);
132
- useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
125
+ useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
133
126
  var rowsMetaApi = {
134
127
  unstable_getRowHeight: getTargetRowHeight,
135
128
  unstable_getRowInternalSizes: getRowInternalSizes,
@@ -2,10 +2,12 @@ import _typeof from "@babel/runtime/helpers/esm/typeof";
2
2
  import * as React from 'react';
3
3
  import { useGridLogger } from '../../utils/useGridLogger';
4
4
  import { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
5
+ import { useGridSelector } from '../../utils/useGridSelector';
5
6
  import { gridPageSelector, gridPageSizeSelector } from '../pagination/gridPaginationSelector';
6
7
  import { gridRowCountSelector } from '../rows/gridRowsSelector';
7
8
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
8
- import { useGridApiMethod } from '../../utils/useGridApiMethod'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
9
+ import { useGridApiMethod } from '../../utils/useGridApiMethod';
10
+ import { gridVisibleSortedRowEntriesSelector } from '../filter/gridFilterSelector'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
9
11
  // Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
10
12
 
11
13
  function scrollIntoView(dimensions) {
@@ -30,6 +32,8 @@ function scrollIntoView(dimensions) {
30
32
  * @requires useGridColumns (state) - can be after, async only
31
33
  * @requires useGridRows (state) - can be after, async only
32
34
  * @requires useGridRowsMeta (state) - can be after, async only
35
+ * @requires useGridFilter (state)
36
+ * @requires useGridColumnSpanning (method)
33
37
  */
34
38
 
35
39
 
@@ -37,6 +41,7 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
37
41
  var logger = useGridLogger(apiRef, 'useGridScroll');
38
42
  var colRef = apiRef.current.columnHeadersElementRef;
39
43
  var windowRef = apiRef.current.windowRef;
44
+ var visibleSortedRows = useGridSelector(apiRef, gridVisibleSortedRowEntriesSelector);
40
45
  var scrollToIndexes = React.useCallback(function (params) {
41
46
  var totalRowCount = gridRowCountSelector(apiRef);
42
47
  var visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
@@ -51,10 +56,27 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
51
56
 
52
57
  if (params.colIndex != null) {
53
58
  var columnPositions = gridColumnPositionsSelector(apiRef);
59
+ var cellWidth;
60
+
61
+ if (typeof params.rowIndex !== 'undefined') {
62
+ var _visibleSortedRows$pa;
63
+
64
+ var rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
65
+ var cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
66
+
67
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
68
+ cellWidth = cellColSpanInfo.cellProps.width;
69
+ }
70
+ }
71
+
72
+ if (typeof cellWidth === 'undefined') {
73
+ cellWidth = visibleColumns[params.colIndex].computedWidth;
74
+ }
75
+
54
76
  scrollCoordinates.left = scrollIntoView({
55
77
  clientHeight: windowRef.current.clientWidth,
56
78
  scrollTop: windowRef.current.scrollLeft,
57
- offsetHeight: visibleColumns[params.colIndex].computedWidth,
79
+ offsetHeight: cellWidth,
58
80
  offsetTop: columnPositions[params.colIndex]
59
81
  });
60
82
  }
@@ -81,7 +103,7 @@ export var useGridScroll = function useGridScroll(apiRef, props) {
81
103
  }
82
104
 
83
105
  return false;
84
- }, [logger, apiRef, windowRef, props.pagination]);
106
+ }, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
85
107
  var scroll = React.useCallback(function (params) {
86
108
  if (windowRef.current && params.left != null && colRef.current) {
87
109
  colRef.current.scrollLeft = params.left;
@@ -14,6 +14,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../..
14
14
  import { GridCellModes } from '../../../models/gridEditRowModel';
15
15
  import { isKeyboardEvent, isNavigationKey } from '../../../utils/keyboardUtils';
16
16
  import { getVisibleRows, useGridVisibleRows } from '../../utils/useGridVisibleRows';
17
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
17
18
 
18
19
  var getSelectionModelPropValue = function getSelectionModelPropValue(selectionModelProp, prevSelectionModel) {
19
20
  if (selectionModelProp == null) {
@@ -265,7 +266,7 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
265
266
  return;
266
267
  }
267
268
 
268
- if (params.field === '__detail_panel_toggle__') {
269
+ if (params.field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
269
270
  // click to open the detail panel should not select the row
270
271
  return;
271
272
  }
@@ -375,7 +376,7 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
375
376
  selectRows(apiRef.current.getAllRowIds(), true);
376
377
  }
377
378
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
378
- useGridApiEventHandler(apiRef, GridEvents.visibleRowsSet, removeOutdatedSelection);
379
+ useGridApiEventHandler(apiRef, GridEvents.sortedRowsSet, removeOutdatedSelection);
379
380
  useGridApiEventHandler(apiRef, GridEvents.cellClick, handleCellClick);
380
381
  useGridApiEventHandler(apiRef, GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
381
382
  useGridApiEventHandler(apiRef, GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
@@ -86,19 +86,16 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
86
86
  */
87
87
 
88
88
  var applySorting = React.useCallback(function () {
89
- if (props.sortingMode === GridFeatureModeConstant.server) {
90
- logger.debug('Skipping sorting rows as sortingMode = server');
91
- apiRef.current.setState(function (state) {
89
+ apiRef.current.setState(function (state) {
90
+ if (props.sortingMode === GridFeatureModeConstant.server) {
91
+ logger.debug('Skipping sorting rows as sortingMode = server');
92
92
  return _extends({}, state, {
93
93
  sorting: _extends({}, state.sorting, {
94
94
  sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
95
95
  })
96
96
  });
97
- });
98
- return;
99
- }
97
+ }
100
98
 
101
- apiRef.current.setState(function (state) {
102
99
  var sortModel = gridSortModelSelector(state, apiRef.current.instanceId);
103
100
  var sortRowList = buildAggregatedSortingApplier(sortModel, apiRef);
104
101
  var sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
@@ -110,6 +107,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
110
107
  })
111
108
  });
112
109
  });
110
+ apiRef.current.publishEvent(GridEvents.sortedRowsSet);
113
111
  apiRef.current.forceUpdate();
114
112
  }, [apiRef, logger, props.sortingMode]);
115
113
  var setSortModel = React.useCallback(function (model) {
@@ -3,6 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  var _excluded = ["style"];
5
5
  import * as React from 'react';
6
+ import * as ReactDOM from 'react-dom';
6
7
  import { useForkRef } from '@mui/material/utils';
7
8
  import { useGridApiContext } from '../../utils/useGridApiContext';
8
9
  import { useGridRootProps } from '../../utils/useGridRootProps';
@@ -17,8 +18,9 @@ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
17
18
  import { clamp } from '../../../utils/utils';
18
19
  import { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';
19
20
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
21
+ import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions
22
+
20
23
  import { jsx as _jsx } from "react/jsx-runtime";
21
- // Uses binary search to avoid looping through all possible positions
22
24
  export function getIndexFromScroll(offset, positions) {
23
25
  var sliceStart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
24
26
  var sliceEnd = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : positions.length;
@@ -35,9 +37,15 @@ export function getIndexFromScroll(offset, positions) {
35
37
  var itemOffset = positions[pivot];
36
38
  return offset <= itemOffset ? getIndexFromScroll(offset, positions, sliceStart, pivot) : getIndexFromScroll(offset, positions, pivot + 1, sliceEnd);
37
39
  }
40
+ export var getRenderableIndexes = function getRenderableIndexes(_ref) {
41
+ var firstIndex = _ref.firstIndex,
42
+ lastIndex = _ref.lastIndex,
43
+ buffer = _ref.buffer,
44
+ minFirstIndex = _ref.minFirstIndex,
45
+ maxLastIndex = _ref.maxLastIndex;
46
+ return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
47
+ };
38
48
  export var useGridVirtualScroller = function useGridVirtualScroller(props) {
39
- var _currentPage$range2;
40
-
41
49
  var apiRef = useGridApiContext();
42
50
  var rootProps = useGridRootProps();
43
51
  var visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
@@ -89,9 +97,9 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
89
97
  };
90
98
  }
91
99
 
92
- var _ref = scrollPosition.current,
93
- top = _ref.top,
94
- left = _ref.left;
100
+ var _ref2 = scrollPosition.current,
101
+ top = _ref2.top,
102
+ left = _ref2.left;
95
103
  var firstRowIndex = getIndexFromScroll(top, rowsMeta.positions);
96
104
  var lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getIndexFromScroll(top + rootRef.current.clientHeight, rowsMeta.positions);
97
105
  var firstColumnIndex = getIndexFromScroll(left, columnPositions);
@@ -121,28 +129,17 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
121
129
  }
122
130
  }, []);
123
131
  useGridApiEventHandler(apiRef, GridEvents.resize, handleResize);
124
-
125
- var getRenderableIndexes = function getRenderableIndexes(_ref2) {
126
- var firstIndex = _ref2.firstIndex,
127
- lastIndex = _ref2.lastIndex,
128
- buffer = _ref2.buffer,
129
- minFirstIndex = _ref2.minFirstIndex,
130
- maxLastIndex = _ref2.maxLastIndex;
131
- return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
132
- };
133
-
134
132
  var updateRenderZonePosition = React.useCallback(function (nextRenderContext) {
135
- var _currentPage$range;
136
-
137
133
  var _getRenderableIndexes = getRenderableIndexes({
138
134
  firstIndex: nextRenderContext.firstRowIndex,
139
135
  lastIndex: nextRenderContext.lastRowIndex,
140
136
  minFirstIndex: 0,
141
- maxLastIndex: ((_currentPage$range = currentPage.range) == null ? void 0 : _currentPage$range.lastRowIndex) || 0,
137
+ maxLastIndex: currentPage.rows.length,
142
138
  buffer: rootProps.rowBuffer
143
139
  }),
144
- _getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 1),
145
- firstRowToRender = _getRenderableIndexes2[0];
140
+ _getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
141
+ firstRowToRender = _getRenderableIndexes2[0],
142
+ lastRowToRender = _getRenderableIndexes2[1];
146
143
 
147
144
  var _getRenderableIndexes3 = getRenderableIndexes({
148
145
  firstIndex: nextRenderContext.firstColumnIndex,
@@ -152,8 +149,15 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
152
149
  buffer: rootProps.columnBuffer
153
150
  }),
154
151
  _getRenderableIndexes4 = _slicedToArray(_getRenderableIndexes3, 1),
155
- firstColumnToRender = _getRenderableIndexes4[0];
156
-
152
+ initialFirstColumnToRender = _getRenderableIndexes4[0];
153
+
154
+ var firstColumnToRender = getFirstNonSpannedColumnToRender({
155
+ firstColumnToRender: initialFirstColumnToRender,
156
+ apiRef: apiRef,
157
+ firstRowToRender: firstRowToRender,
158
+ lastRowToRender: lastRowToRender,
159
+ visibleRows: currentPage.rows
160
+ });
157
161
  var top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];
158
162
  var left = gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
159
163
 
@@ -165,19 +169,22 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
165
169
  left: left
166
170
  });
167
171
  }
168
- }, [apiRef, (_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.lastRowIndex, onRenderZonePositioning, renderZoneMaxColumnIndex, renderZoneMinColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
172
+ }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
173
+ React.useLayoutEffect(function () {
174
+ if (renderContext) {
175
+ updateRenderZonePosition(renderContext);
176
+ }
177
+ }, [renderContext, updateRenderZonePosition]);
169
178
  var updateRenderContext = React.useCallback(function (nextRenderContext) {
170
179
  setRenderContext(nextRenderContext);
171
- updateRenderZonePosition(nextRenderContext);
172
180
  prevRenderContext.current = nextRenderContext;
173
- }, [setRenderContext, prevRenderContext, updateRenderZonePosition]);
181
+ }, [setRenderContext, prevRenderContext]);
174
182
  React.useEffect(function () {
175
183
  if (containerWidth == null) {
176
184
  return;
177
185
  }
178
186
 
179
187
  var initialRenderContext = computeRenderContext();
180
- prevRenderContext.current = initialRenderContext;
181
188
  updateRenderContext(initialRenderContext);
182
189
  var _ref3 = scrollPosition.current,
183
190
  top = _ref3.top,
@@ -213,10 +220,13 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
213
220
  top: scrollTop,
214
221
  left: scrollLeft,
215
222
  renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
216
- });
223
+ }, event);
217
224
 
218
225
  if (shouldSetState) {
219
- updateRenderContext(nextRenderContext);
226
+ // Prevents batching render context changes
227
+ ReactDOM.flushSync(function () {
228
+ updateRenderContext(nextRenderContext);
229
+ });
220
230
  prevTotalWidth.current = columnsTotalWidth;
221
231
  }
222
232
  };
@@ -251,6 +261,18 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
251
261
  firstRowToRender = _getRenderableIndexes6[0],
252
262
  lastRowToRender = _getRenderableIndexes6[1];
253
263
 
264
+ var renderedRows = [];
265
+
266
+ for (var i = firstRowToRender; i < lastRowToRender; i += 1) {
267
+ var row = currentPage.rows[i];
268
+ renderedRows.push(row);
269
+ apiRef.current.unstable_calculateColSpan({
270
+ rowId: row.id,
271
+ minFirstColumn: minFirstColumn,
272
+ maxLastColumn: maxLastColumn
273
+ });
274
+ }
275
+
254
276
  var _getRenderableIndexes7 = getRenderableIndexes({
255
277
  firstIndex: nextRenderContext.firstColumnIndex,
256
278
  lastIndex: nextRenderContext.lastColumnIndex,
@@ -259,20 +281,26 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
259
281
  buffer: columnBuffer
260
282
  }),
261
283
  _getRenderableIndexes8 = _slicedToArray(_getRenderableIndexes7, 2),
262
- firstColumnToRender = _getRenderableIndexes8[0],
284
+ initialFirstColumnToRender = _getRenderableIndexes8[0],
263
285
  lastColumnToRender = _getRenderableIndexes8[1];
264
286
 
265
- var renderedRows = currentPage.rows.slice(firstRowToRender, lastRowToRender);
287
+ var firstColumnToRender = getFirstNonSpannedColumnToRender({
288
+ firstColumnToRender: initialFirstColumnToRender,
289
+ apiRef: apiRef,
290
+ firstRowToRender: firstRowToRender,
291
+ lastRowToRender: lastRowToRender,
292
+ visibleRows: currentPage.rows
293
+ });
266
294
  var renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
267
295
  var rows = [];
268
296
 
269
- for (var i = 0; i < renderedRows.length; i += 1) {
297
+ for (var _i = 0; _i < renderedRows.length; _i += 1) {
270
298
  var _rootProps$components;
271
299
 
272
- var _renderedRows$i = renderedRows[i],
273
- _id = _renderedRows$i.id,
274
- _model = _renderedRows$i.model;
275
- var lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;
300
+ var _renderedRows$_i = renderedRows[_i],
301
+ _id = _renderedRows$_i.id,
302
+ _model = _renderedRows$_i.model;
303
+ var lastVisibleRowIndex = firstRowToRender + _i === currentPage.rows.length - 1;
276
304
  var targetRowHeight = apiRef.current.unstable_getRowHeight(_id);
277
305
  var isSelected = void 0;
278
306
 
@@ -299,7 +327,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
299
327
  firstColumnToRender: firstColumnToRender,
300
328
  lastColumnToRender: lastColumnToRender,
301
329
  selected: isSelected,
302
- index: currentPage.range.firstRowIndex + firstRowToRender + i,
330
+ index: currentPage.range.firstRowIndex + firstRowToRender + _i,
303
331
  containerWidth: availableSpace,
304
332
  isLastVisible: lastVisibleRowIndex
305
333
  }, typeof getRowProps === 'function' ? getRowProps(_id, _model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), _id));
package/legacy/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.
@@ -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';