@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
@@ -1,7 +1,9 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import * as React from 'react';
4
+ import * as ReactDOM from 'react-dom';
4
5
  import { useForkRef } from '@mui/material/utils';
6
+ import { defaultMemoize } from 'reselect';
5
7
  import { useGridApiContext } from '../../utils/useGridApiContext';
6
8
  import { useGridSelector } from '../../utils/useGridSelector';
7
9
  import { gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';
@@ -14,7 +16,15 @@ import { useGridRootProps } from '../../utils/useGridRootProps';
14
16
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
15
17
  import { GridEvents } from '../../../models/events';
16
18
  import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColumnHeaderItem';
19
+ import { getFirstColumnIndexToRender } from '../columns/gridColumnsUtils';
20
+ import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
21
+ import { getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
17
22
  import { jsx as _jsx } from "react/jsx-runtime";
23
+
24
+ function isUIEvent(event) {
25
+ return !!event.target;
26
+ }
27
+
18
28
  export var useGridColumnHeaders = function useGridColumnHeaders(props) {
19
29
  var innerRefProp = props.innerRef,
20
30
  _props$minColumnIndex = props.minColumnIndex,
@@ -51,15 +61,48 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
51
61
 
52
62
  var prevRenderContext = React.useRef(renderContext);
53
63
  var prevScrollLeft = React.useRef(0);
64
+ var currentPage = useGridVisibleRows(apiRef, rootProps);
54
65
  React.useEffect(function () {
55
66
  apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
56
- }, [apiRef]);
67
+ }, [apiRef]); // memoize `getFirstColumnIndexToRender`, since it's called on scroll
68
+
69
+ var getFirstColumnIndexToRenderRef = React.useRef(defaultMemoize(getFirstColumnIndexToRender, {
70
+ equalityCheck: function equalityCheck(a, b) {
71
+ return ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(function (key) {
72
+ return a[key] === b[key];
73
+ });
74
+ }
75
+ }));
57
76
  var updateInnerPosition = React.useCallback(function (nextRenderContext) {
58
- var firstColumnToRender = Math.max(nextRenderContext.firstColumnIndex - rootProps.columnBuffer, minColumnIndex);
77
+ var _getRenderableIndexes = getRenderableIndexes({
78
+ firstIndex: nextRenderContext.firstRowIndex,
79
+ lastIndex: nextRenderContext.lastRowIndex,
80
+ minFirstIndex: 0,
81
+ maxLastIndex: currentPage.rows.length,
82
+ buffer: rootProps.rowBuffer
83
+ }),
84
+ _getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
85
+ firstRowToRender = _getRenderableIndexes2[0],
86
+ lastRowToRender = _getRenderableIndexes2[1];
87
+
88
+ var firstColumnToRender = getFirstColumnIndexToRenderRef.current({
89
+ firstColumnIndex: nextRenderContext.firstColumnIndex,
90
+ minColumnIndex: minColumnIndex,
91
+ columnBuffer: rootProps.columnBuffer,
92
+ firstRowToRender: firstRowToRender,
93
+ lastRowToRender: lastRowToRender,
94
+ apiRef: apiRef,
95
+ visibleRows: currentPage.rows
96
+ });
59
97
  var offset = firstColumnToRender > 0 ? prevScrollLeft.current - columnPositions[firstColumnToRender] : prevScrollLeft.current;
60
98
  innerRef.current.style.transform = "translate3d(".concat(-offset, "px, 0px, 0px)");
61
- }, [columnPositions, minColumnIndex, rootProps.columnBuffer]);
62
- var handleScroll = React.useCallback(function (_ref) {
99
+ }, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer]);
100
+ React.useLayoutEffect(function () {
101
+ if (renderContext) {
102
+ updateInnerPosition(renderContext);
103
+ }
104
+ }, [renderContext, updateInnerPosition]);
105
+ var handleScroll = React.useCallback(function (_ref, event) {
63
106
  var _prevRenderContext$cu, _prevRenderContext$cu2;
64
107
 
65
108
  var left = _ref.left,
@@ -76,15 +119,32 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
76
119
  return;
77
120
  }
78
121
 
79
- prevScrollLeft.current = left;
122
+ prevScrollLeft.current = left; // We can only update the position when we guarantee that the render context has been
123
+ // rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
124
+
125
+ var canUpdateInnerPosition = false;
80
126
 
81
127
  if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
82
- setRenderContext(nextRenderContext);
128
+ // ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
129
+ if (isUIEvent(event)) {
130
+ // To prevent flickering, the inner position can only be updated after the new context has
131
+ // been rendered. ReactDOM.flushSync ensures that the state changes will happen before
132
+ // updating the position.
133
+ ReactDOM.flushSync(function () {
134
+ setRenderContext(nextRenderContext);
135
+ });
136
+ canUpdateInnerPosition = true;
137
+ } else {
138
+ setRenderContext(nextRenderContext);
139
+ }
140
+
83
141
  prevRenderContext.current = nextRenderContext;
142
+ } else {
143
+ canUpdateInnerPosition = true;
84
144
  } // Pass directly the render context to avoid waiting for the next render
