@mui/x-data-grid 5.15.2 → 5.17.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 (286) hide show
  1. package/CHANGELOG.md +177 -2
  2. package/DataGrid/DataGrid.js +3 -1
  3. package/DataGrid/useDataGridComponent.js +5 -0
  4. package/README.md +2 -1
  5. package/components/DataGridColumnHeaders.js +4 -3
  6. package/components/ErrorBoundary.d.ts +1 -0
  7. package/components/GridAutoSizer.js +7 -0
  8. package/components/GridRow.d.ts +2 -1
  9. package/components/GridRow.js +136 -85
  10. package/components/base/GridBody.js +8 -5
  11. package/components/base/GridOverlays.js +4 -7
  12. package/components/cell/GridActionsCellItem.d.ts +2 -2
  13. package/components/cell/GridBooleanCell.js +2 -1
  14. package/components/cell/GridEditBooleanCell.js +2 -1
  15. package/components/cell/GridEditDateCell.js +3 -2
  16. package/components/cell/GridEditInputCell.js +2 -1
  17. package/components/cell/GridEditSingleSelectCell.js +11 -2
  18. package/components/cell/GridSkeletonCell.d.ts +12 -0
  19. package/components/cell/GridSkeletonCell.js +60 -0
  20. package/components/cell/index.d.ts +1 -0
  21. package/components/cell/index.js +2 -1
  22. package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
  23. package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
  24. package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
  25. package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  26. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
  27. package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  28. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  29. package/components/containers/GridOverlay.js +7 -1
  30. package/components/containers/GridRoot.js +3 -3
  31. package/components/containers/GridRootStyles.js +16 -2
  32. package/components/menu/GridMenu.d.ts +3 -2
  33. package/components/menu/GridMenu.js +1 -0
  34. package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
  35. package/components/panel/GridColumnsPanel.d.ts +6 -1
  36. package/components/panel/GridColumnsPanel.js +38 -6
  37. package/components/panel/GridPanel.d.ts +1 -1
  38. package/components/panel/GridPanel.js +1 -0
  39. package/components/panel/filterPanel/GridFilterForm.d.ts +4 -0
  40. package/components/panel/filterPanel/GridFilterForm.js +5 -0
  41. package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +1 -1
  42. package/components/panel/filterPanel/GridFilterPanel.d.ts +4 -0
  43. package/components/panel/filterPanel/GridFilterPanel.js +5 -0
  44. package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
  45. package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
  46. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  47. package/constants/defaultGridSlotsComponents.js +2 -1
  48. package/constants/gridClasses.d.ts +24 -0
  49. package/constants/gridClasses.js +1 -1
  50. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  51. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
  52. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  53. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
  54. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  55. package/hooks/features/columnGrouping/index.d.ts +2 -0
  56. package/hooks/features/columnGrouping/index.js +2 -0
  57. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
  58. package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
  59. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
  60. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  61. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
  62. package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
  63. package/hooks/features/density/densitySelector.d.ts +2 -0
  64. package/hooks/features/density/densitySelector.js +3 -1
  65. package/hooks/features/density/densityState.d.ts +1 -0
  66. package/hooks/features/density/useGridDensity.d.ts +1 -1
  67. package/hooks/features/density/useGridDensity.js +45 -9
  68. package/hooks/features/dimensions/useGridDimensions.js +4 -4
  69. package/hooks/features/export/useGridPrintExport.js +3 -3
  70. package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
  71. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  72. package/hooks/features/filter/gridFilterUtils.js +55 -54
  73. package/hooks/features/filter/useGridFilter.js +1 -1
  74. package/hooks/features/index.d.ts +1 -0
  75. package/hooks/features/index.js +1 -0
  76. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
  77. package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
  78. package/hooks/features/rows/useGridParamsApi.js +1 -1
  79. package/hooks/features/rows/useGridRows.js +65 -8
  80. package/hooks/features/rows/useGridRowsMeta.js +36 -16
  81. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
  82. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
  83. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  84. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  85. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  86. package/hooks/utils/useGridNativeEventListener.js +2 -2
  87. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  88. package/index.js +1 -1
  89. package/internals/index.d.ts +2 -0
  90. package/internals/index.js +2 -0
  91. package/legacy/DataGrid/DataGrid.js +3 -1
  92. package/legacy/DataGrid/useDataGridComponent.js +5 -0
  93. package/legacy/components/DataGridColumnHeaders.js +4 -3
  94. package/legacy/components/GridAutoSizer.js +7 -0
  95. package/legacy/components/GridRow.js +138 -85
  96. package/legacy/components/base/GridBody.js +8 -5
  97. package/legacy/components/base/GridOverlays.js +4 -7
  98. package/legacy/components/cell/GridBooleanCell.js +2 -1
  99. package/legacy/components/cell/GridEditBooleanCell.js +2 -1
  100. package/legacy/components/cell/GridEditDateCell.js +3 -2
  101. package/legacy/components/cell/GridEditInputCell.js +2 -1
  102. package/legacy/components/cell/GridEditSingleSelectCell.js +11 -2
  103. package/legacy/components/cell/GridSkeletonCell.js +57 -0
  104. package/legacy/components/cell/index.js +2 -1
  105. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  106. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
  107. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  108. package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
  109. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  110. package/legacy/components/containers/GridOverlay.js +7 -1
  111. package/legacy/components/containers/GridRoot.js +3 -3
  112. package/legacy/components/containers/GridRootStyles.js +14 -5
  113. package/legacy/components/menu/GridMenu.js +1 -0
  114. package/legacy/components/panel/GridColumnsPanel.js +41 -6
  115. package/legacy/components/panel/GridPanel.js +1 -0
  116. package/legacy/components/panel/filterPanel/GridFilterForm.js +5 -0
  117. package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -0
  118. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  119. package/legacy/constants/gridClasses.js +1 -1
  120. package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  121. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
  122. package/legacy/hooks/features/columnGrouping/index.js +2 -0
  123. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
  124. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  125. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
  126. package/legacy/hooks/features/density/densitySelector.js +6 -0
  127. package/legacy/hooks/features/density/useGridDensity.js +44 -6
  128. package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
  129. package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
  130. package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
  131. package/legacy/hooks/features/filter/useGridFilter.js +1 -1
  132. package/legacy/hooks/features/index.js +1 -0
  133. package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
  134. package/legacy/hooks/features/rows/useGridRows.js +73 -8
  135. package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
  136. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
  137. package/legacy/hooks/utils/useGridNativeEventListener.js +2 -2
  138. package/legacy/index.js +1 -1
  139. package/legacy/internals/index.js +2 -0
  140. package/legacy/models/api/gridColumnGroupingApi.js +1 -0
  141. package/legacy/models/events/gridEvents.js +2 -0
  142. package/legacy/models/gridColumnGrouping.js +6 -0
  143. package/legacy/models/index.js +2 -1
  144. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  145. package/legacy/models/params/index.js +2 -1
  146. package/legacy/utils/utils.js +18 -0
  147. package/models/api/gridApiCommon.d.ts +2 -1
  148. package/models/api/gridColumnGroupingApi.d.ts +19 -0
  149. package/models/api/gridColumnGroupingApi.js +1 -0
  150. package/models/api/gridDensityApi.d.ts +2 -1
  151. package/models/api/gridParamsApi.d.ts +1 -1
  152. package/models/api/gridRowApi.d.ts +6 -0
  153. package/models/api/gridRowsMetaApi.d.ts +6 -1
  154. package/models/colDef/gridColDef.d.ts +15 -1
  155. package/models/events/gridEventLookup.d.ts +7 -1
  156. package/models/events/gridEvents.d.ts +3 -1
  157. package/models/events/gridEvents.js +2 -0
  158. package/models/gridColumnGrouping.d.ts +67 -0
  159. package/models/gridColumnGrouping.js +6 -0
  160. package/models/gridRows.d.ts +5 -5
  161. package/models/gridSlotsComponent.d.ts +5 -0
  162. package/models/gridStateCommunity.d.ts +2 -1
  163. package/models/index.d.ts +1 -0
  164. package/models/index.js +2 -1
  165. package/models/params/gridCellParams.d.ts +7 -2
  166. package/models/params/gridMenuParams.d.ts +1 -2
  167. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
  168. package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  169. package/models/params/index.d.ts +1 -0
  170. package/models/params/index.js +2 -1
  171. package/models/props/DataGridProps.d.ts +7 -1
  172. package/modern/DataGrid/DataGrid.js +3 -1
  173. package/modern/DataGrid/useDataGridComponent.js +5 -0
  174. package/modern/components/DataGridColumnHeaders.js +4 -3
  175. package/modern/components/GridAutoSizer.js +7 -0
  176. package/modern/components/GridRow.js +133 -84
  177. package/modern/components/base/GridBody.js +8 -5
  178. package/modern/components/base/GridOverlays.js +4 -7
  179. package/modern/components/cell/GridBooleanCell.js +2 -1
  180. package/modern/components/cell/GridEditBooleanCell.js +2 -1
  181. package/modern/components/cell/GridEditDateCell.js +3 -2
  182. package/modern/components/cell/GridEditInputCell.js +2 -1
  183. package/modern/components/cell/GridEditSingleSelectCell.js +11 -2
  184. package/modern/components/cell/GridSkeletonCell.js +60 -0
  185. package/modern/components/cell/index.js +2 -1
  186. package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  187. package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
  188. package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  189. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  190. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  191. package/modern/components/containers/GridOverlay.js +7 -1
  192. package/modern/components/containers/GridRoot.js +3 -3
  193. package/modern/components/containers/GridRootStyles.js +16 -2
  194. package/modern/components/menu/GridMenu.js +1 -0
  195. package/modern/components/panel/GridColumnsPanel.js +38 -6
  196. package/modern/components/panel/GridPanel.js +1 -0
  197. package/modern/components/panel/filterPanel/GridFilterForm.js +5 -0
  198. package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -0
  199. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  200. package/modern/constants/gridClasses.js +1 -1
  201. package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  202. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  203. package/modern/hooks/features/columnGrouping/index.js +2 -0
  204. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
  205. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
  206. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
  207. package/modern/hooks/features/density/densitySelector.js +3 -1
  208. package/modern/hooks/features/density/useGridDensity.js +37 -9
  209. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
  210. package/modern/hooks/features/export/useGridPrintExport.js +3 -3
  211. package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
  212. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  213. package/modern/hooks/features/index.js +1 -0
  214. package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
  215. package/modern/hooks/features/rows/useGridRows.js +65 -8
  216. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
  217. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  218. package/modern/hooks/utils/useGridNativeEventListener.js +2 -2
  219. package/modern/index.js +1 -1
  220. package/modern/internals/index.js +2 -0
  221. package/modern/models/api/gridColumnGroupingApi.js +1 -0
  222. package/modern/models/events/gridEvents.js +2 -0
  223. package/modern/models/gridColumnGrouping.js +6 -0
  224. package/modern/models/index.js +2 -1
  225. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  226. package/modern/models/params/index.js +2 -1
  227. package/modern/utils/utils.js +16 -0
  228. package/node/DataGrid/DataGrid.js +3 -1
  229. package/node/DataGrid/useDataGridComponent.js +7 -0
  230. package/node/components/DataGridColumnHeaders.js +4 -3
  231. package/node/components/GridAutoSizer.js +7 -0
  232. package/node/components/GridRow.js +136 -77
  233. package/node/components/base/GridBody.js +7 -4
  234. package/node/components/base/GridOverlays.js +3 -6
  235. package/node/components/cell/GridBooleanCell.js +2 -1
  236. package/node/components/cell/GridEditBooleanCell.js +2 -1
  237. package/node/components/cell/GridEditDateCell.js +3 -2
  238. package/node/components/cell/GridEditInputCell.js +2 -1
  239. package/node/components/cell/GridEditSingleSelectCell.js +11 -2
  240. package/node/components/cell/GridSkeletonCell.js +81 -0
  241. package/node/components/cell/index.js +13 -0
  242. package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
  243. package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
  244. package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  245. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
  246. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  247. package/node/components/containers/GridOverlay.js +7 -1
  248. package/node/components/containers/GridRoot.js +4 -4
  249. package/node/components/containers/GridRootStyles.js +16 -2
  250. package/node/components/menu/GridMenu.js +1 -0
  251. package/node/components/panel/GridColumnsPanel.js +36 -5
  252. package/node/components/panel/GridPanel.js +1 -0
  253. package/node/components/panel/filterPanel/GridFilterForm.js +5 -0
  254. package/node/components/panel/filterPanel/GridFilterPanel.js +5 -0
  255. package/node/constants/defaultGridSlotsComponents.js +1 -0
  256. package/node/constants/gridClasses.js +1 -1
  257. package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
  258. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
  259. package/node/hooks/features/columnGrouping/index.js +18 -0
  260. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
  261. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
  262. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
  263. package/node/hooks/features/density/densitySelector.js +6 -2
  264. package/node/hooks/features/density/useGridDensity.js +48 -9
  265. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  266. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  267. package/node/hooks/features/filter/gridFilterUtils.js +55 -55
  268. package/node/hooks/features/filter/useGridFilter.js +1 -1
  269. package/node/hooks/features/index.js +13 -0
  270. package/node/hooks/features/rows/useGridParamsApi.js +1 -1
  271. package/node/hooks/features/rows/useGridRows.js +60 -7
  272. package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
  273. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  274. package/node/hooks/utils/useGridNativeEventListener.js +2 -2
  275. package/node/index.js +1 -1
  276. package/node/internals/index.js +22 -0
  277. package/node/models/api/gridColumnGroupingApi.js +5 -0
  278. package/node/models/events/gridEvents.js +2 -0
  279. package/node/models/gridColumnGrouping.js +13 -0
  280. package/node/models/index.js +13 -0
  281. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
  282. package/node/models/params/index.js +13 -0
  283. package/node/utils/utils.js +18 -0
  284. package/package.json +3 -3
  285. package/utils/utils.d.ts +1 -0
  286. package/utils/utils.js +16 -0
