@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
@@ -130,21 +130,31 @@ const useGridFocus = (apiRef, props) => {
130
130
  rowIndexToFocus += 1;
131
131
  }
132
132
 
133
+ const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
134
+ pagination: props.pagination,
135
+ paginationMode: props.paginationMode
136
+ });
137
+
133
138
  if (columnIndexToFocus >= visibleColumns.length) {
134
- // Go to next row if we are at the last column
139
+ // Go to next row if we are after the last column
135
140
  rowIndexToFocus += 1;
136
- columnIndexToFocus = 0;
141
+
142
+ if (rowIndexToFocus < currentPage.rows.length) {
143
+ // Go to first column of the next row if there's one more row
144
+ columnIndexToFocus = 0;
145
+ }
137
146
  } else if (columnIndexToFocus < 0) {
138
- // Go to previous row if we are at the first column
147
+ // Go to previous row if we are before the first column
139
148
  rowIndexToFocus -= 1;
140
- columnIndexToFocus = visibleColumns.length - 1;
149
+
150
+ if (rowIndexToFocus >= 0) {
151
+ // Go to last column of the previous if there's one more row
152
+ columnIndexToFocus = visibleColumns.length - 1;
153
+ }
141
154
  }
142
155
 
143
- const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
144
- pagination: props.pagination,
145
- paginationMode: props.paginationMode
146
- });
147
- rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
156
+ rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, 0, currentPage.rows.length - 1);
157
+ columnIndexToFocus = (0, _utils2.clamp)(columnIndexToFocus, 0, visibleColumns.length - 1);
148
158
  const rowToFocus = currentPage.rows[rowIndexToFocus];
149
159
  const columnToFocus = visibleColumns[columnIndexToFocus];
150
160
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
@@ -27,6 +27,8 @@ var _gridEditRowModel = require("../../../models/gridEditRowModel");
27
27
 
28
28
  var _keyboardUtils = require("../../../utils/keyboardUtils");
29
29
 
30
+ var _gridDetailPanelToggleField = require("../../../constants/gridDetailPanelToggleField");
31
+
30
32
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
33
 
32
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -38,20 +40,39 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
38
40
  * @requires useGridDimensions (method) - can be after
39
41
  * @requires useGridFocus (method) - can be after
40
42
  * @requires useGridScroll (method) - can be after
43
+ * @requires useGridColumnSpanning (method) - can be after
41
44
  */