85
145
 
86
146
 
87
- if (nextRenderContext) {
147
+ if (nextRenderContext && canUpdateInnerPosition) {
88
148
  updateInnerPosition(nextRenderContext);
89
149
  }
90
150
  }, [updateInnerPosition]);
@@ -122,7 +182,27 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
122
182
  }
123
183
 
124
184
  var columns = [];
125
- var firstColumnToRender = Math.max(nextRenderContext.firstColumnIndex - rootProps.columnBuffer, minFirstColumn);
185
+
186
+ var _getRenderableIndexes3 = getRenderableIndexes({
187
+ firstIndex: nextRenderContext.firstRowIndex,
188
+ lastIndex: nextRenderContext.lastRowIndex,
189
+ minFirstIndex: 0,
190
+ maxLastIndex: currentPage.rows.length,
191
+ buffer: rootProps.rowBuffer
192
+ }),
193
+ _getRenderableIndexes4 = _slicedToArray(_getRenderableIndexes3, 2),
194
+ firstRowToRender = _getRenderableIndexes4[0],
195
+ lastRowToRender = _getRenderableIndexes4[1];
196
+
197
+ var firstColumnToRender = getFirstColumnIndexToRenderRef.current({
198
+ firstColumnIndex: nextRenderContext.firstColumnIndex,
199
+ minColumnIndex: minFirstColumn,
200
+ columnBuffer: rootProps.columnBuffer,
201
+ apiRef: apiRef,
202
+ firstRowToRender: firstRowToRender,
203
+ lastRowToRender: lastRowToRender,
204
+ visibleRows: currentPage.rows
205
+ });
126
206
  var lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
127
207
  var renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
128
208
 
@@ -146,7 +226,7 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
146
226
  extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
147
227
  hasFocus: hasFocus,
148
228
  tabIndex: tabIndex
149
- }, other), i));
229
+ }, other), column.field));
150
230
  }
151
231
 
152
232
  return columns;
@@ -161,7 +241,6 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
161
241
  renderContext: renderContext,
162
242
  getColumns: getColumns,
163
243
  isDragging: !!dragCol,