@@ -11,6 +11,12 @@ export var gridDensityRowHeightSelector = createSelector(gridDensitySelector, fu
11
11
  export var gridDensityHeaderHeightSelector = createSelector(gridDensitySelector, function (density) {
12
12
  return density.headerHeight;
13
13
  });
14
+ export var gridDensityHeaderGroupingMaxDepthSelector = createSelector(gridDensitySelector, function (density) {
15
+ return density.headerGroupingMaxDepth;
16
+ });
14
17
  export var gridDensityFactorSelector = createSelector(gridDensitySelector, function (density) {
15
18
  return density.factor;
19
+ });
20
+ export var gridDensityTotalHeaderHeightSelector = createSelector(gridDensitySelector, function (density) {
21
+ return density.headerHeight * (1 + density.headerGroupingMaxDepth);
16
22
  });
@@ -1,20 +1,25 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
3
  import * as React from 'react';
3
4
  import { GridDensityTypes } from '../../../models/gridDensity';
4
5
  import { useGridLogger } from '../../utils/useGridLogger';
5
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
7
  import { gridDensitySelector } from './densitySelector';
7
8
  import { isDeepEqual } from '../../../utils/utils';
9
+ import { useGridSelector } from '../../utils/useGridSelector';
10
+ import { gridVisibleColumnDefinitionsSelector } from '../columns';
11
+ import { unwrapGroupingColumnModel } from '../columnGrouping/useGridColumnGrouping';
8
12
  export var COMPACT_DENSITY_FACTOR = 0.7;
9
13
  export var COMFORTABLE_DENSITY_FACTOR = 1.3; // TODO v6: revise keeping headerHeight and rowHeight in state
10
14
 
11
- var getUpdatedDensityState = function getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight) {
15
+ var getUpdatedDensityState = function getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight, newMaxDepth) {
12
16
  switch (newDensity) {
13
17
  case GridDensityTypes.Compact:
14
18
  return {
15
19
  value: newDensity,
16
20
  headerHeight: Math.floor(newHeaderHeight * COMPACT_DENSITY_FACTOR),
17
21
  rowHeight: Math.floor(newRowHeight * COMPACT_DENSITY_FACTOR),
22
+ headerGroupingMaxDepth: newMaxDepth,
18
23
  factor: COMPACT_DENSITY_FACTOR
19
24
  };
20
25
 
@@ -23,6 +28,7 @@ var getUpdatedDensityState = function getUpdatedDensityState(newDensity, newHead
23
28
  value: newDensity,
24
29
  headerHeight: Math.floor(newHeaderHeight * COMFORTABLE_DENSITY_FACTOR),
25
30
  rowHeight: Math.floor(newRowHeight * COMFORTABLE_DENSITY_FACTOR),
31
+ headerGroupingMaxDepth: newMaxDepth,
26
32
  factor: COMFORTABLE_DENSITY_FACTOR
27
33
  };
28
34
 
@@ -31,25 +37,57 @@ var getUpdatedDensityState = function getUpdatedDensityState(newDensity, newHead
31
37
  value: newDensity,
32
38
  headerHeight: newHeaderHeight,
33
39
  rowHeight: newRowHeight,
40
+ headerGroupingMaxDepth: newMaxDepth,
34
41
  factor: 1
35
42
  };
36
43
  }
37
44
  };