42
45
  const useGridKeyboardNavigation = (apiRef, props) => {
43
46
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridKeyboardNavigation');
44
47
  const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
45
- const goToCell = React.useCallback((colIndex, rowIndex) => {
48
+ /**
49
+ * @param {number} colIndex Index of the column to focus
50
+ * @param {number} rowIndex index of the row to focus
51
+ * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
52
+ */
53
+
54
+ const goToCell = React.useCallback((colIndex, rowIndex, closestColumnToUse = 'left') => {
55
+ var _visibleSortedRows$ro;
56
+
57
+ const visibleSortedRows = (0, _gridFilterSelector.gridVisibleSortedRowEntriesSelector)(apiRef);
58
+ const rowId = (_visibleSortedRows$ro = visibleSortedRows[rowIndex]) == null ? void 0 : _visibleSortedRows$ro.id;
59
+ const nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
60
+
61
+ if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
62
+ if (closestColumnToUse === 'left') {
63
+ colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
64
+ } else if (closestColumnToUse === 'right') {
65
+ colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
66
+ }
67
+ }
68
+
46
69
  logger.debug(`Navigating to cell row ${rowIndex}, col ${colIndex}`);
47
70
  apiRef.current.scrollToIndexes({
48
71
  colIndex,
49
72
  rowIndex
50
73
  });
51
74
  const field = apiRef.current.getVisibleColumns()[colIndex].field;
52
- const visibleSortedRows = (0, _gridFilterSelector.gridVisibleSortedRowEntriesSelector)(apiRef);
53
- const node = visibleSortedRows[rowIndex];
54
- apiRef.current.setCellFocus(node.id, field);
75
+ apiRef.current.setCellFocus(rowId, field);
55
76
  }, [apiRef, logger]);
56
77
  const goToHeader = React.useCallback((colIndex, event) => {
57
78
  logger.debug(`Navigating to header col ${colIndex}`);
@@ -104,7 +125,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
104
125
  case 'ArrowRight':
105
126
  {
106
127
  if (colIndexBefore < lastColIndex) {
107
- goToCell(colIndexBefore + 1, rowIndexBefore);
128
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
108
129
  }
109
130
 
110
131
  break;
@@ -123,9 +144,9 @@ const useGridKeyboardNavigation = (apiRef, props) => {
123
144
  {
124
145
  // "Tab" is only triggered by the row / cell editing feature
125
146
  if (event.shiftKey && colIndexBefore > firstColIndex) {
126
- goToCell(colIndexBefore - 1, rowIndexBefore);
147
+ goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
127
148
  } else if (!event.shiftKey && colIndexBefore < lastColIndex) {
128
- goToCell(colIndexBefore + 1, rowIndexBefore);
149
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
129
150
  }
130
151
 
131
152
  break;
@@ -133,6 +154,18 @@ const useGridKeyboardNavigation = (apiRef, props) => {
133
154
 
134
155
  case ' ':
135
156
  {
157
+ const field = params.field;
158
+
159
+ if (field === _gridDetailPanelToggleField.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
160
+ break;
161
+ }
162
+
163
+ const colDef = params.colDef;
164
+
165
+ if (colDef && colDef.type === 'treeDataGroup') {
166
+ break;
167
+ }
168
+
136
169
  if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
137
170
  goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
138
171
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridTopLevelRowCountSelector = exports.gridRowsStateSelector = exports.gridRowsLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthSelector = exports.gridRowIdsSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = void 0;
6
+ exports.gridTopLevelRowCountSelector = exports.gridRowsStateSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthSelector = exports.gridRowIdsSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = void 0;
7
7
 
8
8
  var _createSelector = require("../../../utils/createSelector");
9
9
 
@@ -12,6 +12,8 @@ const gridRowsStateSelector = state => state.rows;
12
12
  exports.gridRowsStateSelector = gridRowsStateSelector;
13
13
  const gridRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalRowCount);
14
14
  exports.gridRowCountSelector = gridRowCountSelector;
15
+ const gridRowsLoadingSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.loading);
16
+ exports.gridRowsLoadingSelector = gridRowsLoadingSelector;
15
17
  const gridTopLevelRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalTopLevelRowCount);
16
18
  exports.gridTopLevelRowCountSelector = gridTopLevelRowCountSelector;
17
19
  const gridRowsLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.idRowsLookup);
@@ -64,7 +64,7 @@ const convertGridRowsPropToState = ({
64
64
  };
65
65
  };
66
66
 
67
- const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp) => {
67
+ const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp, loadingProp) => {
68
68
  const {
69
69
  value
70
70
  } = rowsCache.state;
@@ -74,6 +74,7 @@ const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp) =>
74
74
  }));
75
75
  const dataTopLevelRowCount = groupingResponse.treeDepth === 1 ? groupingResponse.ids.length : Object.values(groupingResponse.tree).filter(node => node.parent == null).length;
76
76
  return (0, _extends2.default)({}, groupingResponse, {
77
+ loading: loadingProp,
77
78
  totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
78
79
  totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
79
80
  });
@@ -96,7 +97,7 @@ const rowsStateInitializer = (state, props, apiRef) => {
96
97
  lastUpdateMs: Date.now()
97
98
  };
98
99
  return (0, _extends2.default)({}, state, {
99
- rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount),
100
+ rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
100
101
  rowsCache // TODO remove from state
101
102
 
102
103
  });
@@ -130,7 +131,7 @@ const useGridRows = (apiRef, props) => {
130
131
  rowsCache.current.timeout = null;
131
132
  rowsCache.current.lastUpdateMs = Date.now();
132
133
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
133
- rows: getRowsStateFromCache(rowsCache.current, (0, _gridRowsSelector.gridRowTreeSelector)(apiRef), apiRef, props.rowCount)
134
+ rows: getRowsStateFromCache(rowsCache.current, (0, _gridRowsSelector.gridRowTreeSelector)(apiRef), apiRef, props.rowCount, props.loading)
134
135
  }));