164
- updateInnerPosition: updateInnerPosition,
165
244
  getRootProps: function getRootProps() {
166
245
  var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
167
246
  return _extends({
@@ -213,11 +213,25 @@ export var applyInitialState = function applyInitialState(columnsState, initialS
213
213
 
214
214
  var newColumnLookup = _extends({}, columnsState.lookup);
215
215
 
216
- for (var _i = 0; _i < columnsWithUpdatedDimensions.length; _i += 1) {
217
- var _field2 = columnsWithUpdatedDimensions[_i];
218
- newColumnLookup[_field2] = _extends({}, newColumnLookup[_field2], dimensions[_field2], {
216
+ var _loop = function _loop(_i) {
217
+ var field = columnsWithUpdatedDimensions[_i];
218
+
219
+ var newColDef = _extends({}, newColumnLookup[field], {
219
220
  hasBeenResized: true
220
221
  });
222
+
223
+ Object.entries(dimensions[field]).forEach(function (_ref5) {
224
+ var _ref6 = _slicedToArray(_ref5, 2),
225
+ key = _ref6[0],
226
+ value = _ref6[1];
227
+
228
+ newColDef[key] = value === -1 ? Infinity : value;
229
+ });
230
+ newColumnLookup[field] = newColDef;
231
+ };
232
+
233
+ for (var _i = 0; _i < columnsWithUpdatedDimensions.length; _i += 1) {
234
+ _loop(_i);
221
235
  }
222
236
 
223
237
  var newColumnsState = {
@@ -248,18 +262,18 @@ export var getGridColDef = function getGridColDef(columnTypes, type) {
248
262
 
249
263
  return columnTypes[type];
250
264
  };
251
- export var createColumnsState = function createColumnsState(_ref5) {
265
+ export var createColumnsState = function createColumnsState(_ref7) {
252
266
  var _apiRef$current$getRo, _apiRef$current$getRo2, _apiRef$current, _apiRef$current$getRo3;
253
267
 
254
- var apiRef = _ref5.apiRef,
255
- columnsToUpsert = _ref5.columnsToUpsert,
256
- initialState = _ref5.initialState,
257
- columnTypes = _ref5.columnTypes,
258
- _ref5$currentColumnVi = _ref5.currentColumnVisibilityModel,
259
- currentColumnVisibilityModel = _ref5$currentColumnVi === void 0 ? gridColumnVisibilityModelSelector(apiRef) : _ref5$currentColumnVi,
260
- shouldRegenColumnVisibilityModelFromColumns = _ref5.shouldRegenColumnVisibilityModelFromColumns,
261
- _ref5$keepOnlyColumns = _ref5.keepOnlyColumnsToUpsert,
262
- keepOnlyColumnsToUpsert = _ref5$keepOnlyColumns === void 0 ? false : _ref5$keepOnlyColumns;
268
+ var apiRef = _ref7.apiRef,
269
+ columnsToUpsert = _ref7.columnsToUpsert,
270
+ initialState = _ref7.initialState,
271
+ columnTypes = _ref7.columnTypes,
272
+ _ref7$currentColumnVi = _ref7.currentColumnVisibilityModel,
273
+ currentColumnVisibilityModel = _ref7$currentColumnVi === void 0 ? gridColumnVisibilityModelSelector(apiRef) : _ref7$currentColumnVi,
274
+ shouldRegenColumnVisibilityModelFromColumns = _ref7.shouldRegenColumnVisibilityModelFromColumns,
275
+ _ref7$keepOnlyColumns = _ref7.keepOnlyColumnsToUpsert,
276
+ keepOnlyColumnsToUpsert = _ref7$keepOnlyColumns === void 0 ? false : _ref7$keepOnlyColumns;
263
277
  var isInsideStateInitializer = !apiRef.current.state.columns;
264
278
  var columnsStateWithoutColumnVisibilityModel;
265
279
 
@@ -304,18 +318,20 @@ export var createColumnsState = function createColumnsState(_ref5) {
304
318
  columnsStateWithoutColumnVisibilityModel.all.push(field);
305
319
  }
306
320
 
307
- var hasValidDimension = false;
308
-
309
- if (!existingState.hasBeenResized) {
310
- hasValidDimension = COLUMNS_DIMENSION_PROPERTIES.some(function (key) {
311
- return newColumn[key] !== undefined;
312
- });
313
- }
321
+ var hasBeenResized = existingState.hasBeenResized;
322
+ COLUMNS_DIMENSION_PROPERTIES.forEach(function (key) {
323
+ if (newColumn[key] !== undefined) {
324
+ hasBeenResized = true;
314
325
 
326
+ if (newColumn[key] === -1) {
327
+ newColumn[key] = Infinity;
328
+ }
329
+ }
330
+ });
315
331
  columnsStateWithoutColumnVisibilityModel.lookup[field] = _extends({}, existingState, {
316
332
  hide: newColumn.hide == null ? false : newColumn.hide
317
333
  }, newColumn, {
318
- hasBeenResized: existingState.hasBeenResized || hasValidDimension
334
+ hasBeenResized: hasBeenResized
319
335
  });
320
336
  });
321
337
 
@@ -409,4 +425,45 @@ export var mergeColumnsState = function mergeColumnsState(columnsState) {
409
425
  columns: columnsState
410
426
  });
411
427
  };
412
- };
428
+ };
429
+ export function getFirstNonSpannedColumnToRender(_ref8) {
430
+ var firstColumnToRender = _ref8.firstColumnToRender,
431
+ apiRef = _ref8.apiRef,
432
+ firstRowToRender = _ref8.firstRowToRender,
433
+ lastRowToRender = _ref8.lastRowToRender,
434
+ visibleRows = _ref8.visibleRows;
435
+ var firstNonSpannedColumnToRender = firstColumnToRender;
436
+
437
+ for (var i = firstRowToRender; i < lastRowToRender; i += 1) {
438
+ var row = visibleRows[i];
439
+
440
+ if (row) {
441
+ var rowId = visibleRows[i].id;
442
+ var cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);
443
+
444
+ if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
445
+ firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
446
+ }
447
+ }
448
+ }
449
+
450
+ return firstNonSpannedColumnToRender;
451
+ }
452
+ export function getFirstColumnIndexToRender(_ref9) {
453
+ var firstColumnIndex = _ref9.firstColumnIndex,
454
+ minColumnIndex = _ref9.minColumnIndex,
455
+ columnBuffer = _ref9.columnBuffer,
456
+ firstRowToRender = _ref9.firstRowToRender,
457
+ lastRowToRender = _ref9.lastRowToRender,
458
+ apiRef = _ref9.apiRef,
459
+ visibleRows = _ref9.visibleRows;
460
+ var initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
461
+ var firstColumnToRender = getFirstNonSpannedColumnToRender({
462
+ firstColumnToRender: initialFirstColumnToRender,
463
+ apiRef: apiRef,
464
+ firstRowToRender: firstRowToRender,
465
+ lastRowToRender: lastRowToRender,
466
+ visibleRows: visibleRows
467
+ });
468
+ return firstColumnToRender;
469
+ }
@@ -0,0 +1,107 @@
1
+ import React from 'react';
2
+ import { useGridApiMethod } from '../../utils/useGridApiMethod';
3
+ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
4
+ import { GridEvents } from '../../../models/events/gridEvents';
5
+
6
+ /**
7
+ * @requires useGridColumns (method, event)
8
+ * @requires useGridParamsApi (method)
9
+ */
10
+ export var useGridColumnSpanning = function useGridColumnSpanning(apiRef) {
11
+ var lookup = React.useRef({});
12
+ var setCellColSpanInfo = React.useCallback(function (rowId, columnIndex, cellColSpanInfo) {
13
+ var sizes = lookup.current;
14
+
15
+ if (!sizes[rowId]) {
16
+ sizes[rowId] = {};
17
+ }
18
+
19
+ sizes[rowId][columnIndex] = cellColSpanInfo;
20
+ }, []);
21
+ var getCellColSpanInfo = React.useCallback(function (rowId, columnIndex) {
22
+ var _lookup$current$rowId;
23
+
24
+ return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
25
+ }, []); // Calculate `colSpan` for the cell.
26
+
27
+ var calculateCellColSpan = React.useCallback(function (params) {
28
+ var columnIndex = params.columnIndex,
29
+ rowId = params.rowId,
30
+ minFirstColumnIndex = params.minFirstColumnIndex,
31
+ maxLastColumnIndex = params.maxLastColumnIndex;
32
+ var visibleColumns = apiRef.current.getVisibleColumns();
33
+ var columnsLength = visibleColumns.length;
34
+ var column = visibleColumns[columnIndex];
35
+ var colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
36
+
37
+ if (!colSpan || colSpan === 1) {
38
+ setCellColSpanInfo(rowId, columnIndex, {
39
+ spannedByColSpan: false,
40
+ cellProps: {
41
+ colSpan: 1,
42
+ width: column.computedWidth
43
+ }
44
+ });
45
+ return {
46
+ colSpan: 1
47
+ };
48
+ }
49
+
50
+ var width = column.computedWidth;
51
+
52
+ for (var j = 1; j < colSpan; j += 1) {
53
+ var nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
54
+
55
+ if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
56
+ var nextColumn = visibleColumns[nextColumnIndex];
57
+ width += nextColumn.computedWidth;
58
+ setCellColSpanInfo(rowId, columnIndex + j, {
59
+ spannedByColSpan: true,
60
+ rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
61
+ leftVisibleCellIndex: columnIndex
62
+ });
63
+ }
64
+
65
+ setCellColSpanInfo(rowId, columnIndex, {
66
+ spannedByColSpan: false,
67
+ cellProps: {
68
+ colSpan: colSpan,
69
+ width: width
70
+ }
71
+ });
72
+ }
73
+
74
+ return {
75
+ colSpan: colSpan
76
+ };
77
+ }, [apiRef, setCellColSpanInfo]); // Calculate `colSpan` for each cell in the row
78
+
79
+ var calculateColSpan = React.useCallback(function (_ref) {
80
+ var rowId = _ref.rowId,
81
+ minFirstColumn = _ref.minFirstColumn,
82
+ maxLastColumn = _ref.maxLastColumn;
83
+
84
+ for (var i = minFirstColumn; i < maxLastColumn; i += 1) {
85
+ var cellProps = calculateCellColSpan({
86
+ columnIndex: i,
87
+ rowId: rowId,
88
+ minFirstColumnIndex: minFirstColumn,
89
+ maxLastColumnIndex: maxLastColumn
90
+ });
91
+
92
+ if (cellProps.colSpan > 1) {
93
+ i += cellProps.colSpan - 1;
94
+ }
95
+ }
96
+ }, [calculateCellColSpan]);
97
+ var columnSpanningApi = {
98
+ unstable_getCellColSpanInfo: getCellColSpanInfo,
99
+ unstable_calculateColSpan: calculateColSpan
100
+ };
101
+ useGridApiMethod(apiRef, columnSpanningApi, 'GridColumnSpanningAPI');
102
+ var handleColumnReorderChange = React.useCallback(function () {
103
+ // `colSpan` needs to be recalculated after column reordering
104
+ lookup.current = {};
105
+ }, []);
106
+ useGridApiEventHandler(apiRef, GridEvents.columnOrderChange, handleColumnReorderChange);
107
+ };
@@ -7,7 +7,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
7
  import { useGridLogger } from '../../utils/useGridLogger';
8
8
  import { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsMetaSelector, gridColumnsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from './gridColumnsSelector';
9
9
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
10
- import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
10
+ import { useGridRegisterPipeProcessor, useGridRegisterPipeApplier } from '../../core/pipeProcessing';
11
11
  import { hydrateColumnsWidth, computeColumnTypes, createColumnsState, mergeColumnsState, COLUMNS_DIMENSION_PROPERTIES } from './gridColumnsUtils';
12
12
  import { GridPreferencePanelsValue } from '../preferencesPanel';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -237,7 +237,13 @@ export function useGridColumns(apiRef, props) {
237
237
  if (colDef.hasBeenResized) {
238
238
  var colDefDimensions = {};
239
239
  COLUMNS_DIMENSION_PROPERTIES.forEach(function (propertyName) {
240
- colDefDimensions[propertyName] = colDef[propertyName];
240
+ var propertyValue = colDef[propertyName];
241
+
242
+ if (propertyValue === Infinity) {
243
+ propertyValue = -1;
244
+ }
245
+
246
+ colDefDimensions[propertyName] = propertyValue;
241
247
  });
242
248
  dimensions[colDef.field] = colDefDimensions;
243
249
  }
@@ -295,12 +301,23 @@ export function useGridColumns(apiRef, props) {
295
301
  * EVENTS
296
302
  */
297
303
 
298
- var handlepipeProcessorRegister = React.useCallback(function (name) {
299
- if (name !== 'hydrateColumns') {
300
- return;
304
+ var prevInnerWidth = React.useRef(null);
305
+
306
+ var handleGridSizeChange = function handleGridSizeChange(viewportInnerSize) {
307
+ if (prevInnerWidth.current !== viewportInnerSize.width) {
308
+ prevInnerWidth.current = viewportInnerSize.width;
309
+ setGridColumnsState(hydrateColumnsWidth(gridColumnsSelector(apiRef.current.state), viewportInnerSize.width));
301
310
  }
311
+ };
312
+
313
+ useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
314
+ useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
315
+ /**
316
+ * APPLIERS
317
+ */
302
318
 
303
- logger.info("Columns pre-processing have changed, regenerating the columns");
319
+ var hydrateColumns = React.useCallback(function () {
320
+ logger.info("Columns pipe processing have changed, regenerating the columns");
304
321
  var columnsState = createColumnsState({
305
322
  apiRef: apiRef,
306
323
  columnTypes: columnTypes,
@@ -311,18 +328,7 @@ export function useGridColumns(apiRef, props) {
311
328
  });
312
329
  setGridColumnsState(columnsState);
313
330
  }, [apiRef, logger, setGridColumnsState, columnTypes]);
314
- var prevInnerWidth = React.useRef(null);
315
-
316
- var handleGridSizeChange = function handleGridSizeChange(viewportInnerSize) {
317
- if (prevInnerWidth.current !== viewportInnerSize.width) {
318
- prevInnerWidth.current = viewportInnerSize.width;
319
- setGridColumnsState(hydrateColumnsWidth(gridColumnsSelector(apiRef.current.state), viewportInnerSize.width));
320
- }
321
- };
322
-
323
- useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
324
- useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
325
- useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
331
+ useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
326
332
  /**
327
333
  * EFFECTS
328
334
  */
@@ -150,12 +150,12 @@ export function useGridDimensions(apiRef, props) {
150
150
  var isJSDOM = /jsdom/.test(window.navigator.userAgent);
151
151
 
152
152
  if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
153
- logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/components/data-grid/layout/'].join('\n'));
153
+ logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
154
154
  warningShown.current = true;
155
155
  }
156
156
 
157
157
  if (size.width === 0 && !warningShown.current && !isJSDOM) {
158
- logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/components/data-grid/layout/'].join('\n'));
158
+ logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
159
159
  warningShown.current = true;
160
160
  }
161
161
 
@@ -178,7 +178,7 @@ export function useGridDimensions(apiRef, props) {
178
178
  useEnhancedEffect(function () {
179
179
  return updateGridDimensionsRef();
180
180
  }, [updateGridDimensionsRef]);
181
- useGridApiOptionHandler(apiRef, GridEvents.visibleRowsSet, updateGridDimensionsRef);
181
+ useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
182
182
  useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
183
183
  useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
184
184
  useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
@@ -217,10 +217,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
217
217
  }
218
218
 
219
219
  var editingState = gridEditRowsStateSelector(apiRef.current.state);
220
- var row = apiRef.current.getRow(id);
221
- var column = apiRef.current.getColumn(field);
222
220
  var _editingState$id$fiel = editingState[id][field],
223
- value = _editingState$id$fiel.value,
224
221
  error = _editingState$id$fiel.error,
225
222
  isProcessingProps = _editingState$id$fiel.isProcessingProps;
226
223
 
@@ -228,10 +225,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
228
225
  return;
229
226
  }
230
227
 
231
- var rowUpdate = column.valueSetter ? column.valueSetter({
232
- value: value,
233
- row: row
234
- }) : _extends({}, row, _defineProperty({}, field, value));
228
+ var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field);
235
229
 
236
230
  if (processRowUpdate) {
237
231
  var handleError = function handleError(errorThrown) {
@@ -243,6 +237,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
243
237
  };
244
238
 
245
239
  try {
240
+ var row = apiRef.current.getRow(id);
246
241
  Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
247
242
  apiRef.current.updateRows([finalRowUpdate]);
248
243
  updateFocusedCellIfNeeded();
@@ -334,11 +329,22 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
334
329
  return _ref.apply(this, arguments);
335
330
  };
336
331
  }(), [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
332
+ var getRowWithUpdatedValuesFromCellEditing = React.useCallback(function (id, field) {
333
+ var column = apiRef.current.getColumn(field);
334
+ var editingState = gridEditRowsStateSelector(apiRef.current.state);
335
+ var value = editingState[id][field].value;
336
+ var row = apiRef.current.getRow(id);
337
+ return column.valueSetter ? column.valueSetter({
338
+ value: value,
339
+ row: row
340
+ }) : _extends({}, row, _defineProperty({}, field, value));
341
+ }, [apiRef]);
337
342
  var editingApi = {
338
343
  getCellMode: getCellMode,
339
344
  startCellEditMode: startCellEditMode,
340
345
  stopCellEditMode: stopCellEditMode,
341
- unstable_setCellEditingEditCellValue: setCellEditingEditCellValue
346
+ unstable_setCellEditingEditCellValue: setCellEditingEditCellValue,
347
+ unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
342
348
  };
343
349
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
344
350
  };
@@ -5,7 +5,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  import * as React from 'react';
6
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
7
  import { useGridCellEditing } from './useGridCellEditing.new';
8
- import { GridCellModes } from '../../../models/gridEditRowModel';
8
+ import { GridCellModes, GridEditModes } from '../../../models/gridEditRowModel';
9
9
  import { useGridRowEditing } from './useGridRowEditing.new';
10
10
  export var editingStateInitializer = function editingStateInitializer(state) {
11
11
  return _extends({}, state, {
@@ -119,7 +119,7 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
119
119
  while (1) {
120
120
  switch (_context.prev = _context.next) {
121
121
  case 0:
122
- setEditCellValueToCall = props.editMode === 'row' ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
122
+ setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
123
123
  // By the time this callback runs the user may have cancelled the editing
124
124
 
125
125
  if (!(apiRef.current.getCellMode(id, field) === GridCellModes.Edit)) {
@@ -143,10 +143,14 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
143
143
  })));
144
144
  });
145
145
  }, [apiRef, props.editMode]);
146
+ var getRowWithUpdatedValues = React.useCallback(function (id, field) {
147
+ return props.editMode === GridEditModes.Cell ? apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
148
+ }, [apiRef, props.editMode]);
146
149
  var editingSharedApi = {
147
150
  isCellEditable: isCellEditable,
148
151
  setEditCellValue: setEditCellValue,
149
- unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation
152
+ unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation,
153
+ unstable_getRowWithUpdatedValues: getRowWithUpdatedValues
150
154
  };
151
155
  useGridApiMethod(apiRef, editingSharedApi, 'EditingApi');
152
156
  };
@@ -1,6 +1,6 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
1
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
3
  import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
3
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
5
  import _extends from "@babel/runtime/helpers/esm/extends";
6
6
  import * as React from 'react';
@@ -335,24 +335,7 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
335
335
  return;
336
336
  }
337
337
 
338
- var rowUpdate = _extends({}, row);
339
-
340
- Object.entries(editingState[id]).forEach(function (_ref) {
341
- var _ref2 = _slicedToArray(_ref, 2),
342
- field = _ref2[0],
343
- fieldProps = _ref2[1];
344
-
345
- var column = apiRef.current.getColumn(field);
346
-
347
- if (column.valueSetter) {
348
- rowUpdate = column.valueSetter({
349
- value: fieldProps.value,
350
- row: rowUpdate
351
- });
352
- } else {
353
- rowUpdate[field] = fieldProps.value;
354
- }
355
- });
338
+ var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
356
339
 
357
340
  if (processRowUpdate) {
358
341
  var handleError = function handleError(errorThrown) {
@@ -442,10 +425,10 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
442
425
  promises.push(promise);
443
426
  }
444
427
 
445
- Object.entries(editingState[id]).forEach(function (_ref3) {
446
- var _ref4 = _slicedToArray(_ref3, 2),
447
- thisField = _ref4[0],
448
- fieldProps = _ref4[1];
428
+ Object.entries(editingState[id]).forEach(function (_ref) {
429
+ var _ref2 = _slicedToArray(_ref, 2),
430
+ thisField = _ref2[0],
431
+ fieldProps = _ref2[1];
449
432
 
450
433
  if (thisField === field) {
451
434
  return;
@@ -498,11 +481,36 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
498
481
  });
499
482
  });
500
483
  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
484
+ var getRowWithUpdatedValuesFromRowEditing = React.useCallback(function (id) {
485
+ var editingState = gridEditRowsStateSelector(apiRef.current.state);
486
+ var row = apiRef.current.getRow(id);
487
+
488
+ var rowUpdate = _extends({}, row);
489
+
490
+ Object.entries(editingState[id]).forEach(function (_ref3) {
491
+ var _ref4 = _slicedToArray(_ref3, 2),
492
+ field = _ref4[0],
493
+ fieldProps = _ref4[1];
494
+
495
+ var column = apiRef.current.getColumn(field);
496
+
497
+ if (column.valueSetter) {
498
+ rowUpdate = column.valueSetter({
499
+ value: fieldProps.value,
500
+ row: rowUpdate
501
+ });
502
+ } else {
503
+ rowUpdate[field] = fieldProps.value;
504
+ }
505
+ });
506
+ return rowUpdate;
507
+ }, [apiRef]);
501
508
  var editingApi = {
502
509
  getRowMode: getRowMode,
503
510
  startRowEditMode: startRowEditMode,
504
511
  stopRowEditMode: stopRowEditMode,
505
- unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
512
+ unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
513
+ unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
506
514
  };
507
515
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
508
516
  };