38
45
 
39
46
  export var densityStateInitializer = function densityStateInitializer(state, props) {
47
+ // TODO: think about improving this initialization. Could it be done in the useColumn initializer?
48
+ // TODO: manage to remove ts-ignore
49
+ var maxDepth;
50
+
51
+ if (props.columnGroupingModel == null || Object.keys(props.columnGroupingModel).length === 0) {
52
+ maxDepth = 0;
53
+ } else {
54
+ var unwrappedGroupingColumnModel = unwrapGroupingColumnModel(props.columnGroupingModel);
55
+ var columnsState = state.columns;
56
+ var visibleColumns = columnsState.all.filter(function (field) {
57
+ return columnsState.columnVisibilityModel[field] !== false;
58
+ });
59
+
60
+ if (visibleColumns.length === 0) {
61
+ maxDepth = 0;
62
+ } else {
63
+ maxDepth = Math.max.apply(Math, _toConsumableArray(visibleColumns.map(function (field) {
64
+ var _unwrappedGroupingCol, _unwrappedGroupingCol2;
65
+
66
+ return (_unwrappedGroupingCol = (_unwrappedGroupingCol2 = unwrappedGroupingColumnModel[field]) == null ? void 0 : _unwrappedGroupingCol2.length) != null ? _unwrappedGroupingCol : 0;
67
+ })));
68
+ }
69
+ }
70
+
40
71
  return _extends({}, state, {
41
- density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight)
72
+ density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight, maxDepth)
42
73
  });