135
136
  apiRef.current.publishEvent(_events.GridEvents.rowsSet);
136
137
  apiRef.current.forceUpdate();
@@ -156,7 +157,7 @@ const useGridRows = (apiRef, props) => {
156
157
  }
157
158
 
158
159
  run();
159
- }, [props.throttleRowsMs, props.rowCount, apiRef]);
160
+ }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
160
161
  /**
161
162
  * API METHODS
162
163
  */
@@ -25,9 +25,7 @@ var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
25
25
 
26
26
  var _gridSortingSelector = require("../sorting/gridSortingSelector");
27
27
 
28
- var _gridEvents = require("../../../models/events/gridEvents");
29
-
30
- var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
28
+ var _pipeProcessing = require("../../core/pipeProcessing");
31
29
 
32
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
31
 
@@ -92,10 +90,11 @@ const useGridRowsMeta = (apiRef, props) => {
92
90
  if (getRowSpacing) {
93
91
  var _spacing$top, _spacing$bottom;
94
92
 
95
- const index = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
93
+ const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
96
94
  const spacing = getRowSpacing((0, _extends2.default)({}, row, {
97
- isFirstVisible: index === 0,
98
- isLastVisible: index === currentPage.rows.length - 1
95
+ isFirstVisible: indexRelativeToCurrentPage === 0,
96
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
97
+ indexRelativeToCurrentPage
99
98
  }));
100
99
  initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
101
100
  initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
@@ -147,14 +146,7 @@ const useGridRowsMeta = (apiRef, props) => {
147
146
  React.useEffect(() => {
148
147
  hydrateRowsMeta();
149
148
  }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
150
- const handlepipeProcessorRegister = React.useCallback(name => {
151
- if (name !== 'rowHeight') {
152
- return;
153
- }
154
-
155
- hydrateRowsMeta();
156
- }, [hydrateRowsMeta]);
157
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _gridEvents.GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
149
+ (0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'rowHeight', hydrateRowsMeta);
158
150
  const rowsMetaApi = {
159
151
  unstable_getRowHeight: getTargetRowHeight,
160
152
  unstable_getRowInternalSizes: getRowInternalSizes,
@@ -11,6 +11,8 @@ var _useGridLogger = require("../../utils/useGridLogger");
11
11
 
12
12
  var _gridColumnsSelector = require("../columns/gridColumnsSelector");
13
13
 
14
+ var _useGridSelector = require("../../utils/useGridSelector");
15
+
14
16
  var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
15
17
 
16
18
  var _gridRowsSelector = require("../rows/gridRowsSelector");
@@ -19,6 +21,8 @@ var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
19
21
 
20
22
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
21
23
 
24
+ var _gridFilterSelector = require("../filter/gridFilterSelector");
25
+
22
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
27
 
24
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -49,6 +53,8 @@ function scrollIntoView(dimensions) {
49
53
  * @requires useGridColumns (state) - can be after, async only
50
54
  * @requires useGridRows (state) - can be after, async only
51
55
  * @requires useGridRowsMeta (state) - can be after, async only
56
+ * @requires useGridFilter (state)
57
+ * @requires useGridColumnSpanning (method)
52
58
  */
53
59
 
54
60
 
@@ -56,6 +62,7 @@ const useGridScroll = (apiRef, props) => {
56
62
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridScroll');
57
63
  const colRef = apiRef.current.columnHeadersElementRef;
58
64
  const windowRef = apiRef.current.windowRef;
65
+ const visibleSortedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridVisibleSortedRowEntriesSelector);
59
66
  const scrollToIndexes = React.useCallback(params => {
60
67
  const totalRowCount = (0, _gridRowsSelector.gridRowCountSelector)(apiRef);
61
68
  const visibleColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
@@ -70,10 +77,27 @@ const useGridScroll = (apiRef, props) => {
70
77
 
71
78
  if (params.colIndex != null) {
72
79
  const columnPositions = (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef);
80
+ let cellWidth;
81
+
82
+ if (typeof params.rowIndex !== 'undefined') {
83
+ var _visibleSortedRows$pa;
84
+
85
+ const rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
86
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
87
+
88
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
89
+ cellWidth = cellColSpanInfo.cellProps.width;
90
+ }
91
+ }
92
+
93
+ if (typeof cellWidth === 'undefined') {
94
+ cellWidth = visibleColumns[params.colIndex].computedWidth;
95
+ }
96
+
73
97
  scrollCoordinates.left = scrollIntoView({
74
98
  clientHeight: windowRef.current.clientWidth,
75
99
  scrollTop: windowRef.current.scrollLeft,
76
- offsetHeight: visibleColumns[params.colIndex].computedWidth,
100
+ offsetHeight: cellWidth,
77
101
  offsetTop: columnPositions[params.colIndex]
78
102
  });
79
103
  }
@@ -100,7 +124,7 @@ const useGridScroll = (apiRef, props) => {
100
124
  }
101
125
 
102
126
  return false;
103
- }, [logger, apiRef, windowRef, props.pagination]);
127
+ }, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
104
128
  const scroll = React.useCallback(params => {
105
129
  if (windowRef.current && params.left != null && colRef.current) {
106
130
  colRef.current.scrollLeft = params.left;
@@ -37,6 +37,8 @@ var _keyboardUtils = require("../../../utils/keyboardUtils");
37
37
 
38
38
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
39
39
 
40
+ var _gridDetailPanelToggleField = require("../../../constants/gridDetailPanelToggleField");
41
+
40
42
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
43
 
42
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -268,7 +270,7 @@ const useGridSelection = (apiRef, props) => {
268
270
  return;
269
271
  }
270
272
 
271
- if (params.field === '__detail_panel_toggle__') {
273
+ if (params.field === _gridDetailPanelToggleField.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
272
274
  // click to open the detail panel should not select the row
273
275
  return;
274
276
  }
@@ -376,7 +378,7 @@ const useGridSelection = (apiRef, props) => {
376
378
  selectRows(apiRef.current.getAllRowIds(), true);
377
379
  }
378
380
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
379
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.visibleRowsSet, removeOutdatedSelection);
381
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.sortedRowsSet, removeOutdatedSelection);
380
382
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.cellClick, handleCellClick);
381
383
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
382
384
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
@@ -111,17 +111,16 @@ const useGridSorting = (apiRef, props) => {
111
111
  */
112
112
 
113
113
  const applySorting = React.useCallback(() => {
114
- if (props.sortingMode === _gridFeatureMode.GridFeatureModeConstant.server) {
115
- logger.debug('Skipping sorting rows as sortingMode = server');
116
- apiRef.current.setState(state => (0, _extends2.default)({}, state, {
117
- sorting: (0, _extends2.default)({}, state.sorting, {
118
- sortedRows: (0, _rows.gridRowIdsSelector)(state, apiRef.current.instanceId)
119
- })
120
- }));
121
- return;
122
- }
123
-
124
114
  apiRef.current.setState(state => {
115
+ if (props.sortingMode === _gridFeatureMode.GridFeatureModeConstant.server) {
116
+ logger.debug('Skipping sorting rows as sortingMode = server');
117
+ return (0, _extends2.default)({}, state, {
118
+ sorting: (0, _extends2.default)({}, state.sorting, {
119
+ sortedRows: (0, _rows.gridRowIdsSelector)(state, apiRef.current.instanceId)
120
+ })
121
+ });
122
+ }
123
+
125
124
  const sortModel = (0, _gridSortingSelector.gridSortModelSelector)(state, apiRef.current.instanceId);
126
125
  const sortRowList = (0, _gridSortingUtils.buildAggregatedSortingApplier)(sortModel, apiRef);
127
126
  const sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
@@ -133,6 +132,7 @@ const useGridSorting = (apiRef, props) => {
133
132
  })
134
133
  });
135
134
  });
135
+ apiRef.current.publishEvent(_events.GridEvents.sortedRowsSet);
136
136
  apiRef.current.forceUpdate();
137
137
  }, [apiRef, logger, props.sortingMode]);
138
138
  const setSortModel = React.useCallback(model => {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.getIndexFromScroll = getIndexFromScroll;
9
- exports.useGridVirtualScroller = void 0;
9
+ exports.useGridVirtualScroller = exports.getRenderableIndexes = void 0;
10
10
 
11
11
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
12
 
@@ -14,6 +14,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
14
14
 
15
15
  var React = _interopRequireWildcard(require("react"));
16
16
 
17
+ var ReactDOM = _interopRequireWildcard(require("react-dom"));
18
+
17
19
  var _utils = require("@mui/material/utils");
18
20
 
19
21
  var _useGridApiContext = require("../../utils/useGridApiContext");
@@ -42,6 +44,8 @@ var _gridSelectionSelector = require("../selection/gridSelectionSelector");
42
44
 
43
45
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
44
46
 
47
+ var _gridColumnsUtils = require("../columns/gridColumnsUtils");
48
+
45
49
  var _jsxRuntime = require("react/jsx-runtime");
46
50
 
47
51
  const _excluded = ["style"];
@@ -65,9 +69,19 @@ function getIndexFromScroll(offset, positions, sliceStart = 0, sliceEnd = positi
65
69
  return offset <= itemOffset ? getIndexFromScroll(offset, positions, sliceStart, pivot) : getIndexFromScroll(offset, positions, pivot + 1, sliceEnd);
66
70
  }
67
71
 
68
- const useGridVirtualScroller = props => {
69
- var _currentPage$range2;
72
+ const getRenderableIndexes = ({
73
+ firstIndex,
74
+ lastIndex,
75
+ buffer,
76
+ minFirstIndex,
77
+ maxLastIndex
78
+ }) => {
79
+ return [(0, _utils2.clamp)(firstIndex - buffer, minFirstIndex, maxLastIndex), (0, _utils2.clamp)(lastIndex + buffer, minFirstIndex, maxLastIndex)];
80
+ };
81
+
82
+ exports.getRenderableIndexes = getRenderableIndexes;
70
83
 
84
+ const useGridVirtualScroller = props => {
71
85
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
72
86
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
73
87
  const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
@@ -142,34 +156,28 @@ const useGridVirtualScroller = props => {
142
156
  }
143
157
  }, []);
144
158
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.resize, handleResize);
145
-
146
- const getRenderableIndexes = ({
147
- firstIndex,
148
- lastIndex,
149
- buffer,
150
- minFirstIndex,
151
- maxLastIndex
152
- }) => {
153
- return [(0, _utils2.clamp)(firstIndex - buffer, minFirstIndex, maxLastIndex), (0, _utils2.clamp)(lastIndex + buffer, minFirstIndex, maxLastIndex)];
154
- };
155
-
156
159
  const updateRenderZonePosition = React.useCallback(nextRenderContext => {
157
- var _currentPage$range;
158
-
159
- const [firstRowToRender] = getRenderableIndexes({
160
+ const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
160
161
  firstIndex: nextRenderContext.firstRowIndex,
161
162
  lastIndex: nextRenderContext.lastRowIndex,
162
163
  minFirstIndex: 0,
163
- maxLastIndex: ((_currentPage$range = currentPage.range) == null ? void 0 : _currentPage$range.lastRowIndex) || 0,
164
+ maxLastIndex: currentPage.rows.length,
164
165
  buffer: rootProps.rowBuffer
165
166
  });
166
- const [firstColumnToRender] = getRenderableIndexes({
167
+ const [initialFirstColumnToRender] = getRenderableIndexes({
167
168
  firstIndex: nextRenderContext.firstColumnIndex,
168
169
  lastIndex: nextRenderContext.lastColumnIndex,
169
170
  minFirstIndex: renderZoneMinColumnIndex,
170
171
  maxLastIndex: renderZoneMaxColumnIndex,
171
172
  buffer: rootProps.columnBuffer
172
173
  });
174
+ const firstColumnToRender = (0, _gridColumnsUtils.getFirstNonSpannedColumnToRender)({
175
+ firstColumnToRender: initialFirstColumnToRender,
176
+ apiRef,
177
+ firstRowToRender,
178
+ lastRowToRender,
179
+ visibleRows: currentPage.rows
180
+ });
173
181
  const top = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef.current.state).positions[firstRowToRender];
174
182
  const left = (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
175
183
 
@@ -181,19 +189,22 @@ const useGridVirtualScroller = props => {
181
189
  left
182
190
  });
183
191
  }
184
- }, [apiRef, (_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.lastRowIndex, onRenderZonePositioning, renderZoneMaxColumnIndex, renderZoneMinColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
192
+ }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
193
+ React.useLayoutEffect(() => {
194
+ if (renderContext) {
195
+ updateRenderZonePosition(renderContext);
196
+ }
197
+ }, [renderContext, updateRenderZonePosition]);
185
198
  const updateRenderContext = React.useCallback(nextRenderContext => {
186
199
  setRenderContext(nextRenderContext);
187
- updateRenderZonePosition(nextRenderContext);
188
200
  prevRenderContext.current = nextRenderContext;
189
- }, [setRenderContext, prevRenderContext, updateRenderZonePosition]);
201
+ }, [setRenderContext, prevRenderContext]);
190
202
  React.useEffect(() => {
191
203
  if (containerWidth == null) {
192
204
  return;
193
205
  }
194
206
 
195
207
  const initialRenderContext = computeRenderContext();
196
- prevRenderContext.current = initialRenderContext;
197
208
  updateRenderContext(initialRenderContext);
198
209
  const {
199
210
  top,
@@ -231,10 +242,13 @@ const useGridVirtualScroller = props => {
231
242
  top: scrollTop,
232
243
  left: scrollLeft,
233
244
  renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
234
- });
245
+ }, event);
235
246
 
236
247
  if (shouldSetState) {
237
- updateRenderContext(nextRenderContext);
248
+ // Prevents batching render context changes
249
+ ReactDOM.flushSync(() => {
250
+ updateRenderContext(nextRenderContext);
251
+ });
238
252
  prevTotalWidth.current = columnsTotalWidth;
239
253
  }
240
254
  };
@@ -262,14 +276,32 @@ const useGridVirtualScroller = props => {
262
276
  maxLastIndex: currentPage.rows.length,
263
277
  buffer: rowBuffer
264
278
  });
265
- const [firstColumnToRender, lastColumnToRender] = getRenderableIndexes({
279
+ const renderedRows = [];
280
+
281
+ for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
282
+ const row = currentPage.rows[i];
283
+ renderedRows.push(row);
284
+ apiRef.current.unstable_calculateColSpan({
285
+ rowId: row.id,
286
+ minFirstColumn,
287
+ maxLastColumn
288
+ });
289
+ }
290
+
291
+ const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({
266
292
  firstIndex: nextRenderContext.firstColumnIndex,
267
293
  lastIndex: nextRenderContext.lastColumnIndex,
268
294
  minFirstIndex: minFirstColumn,
269
295
  maxLastIndex: maxLastColumn,
270
296
  buffer: columnBuffer
271
297
  });
272
- const renderedRows = currentPage.rows.slice(firstRowToRender, lastRowToRender);
298
+ const firstColumnToRender = (0, _gridColumnsUtils.getFirstNonSpannedColumnToRender)({
299
+ firstColumnToRender: initialFirstColumnToRender,
300
+ apiRef,
301
+ firstRowToRender,
302
+ lastRowToRender,
303
+ visibleRows: currentPage.rows
304
+ });
273
305
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
274
306
  const rows = [];
275
307
 
package/node/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.
@@ -159,6 +159,12 @@ Object.defineProperty(exports, "useGridColumnMenu", {
159
159
  return _useGridColumnMenu.useGridColumnMenu;
160
160
  }
161
161
  });
162
+ Object.defineProperty(exports, "useGridColumnSpanning", {
163
+ enumerable: true,
164
+ get: function () {
165
+ return _useGridColumnSpanning.useGridColumnSpanning;
166
+ }
167
+ });
162
168
  Object.defineProperty(exports, "useGridColumns", {
163
169
  enumerable: true,
164
170
  get: function () {
@@ -352,6 +358,8 @@ var _useGridColumnMenu = require("../hooks/features/columnMenu/useGridColumnMenu
352
358
 
353
359
  var _useGridColumns = require("../hooks/features/columns/useGridColumns");
354
360
 
361
+ var _useGridColumnSpanning = require("../hooks/features/columns/useGridColumnSpanning");
362
+
355
363
  var _useGridDensity = require("../hooks/features/density/useGridDensity");
356
364
 
357
365
  var _useGridCsvExport = require("../hooks/features/export/useGridCsvExport");