43
74
  };
44
75
  export var useGridDensity = function useGridDensity(apiRef, props) {
76
+ var visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
77
+ var maxDepth = visibleColumns.length > 0 ? Math.max.apply(Math, _toConsumableArray(visibleColumns.map(function (column) {
78
+ var _column$groupPath$len, _column$groupPath;
79
+
80
+ return (_column$groupPath$len = (_column$groupPath = column.groupPath) == null ? void 0 : _column$groupPath.length) != null ? _column$groupPath$len : 0;
81
+ }))) : 0;
45
82
  var logger = useGridLogger(apiRef, 'useDensity');
46
83
  var setDensity = React.useCallback(function (newDensity) {
47
84
  var newHeaderHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.headerHeight;
48
85
  var newRowHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : props.rowHeight;
86
+ var newMaxDepth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : maxDepth;
49
87
  logger.debug("Set grid density to ".concat(newDensity));
50
88
  apiRef.current.setState(function (state) {
51
89
  var currentDensityState = gridDensitySelector(state);
52
- var newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight);
90
+ var newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight, newMaxDepth);
53
91
 
54
92
  if (isDeepEqual(currentDensityState, newDensityState)) {
55
93
  return state;
@@ -60,10 +98,10 @@ export var useGridDensity = function useGridDensity(apiRef, props) {
60
98
  });
61
99
  });
62
100
  apiRef.current.forceUpdate();
63
- }, [logger, apiRef, props.headerHeight, props.rowHeight]);
101
+ }, [logger, apiRef, props.headerHeight, props.rowHeight, maxDepth]);
64
102
  React.useEffect(function () {
65
- apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight);
66
- }, [apiRef, props.density, props.rowHeight, props.headerHeight]);
103
+ apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight, maxDepth);
104
+ }, [apiRef, props.density, props.rowHeight, props.headerHeight, maxDepth]);
67
105
  var densityApi = {
68
106
  setDensity: setDensity
69
107
  };
@@ -4,7 +4,7 @@ import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/use
4
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
5
  import { useGridLogger } from '../../utils/useGridLogger';
6
6
  import { gridColumnsTotalWidthSelector } from '../columns';
7
- import { gridDensityHeaderHeightSelector, gridDensityRowHeightSelector } from '../density';
7
+ import { gridDensityTotalHeaderHeightSelector, gridDensityRowHeightSelector } from '../density';
8
8
  import { useGridSelector } from '../../utils';
9
9
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
10
10
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
@@ -41,7 +41,7 @@ export function useGridDimensions(apiRef, props) {
41
41
  var rootDimensionsRef = React.useRef(null);
42
42
  var fullDimensionsRef = React.useRef(null);
43
43
  var rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
44
- var headerHeight = useGridSelector(apiRef, gridDensityHeaderHeightSelector);
44
+ var totalHeaderHeight = useGridSelector(apiRef, gridDensityTotalHeaderHeightSelector);
45
45
  var updateGridDimensionsRef = React.useCallback(function () {
46
46
  var _apiRef$current$rootE;
47
47
 
@@ -86,7 +86,7 @@ export function useGridDimensions(apiRef, props) {
86
86
  } else {
87
87
  viewportOuterSize = {
88
88
  width: rootDimensionsRef.current.width,
89
- height: rootDimensionsRef.current.height - headerHeight
89
+ height: rootDimensionsRef.current.height - totalHeaderHeight
90
90
  };
91
91
  var scrollInformation = hasScroll({
92
92
  content: {
@@ -120,7 +120,7 @@ export function useGridDimensions(apiRef, props) {
120
120
  if (newFullDimensions.viewportInnerSize.width !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.width) || newFullDimensions.viewportInnerSize.height !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.height)) {
121
121
  apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
122
122
  }
123
- }, [apiRef, props.scrollbarSize, props.autoHeight, headerHeight, rowsMeta.currentPageTotalHeight]);
123
+ }, [apiRef, props.scrollbarSize, props.autoHeight, totalHeaderHeight, rowsMeta.currentPageTotalHeight]);
124
124
  var resize = React.useCallback(function () {
125
125
  updateGridDimensionsRef();
126
126
  apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
@@ -7,7 +7,7 @@ import { ownerDocument } from '@mui/material/utils';
7
7
  import { useGridLogger } from '../../utils/useGridLogger';
8
8
  import { gridVisibleRowCountSelector } from '../filter/gridFilterSelector';
9
9
  import { gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector } from '../columns/gridColumnsSelector';
10
- import { gridDensityHeaderHeightSelector } from '../density/densitySelector';
10
+ import { gridDensityTotalHeaderHeightSelector } from '../density/densitySelector';
11
11
  import { gridClasses } from '../../../constants/gridClasses';
12
12
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
13
13
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
@@ -86,7 +86,7 @@ export var useGridPrintExport = function useGridPrintExport(apiRef, props) {
86
86
  return;
87
87
  }
88
88
 
89
- var headerHeight = gridDensityHeaderHeightSelector(apiRef);
89
+ var totalHeaderHeight = gridDensityTotalHeaderHeightSelector(apiRef);
90
90
  var rowsMeta = gridRowsMetaSelector(apiRef.current.state);
91
91
  var gridRootElement = apiRef.current.rootElementRef.current;
92
92
  var gridClone = gridRootElement.cloneNode(true);
@@ -120,7 +120,7 @@ export var useGridPrintExport = function useGridPrintExport(apiRef, props) {
120
120
  } // Expand container height to accommodate all rows
121
121
 
122
122
 
123
- gridClone.style.height = "".concat(rowsMeta.currentPageTotalHeight + headerHeight + gridToolbarElementHeight + gridFooterElementHeight, "px"); // Remove all loaded elements from the current host
123
+ gridClone.style.height = "".concat(rowsMeta.currentPageTotalHeight + totalHeaderHeight + gridToolbarElementHeight + gridFooterElementHeight, "px"); // Remove all loaded elements from the current host
124
124
 
125
125
  printDoc.body.innerHTML = '';
126
126
  printDoc.body.appendChild(gridClone);
@@ -79,76 +79,78 @@ export var mergeStateWithFilterModel = function mergeStateWithFilterModel(filter
79
79
  });
80
80
  };
81
81
  };
82
- /**
83
- * Generates a method to easily check if a row is matching the current filter model.
84
- * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
85
- * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
86
- * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
87
- */
88
82
 
89
- export var buildAggregatedFilterItemsApplier = function buildAggregatedFilterItemsApplier(filterModel, apiRef) {
90
- var items = filterModel.items;
91
-
92
- var getFilterCallbackFromItem = function getFilterCallbackFromItem(filterItem) {
93
- if (!filterItem.columnField || !filterItem.operatorValue) {
94
- return null;
95
- }
83
+ var getFilterCallbackFromItem = function getFilterCallbackFromItem(filterItem, apiRef) {
84
+ if (!filterItem.columnField || !filterItem.operatorValue) {
85
+ return null;
86
+ }
96
87
 
97
- var column = apiRef.current.getColumn(filterItem.columnField);
88
+ var column = apiRef.current.getColumn(filterItem.columnField);
98
89
 
99
- if (!column) {
100
- return null;
101
- }
90
+ if (!column) {
91
+ return null;
92
+ }
102
93
 
103
- var parsedValue;
94
+ var parsedValue;
104
95
 
105
- if (column.valueParser) {
106
- var _filterItem$value;
96
+ if (column.valueParser) {
97
+ var _filterItem$value;
107
98
 
108
- var parser = column.valueParser;
109
- parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(function (x) {
110
- return parser(x);
111
- }) : parser(filterItem.value);
112
- } else {
113
- parsedValue = filterItem.value;
114
- }
99
+ var parser = column.valueParser;
100
+ parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(function (x) {
101
+ return parser(x);
102
+ }) : parser(filterItem.value);
103
+ } else {
104
+ parsedValue = filterItem.value;
105
+ }
115
106
 
116
- var newFilterItem = _extends({}, filterItem, {
117
- value: parsedValue
118
- });
107
+ var newFilterItem = _extends({}, filterItem, {
108
+ value: parsedValue
109
+ });
119
110
 
120
- var filterOperators = column.filterOperators;
111
+ var filterOperators = column.filterOperators;
121
112
 
122
- if (!(filterOperators != null && filterOperators.length)) {
123
- throw new Error("MUI: No filter operators found for column '".concat(column.field, "'."));
124
- }
113
+ if (!(filterOperators != null && filterOperators.length)) {
114
+ throw new Error("MUI: No filter operators found for column '".concat(column.field, "'."));
115
+ }
125
116
 
126
- var filterOperator = filterOperators.find(function (operator) {
127
- return operator.value === newFilterItem.operatorValue;
128
- });
117
+ var filterOperator = filterOperators.find(function (operator) {
118
+ return operator.value === newFilterItem.operatorValue;
119
+ });
129
120
 
130
- if (!filterOperator) {
131
- throw new Error("MUI: No filter operator found for column '".concat(column.field, "' and operator value '").concat(newFilterItem.operatorValue, "'."));
132
- }
121
+ if (!filterOperator) {
122
+ throw new Error("MUI: No filter operator found for column '".concat(column.field, "' and operator value '").concat(newFilterItem.operatorValue, "'."));
123
+ }
133
124
 
134
- var applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
125
+ var applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
135
126
 
136
- if (typeof applyFilterOnRow !== 'function') {
137
- return null;
138
- }
127
+ if (typeof applyFilterOnRow !== 'function') {
128
+ return null;
129
+ }
139
130
 
140
- var fn = function fn(rowId) {
141
- var cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
142
- return applyFilterOnRow(cellParams);
143
- };
131
+ var fn = function fn(rowId) {
132
+ var cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
133
+ return applyFilterOnRow(cellParams);
134
+ };
144
135
 
145
- return {
146
- fn: fn,
147
- item: newFilterItem
148
- };
136
+ return {
137
+ fn: fn,
138
+ item: newFilterItem
149
139
  };
140
+ };
141
+ /**
142
+ * Generates a method to easily check if a row is matching the current filter model.
143
+ * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
144
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
145
+ * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
146
+ */
147
+
150
148
 
151
- var appliers = items.map(getFilterCallbackFromItem).filter(function (callback) {
149
+ export var buildAggregatedFilterItemsApplier = function buildAggregatedFilterItemsApplier(filterModel, apiRef) {
150
+ var items = filterModel.items;
151
+ var appliers = items.map(function (item) {
152
+ return getFilterCallbackFromItem(item, apiRef);
153
+ }).filter(function (callback) {
152
154
  return !!callback;
153
155
  });
154
156
 
@@ -242,9 +244,12 @@ export var buildAggregatedFilterApplier = function buildAggregatedFilterApplier(
242
244
  };
243
245
  };
244
246
  };
245
- export var passFilterLogic = function passFilterLogic(allFilterItemResults, allQuickFilterResults, filterModel) {
247
+ export var passFilterLogic = function passFilterLogic(allFilterItemResults, allQuickFilterResults, filterModel, apiRef) {
246
248
  var _filterModel$quickFil2, _filterModel$linkOper;
247
249
 
250
+ var cleanedFilterItems = filterModel.items.filter(function (item) {
251
+ return getFilterCallbackFromItem(item, apiRef) !== null;
252
+ });
248
253
  var cleanedAllFilterItemResults = allFilterItemResults.filter(function (result) {
249
254
  return result != null;
250
255
  });
@@ -264,13 +269,13 @@ export var passFilterLogic = function passFilterLogic(allFilterItemResults, allQ
264
269
  };
265
270
 
266
271
  if (linkOperator === GridLinkOperator.And) {
267
- var passesAllFilters = filterModel.items.every(filterItemPredicate);
272
+ var passesAllFilters = cleanedFilterItems.every(filterItemPredicate);
268
273
 
269
274
  if (!passesAllFilters) {
270
275
  return false;
271
276
  }
272
277
  } else {
273
- var passesSomeFilters = filterModel.items.some(filterItemPredicate);
278
+ var passesSomeFilters = cleanedFilterItems.some(filterItemPredicate);
274
279
 
275
280
  if (!passesSomeFilters) {
276
281
  return false;
@@ -288,7 +288,7 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
288
288
  passingFilterItems = _params$isRowMatching.passingFilterItems,
289
289
  passingQuickFilterValues = _params$isRowMatching.passingQuickFilterValues;
290
290
 
291
- isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel);
291
+ isRowPassing = passFilterLogic([passingFilterItems], [passingQuickFilterValues], params.filterModel, apiRef);
292
292
  }
293
293
 
294
294
  filteredRowsLookup[rowId] = isRowPassing;
@@ -1,6 +1,7 @@
1
1
  // Only export the variable and types that should be publicly exposed and re-exported from `@mui/x-data-grid-pro`
2
2
  export * from './columnMenu';
3
3
  export * from './columns';
4
+ export * from './columnGrouping';
4
5
  export * from './density';
5
6
  export * from './editRows';
6
7
  export * from './filter';
@@ -109,7 +109,7 @@ export function useGridParamsApi(apiRef) {
109
109
  formattedValue: value
110
110
  };
111
111
 
112
- if (colDef.valueFormatter) {
112
+ if (colDef && colDef.valueFormatter) {
113
113
  params.formattedValue = colDef.valueFormatter({
114
114
  id: id,
115
115
  field: params.field,
@@ -1,10 +1,11 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
1
2
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
3
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
4
  import _extends from "@babel/runtime/helpers/esm/extends";
4
5
  import * as React from 'react';
5
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
7
  import { useGridLogger } from '../../utils/useGridLogger';
7
- import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector } from './gridRowsSelector';
8
+ import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector, gridRowsIdToIdLookupSelector } from './gridRowsSelector';
8
9
  import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
9
10
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
10
11
  import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
@@ -109,14 +110,14 @@ export var useGridRows = function useGridRows(apiRef, props) {
109
110
  } // we remove duplicate updates. A server can batch updates, and send several updates for the same row in one fn call.
110
111
 
111
112
 
112
- var uniqUpdates = new Map();
113
+ var uniqueUpdates = new Map();
113
114
  updates.forEach(function (update) {
114
115
  var id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');
115
116
 
116
- if (uniqUpdates.has(id)) {
117
- uniqUpdates.set(id, _extends({}, uniqUpdates.get(id), update));
117
+ if (uniqueUpdates.has(id)) {
118
+ uniqueUpdates.set(id, _extends({}, uniqueUpdates.get(id), update));
118
119
  } else {
119
- uniqUpdates.set(id, update);
120
+ uniqueUpdates.set(id, update);
120
121
  }
121
122
  });
122
123
  var deletedRowIds = [];
@@ -128,7 +129,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
128
129
  idToIdLookup: _extends({}, prevCache.idToIdLookup),
129
130
  ids: _toConsumableArray(prevCache.ids)
130
131
  };
131
- uniqUpdates.forEach(function (partialRow, id) {
132
+ uniqueUpdates.forEach(function (partialRow, id) {
132
133
  // eslint-disable-next-line no-underscore-dangle
133
134
  if (partialRow._action === 'delete') {
134
135
  delete newCache.idRowsLookup[id];
@@ -264,8 +265,71 @@ export var useGridRows = function useGridRows(apiRef, props) {
264
265
  })
265
266
  });
266
267
  });
267
- apiRef.current.applySorting();
268
+ apiRef.current.publishEvent('rowsSet');
268
269
  }, [apiRef, logger]);
270
+ var replaceRows = React.useCallback(function (firstRowToRender, newRows) {
271
+ if (props.signature === GridSignature.DataGrid && newRows.length > 1) {
272
+ throw new Error(["MUI: You can't replace rows using `apiRef.current.unstable_replaceRows` on the DataGrid.", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
273
+ }
274
+
275
+ if (newRows.length === 0) {
276
+ return;
277
+ }
278
+
279
+ var allRows = gridRowIdsSelector(apiRef);
280
+
281
+ var updatedRows = _toConsumableArray(allRows);
282
+
283
+ var idRowsLookup = gridRowsLookupSelector(apiRef);
284
+ var idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
285
+ var tree = gridRowTreeSelector(apiRef);
286
+
287
+ var updatedIdRowsLookup = _extends({}, idRowsLookup);
288
+
289
+ var updatedIdToIdLookup = _extends({}, idToIdLookup);
290
+
291
+ var updatedTree = _extends({}, tree);
292
+
293
+ var newRowEntries = newRows.map(function (newRowModel) {
294
+ var rowId = getRowIdFromRowModel(newRowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
295
+ return {
296
+ id: rowId,
297
+ model: newRowModel
298
+ };
299
+ });
300
+ newRowEntries.forEach(function (row, index) {
301
+ var _updatedRows$splice = updatedRows.splice(firstRowToRender + index, 1, row.id),
302
+ _updatedRows$splice2 = _slicedToArray(_updatedRows$splice, 1),
303
+ replacedRowId = _updatedRows$splice2[0];
304
+
305
+ delete updatedIdRowsLookup[replacedRowId];
306
+ delete updatedIdToIdLookup[replacedRowId];
307
+ delete updatedTree[replacedRowId];
308
+ });
309
+ newRowEntries.forEach(function (row) {
310
+ var rowTreeNodeConfig = {
311
+ id: row.id,
312
+ parent: null,
313
+ depth: 0,
314
+ groupingKey: null,
315
+ groupingField: null
316
+ };
317
+ updatedIdRowsLookup[row.id] = row.model;
318
+ updatedIdToIdLookup[row.id] = row.id;
319
+ updatedTree[row.id] = rowTreeNodeConfig;
320
+ });
321
+ apiRef.current.setState(function (state) {
322
+ return _extends({}, state, {
323
+ rows: _extends({}, state.rows, {
324
+ idRowsLookup: updatedIdRowsLookup,
325
+ idToIdLookup: updatedIdToIdLookup,
326
+ tree: updatedTree,
327
+ ids: updatedRows
328
+ })
329
+ });
330
+ });
331
+ apiRef.current.publishEvent('rowsSet');
332
+ }, [apiRef, props.signature, props.getRowId]);
269
333
  var rowApi = {
270
334
  getRow: getRow,
271
335
  getRowModels: getRowModels,
@@ -277,7 +341,8 @@ export var useGridRows = function useGridRows(apiRef, props) {
277
341
  setRowChildrenExpansion: setRowChildrenExpansion,
278
342
  getRowNode: getRowNode,
279
343
  getRowIndexRelativeToVisibleRows: getRowIndexRelativeToVisibleRows,
280
- getRowGroupChildren: getRowGroupChildren
344
+ getRowGroupChildren: getRowGroupChildren,
345
+ unstable_replaceRows: replaceRows
281
346
  };
282
347
  /**
283
348
  * EVENTS
@@ -1,6 +1,7 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
1
2
  import _extends from "@babel/runtime/helpers/esm/extends";
2
3
  import * as React from 'react';
3
- import { debounce } from '@mui/material/utils';
4
+ import { debounce, capitalize } from '@mui/material/utils';
4
5
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
5
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
7
  import { useGridSelector } from '../../utils/useGridSelector';
@@ -47,7 +48,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
47
48
  if (!rowsHeightLookup.current[row.id]) {
48
49
  rowsHeightLookup.current[row.id] = {
49
50
  sizes: {
50
- base: rowHeightFromDensity
51
+ baseCenter: rowHeightFromDensity
51
52
  },
52
53
  isResized: false,
53
54
  autoHeight: false,
@@ -61,7 +62,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
61
62
  needsFirstMeasurement = _rowsHeightLookup$cur.needsFirstMeasurement,
62
63
  sizes = _rowsHeightLookup$cur.sizes;
63
64
  var baseRowHeight = rowHeightFromDensity;
64
- var existingBaseRowHeight = sizes.base;
65
+ var existingBaseRowHeight = sizes.baseCenter;
65
66
 
66
67
  if (isResized) {
67
68
  // Do not recalculate resized row height and use the value from the lookup
@@ -92,12 +93,23 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
92
93
  }
93
94
  } else {
94
95
  rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
95
- } // We use an object to make simple to check if a height is already added or not
96
+ }
97
+
98
+ var existingBaseSizes = Object.entries(sizes).reduce(function (acc, _ref) {
99
+ var _ref2 = _slicedToArray(_ref, 2),
100
+ key = _ref2[0],
101
+ size = _ref2[1];
102
+
103
+ if (/^base[A-Z]/.test(key)) {
104
+ acc[key] = size;
105
+ }
96
106
 
107
+ return acc;
108
+ }, {}); // We use an object to make simple to check if a height is already added or not
97
109
 
98
- var initialHeights = {
99
- base: baseRowHeight
100
- };
110
+ var initialHeights = _extends({}, existingBaseSizes, {
111
+ baseCenter: baseRowHeight
112
+ });
101
113
 
102
114
  if (getRowSpacing) {
103
115
  var _spacing$top, _spacing$bottom;
@@ -120,11 +132,21 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
120
132
  var positions = [];
121
133
  var currentPageTotalHeight = currentPage.rows.reduce(function (acc, row) {
122
134
  positions.push(acc);
135
+ var maximumBaseSize = 0;
136
+ var otherSizes = 0;
123
137
  var processedSizes = calculateRowProcessedSizes(row);
124
- var finalRowHeight = Object.values(processedSizes).reduce(function (acc2, value) {
125
- return acc2 + value;
126
- }, 0);
127
- return acc + finalRowHeight;
138
+ Object.entries(processedSizes).forEach(function (_ref3) {
139
+ var _ref4 = _slicedToArray(_ref3, 2),
140
+ size = _ref4[0],
141
+ value = _ref4[1];
142
+
143
+ if (/^base[A-Z]/.test(size)) {
144
+ maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
145
+ } else {
146
+ otherSizes += value;
147
+ }
148
+ });
149
+ return acc + maximumBaseSize + otherSizes;
128
150
  }, 0);
129
151
  pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(function (row) {
130
152
  calculateRowProcessedSizes(row);
@@ -150,7 +172,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
150
172
  }, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows]);
151
173
  var getRowHeight = React.useCallback(function (rowId) {
152
174
  var height = rowsHeightLookup.current[rowId];
153
- return height ? height.sizes.base : rowHeightFromDensity;
175
+ return height ? height.sizes.baseCenter : rowHeightFromDensity;
154
176
  }, [rowHeightFromDensity]);
155
177
 
156
178
  var getRowInternalSizes = function getRowInternalSizes(rowId) {
@@ -160,7 +182,7 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
160
182
  };
161
183
 
162
184
  var setRowHeight = React.useCallback(function (id, height) {
163
- rowsHeightLookup.current[id].sizes.base = height;
185
+ rowsHeightLookup.current[id].sizes.baseCenter = height;
164
186
  rowsHeightLookup.current[id].isResized = true;
165
187
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
166
188
  hydrateRowsMeta();
@@ -168,15 +190,15 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
168
190
  var debouncedHydrateRowsMeta = React.useMemo(function () {
169
191
  return debounce(hydrateRowsMeta);
170
192
  }, [hydrateRowsMeta]);
171
- var storeMeasuredRowHeight = React.useCallback(function (id, height) {
193
+ var storeMeasuredRowHeight = React.useCallback(function (id, height, position) {
172
194
  if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
173
195
  return;
174
196
  } // Only trigger hydration if the value is different, otherwise we trigger a loop
175
197
 
176
198
 
177
- var needsHydration = rowsHeightLookup.current[id].sizes.base !== height;
199
+ var needsHydration = rowsHeightLookup.current[id].sizes["base".concat(capitalize(position))] !== height;
178
200
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
179
- rowsHeightLookup.current[id].sizes.base = height;
201
+ rowsHeightLookup.current[id].sizes["base".concat(capitalize(position))] = height;
180
202
 
181
203
  if (needsHydration) {
182
204
  debouncedHydrateRowsMeta();
@@ -194,7 +216,11 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
194
216
  if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
195
217
  lastMeasuredRowIndex.current = index;
196
218
  }
197
- }, []); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
219
+ }, []);
220
+ var resetRowHeights = React.useCallback(function () {
221
+ rowsHeightLookup.current = {};
222
+ hydrateRowsMeta();
223
+ }, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
198
224
  // Because of variable row height this is needed for the virtualization
199
225
 
200
226
  React.useEffect(function () {
@@ -208,7 +234,8 @@ export var useGridRowsMeta = function useGridRowsMeta(apiRef, props) {
208
234
  unstable_getRowHeight: getRowHeight,
209
235
  unstable_getRowInternalSizes: getRowInternalSizes,
210
236
  unstable_setRowHeight: setRowHeight,
211
- unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
237
+ unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,
238
+ resetRowHeights: resetRowHeights
212
239
  };
213
240
  useGridApiMethod(apiRef, rowsMetaApi, 'GridRowsMetaApi');
214
241
  };