@mui/x-data-grid 5.15.3 → 5.17.1

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 (257) hide show
  1. package/CHANGELOG.md +150 -1
  2. package/DataGrid/DataGrid.js +2 -0
  3. package/DataGrid/useDataGridComponent.js +5 -0
  4. package/components/DataGridColumnHeaders.js +4 -3
  5. package/components/GridRow.d.ts +2 -1
  6. package/components/GridRow.js +136 -85
  7. package/components/base/GridBody.js +8 -5
  8. package/components/base/GridOverlays.js +3 -3
  9. package/components/cell/GridBooleanCell.js +2 -1
  10. package/components/cell/GridCell.js +9 -1
  11. package/components/cell/GridEditBooleanCell.js +2 -1
  12. package/components/cell/GridEditDateCell.js +2 -1
  13. package/components/cell/GridEditInputCell.js +2 -1
  14. package/components/cell/GridEditSingleSelectCell.js +2 -1
  15. package/components/cell/GridSkeletonCell.d.ts +12 -0
  16. package/components/cell/GridSkeletonCell.js +60 -0
  17. package/components/cell/index.d.ts +1 -0
  18. package/components/cell/index.js +2 -1
  19. package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
  20. package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
  21. package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
  22. package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  23. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
  24. package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  25. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  26. package/components/containers/GridRoot.js +3 -3
  27. package/components/containers/GridRootStyles.js +16 -2
  28. package/components/panel/GridColumnsPanel.d.ts +6 -1
  29. package/components/panel/GridColumnsPanel.js +38 -6
  30. package/components/panel/GridPanel.d.ts +1 -1
  31. package/constants/defaultGridSlotsComponents.js +2 -1
  32. package/constants/gridClasses.d.ts +24 -0
  33. package/constants/gridClasses.js +1 -1
  34. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  35. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
  36. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  37. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
  38. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  39. package/hooks/features/columnGrouping/index.d.ts +2 -0
  40. package/hooks/features/columnGrouping/index.js +2 -0
  41. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
  42. package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
  43. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
  44. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  45. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
  46. package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
  47. package/hooks/features/density/densitySelector.d.ts +2 -0
  48. package/hooks/features/density/densitySelector.js +3 -1
  49. package/hooks/features/density/densityState.d.ts +1 -0
  50. package/hooks/features/density/useGridDensity.d.ts +1 -1
  51. package/hooks/features/density/useGridDensity.js +45 -9
  52. package/hooks/features/dimensions/useGridDimensions.js +4 -4
  53. package/hooks/features/export/useGridPrintExport.js +3 -3
  54. package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
  55. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  56. package/hooks/features/filter/gridFilterUtils.js +55 -54
  57. package/hooks/features/filter/useGridFilter.js +1 -1
  58. package/hooks/features/focus/useGridFocus.js +13 -3
  59. package/hooks/features/index.d.ts +1 -0
  60. package/hooks/features/index.js +1 -0
  61. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  62. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
  63. package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
  64. package/hooks/features/rows/useGridParamsApi.js +1 -1
  65. package/hooks/features/rows/useGridRows.js +65 -8
  66. package/hooks/features/rows/useGridRowsMeta.js +36 -16
  67. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
  68. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
  69. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  70. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  71. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  72. package/index.js +1 -1
  73. package/internals/index.d.ts +3 -1
  74. package/internals/index.js +3 -1
  75. package/legacy/DataGrid/DataGrid.js +2 -0
  76. package/legacy/DataGrid/useDataGridComponent.js +5 -0
  77. package/legacy/components/DataGridColumnHeaders.js +4 -3
  78. package/legacy/components/GridRow.js +138 -85
  79. package/legacy/components/base/GridBody.js +8 -5
  80. package/legacy/components/base/GridOverlays.js +3 -3
  81. package/legacy/components/cell/GridBooleanCell.js +2 -1
  82. package/legacy/components/cell/GridCell.js +11 -1
  83. package/legacy/components/cell/GridEditBooleanCell.js +2 -1
  84. package/legacy/components/cell/GridEditDateCell.js +2 -1
  85. package/legacy/components/cell/GridEditInputCell.js +2 -1
  86. package/legacy/components/cell/GridEditSingleSelectCell.js +2 -1
  87. package/legacy/components/cell/GridSkeletonCell.js +57 -0
  88. package/legacy/components/cell/index.js +2 -1
  89. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  90. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
  91. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  92. package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
  93. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  94. package/legacy/components/containers/GridRoot.js +3 -3
  95. package/legacy/components/containers/GridRootStyles.js +14 -5
  96. package/legacy/components/panel/GridColumnsPanel.js +41 -6
  97. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  98. package/legacy/constants/gridClasses.js +1 -1
  99. package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  100. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
  101. package/legacy/hooks/features/columnGrouping/index.js +2 -0
  102. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
  103. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  104. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
  105. package/legacy/hooks/features/density/densitySelector.js +6 -0
  106. package/legacy/hooks/features/density/useGridDensity.js +44 -6
  107. package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
  108. package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
  109. package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
  110. package/legacy/hooks/features/filter/useGridFilter.js +1 -1
  111. package/legacy/hooks/features/focus/useGridFocus.js +13 -3
  112. package/legacy/hooks/features/index.js +1 -0
  113. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  114. package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
  115. package/legacy/hooks/features/rows/useGridRows.js +73 -8
  116. package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
  117. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
  118. package/legacy/index.js +1 -1
  119. package/legacy/internals/index.js +3 -1
  120. package/legacy/models/api/gridColumnGroupingApi.js +1 -0
  121. package/legacy/models/events/gridEvents.js +2 -0
  122. package/legacy/models/gridColumnGrouping.js +6 -0
  123. package/legacy/models/index.js +2 -1
  124. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  125. package/legacy/models/params/index.js +2 -1
  126. package/legacy/utils/utils.js +18 -0
  127. package/models/api/gridApiCommon.d.ts +2 -1
  128. package/models/api/gridColumnGroupingApi.d.ts +19 -0
  129. package/models/api/gridColumnGroupingApi.js +1 -0
  130. package/models/api/gridDensityApi.d.ts +2 -1
  131. package/models/api/gridParamsApi.d.ts +1 -1
  132. package/models/api/gridRowApi.d.ts +6 -0
  133. package/models/api/gridRowsMetaApi.d.ts +6 -1
  134. package/models/colDef/gridColDef.d.ts +15 -1
  135. package/models/events/gridEventLookup.d.ts +7 -1
  136. package/models/events/gridEvents.d.ts +3 -1
  137. package/models/events/gridEvents.js +2 -0
  138. package/models/gridColumnGrouping.d.ts +67 -0
  139. package/models/gridColumnGrouping.js +6 -0
  140. package/models/gridRows.d.ts +5 -5
  141. package/models/gridSlotsComponent.d.ts +5 -0
  142. package/models/gridStateCommunity.d.ts +2 -1
  143. package/models/index.d.ts +1 -0
  144. package/models/index.js +2 -1
  145. package/models/params/gridCellParams.d.ts +7 -2
  146. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
  147. package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  148. package/models/params/index.d.ts +1 -0
  149. package/models/params/index.js +2 -1
  150. package/models/props/DataGridProps.d.ts +6 -0
  151. package/modern/DataGrid/DataGrid.js +2 -0
  152. package/modern/DataGrid/useDataGridComponent.js +5 -0
  153. package/modern/components/DataGridColumnHeaders.js +4 -3
  154. package/modern/components/GridRow.js +133 -84
  155. package/modern/components/base/GridBody.js +8 -5
  156. package/modern/components/base/GridOverlays.js +3 -3
  157. package/modern/components/cell/GridBooleanCell.js +2 -1
  158. package/modern/components/cell/GridCell.js +9 -1
  159. package/modern/components/cell/GridEditBooleanCell.js +2 -1
  160. package/modern/components/cell/GridEditDateCell.js +2 -1
  161. package/modern/components/cell/GridEditInputCell.js +2 -1
  162. package/modern/components/cell/GridEditSingleSelectCell.js +2 -1
  163. package/modern/components/cell/GridSkeletonCell.js +60 -0
  164. package/modern/components/cell/index.js +2 -1
  165. package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  166. package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
  167. package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  168. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  169. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  170. package/modern/components/containers/GridRoot.js +3 -3
  171. package/modern/components/containers/GridRootStyles.js +16 -2
  172. package/modern/components/panel/GridColumnsPanel.js +38 -6
  173. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  174. package/modern/constants/gridClasses.js +1 -1
  175. package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  176. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  177. package/modern/hooks/features/columnGrouping/index.js +2 -0
  178. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
  179. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
  180. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
  181. package/modern/hooks/features/density/densitySelector.js +3 -1
  182. package/modern/hooks/features/density/useGridDensity.js +37 -9
  183. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
  184. package/modern/hooks/features/export/useGridPrintExport.js +3 -3
  185. package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
  186. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  187. package/modern/hooks/features/focus/useGridFocus.js +13 -3
  188. package/modern/hooks/features/index.js +1 -0
  189. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  190. package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
  191. package/modern/hooks/features/rows/useGridRows.js +65 -8
  192. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
  193. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  194. package/modern/index.js +1 -1
  195. package/modern/internals/index.js +3 -1
  196. package/modern/models/api/gridColumnGroupingApi.js +1 -0
  197. package/modern/models/events/gridEvents.js +2 -0
  198. package/modern/models/gridColumnGrouping.js +6 -0
  199. package/modern/models/index.js +2 -1
  200. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  201. package/modern/models/params/index.js +2 -1
  202. package/modern/utils/utils.js +16 -0
  203. package/node/DataGrid/DataGrid.js +2 -0
  204. package/node/DataGrid/useDataGridComponent.js +7 -0
  205. package/node/components/DataGridColumnHeaders.js +4 -3
  206. package/node/components/GridRow.js +136 -77
  207. package/node/components/base/GridBody.js +7 -4
  208. package/node/components/base/GridOverlays.js +2 -2
  209. package/node/components/cell/GridBooleanCell.js +2 -1
  210. package/node/components/cell/GridCell.js +9 -1
  211. package/node/components/cell/GridEditBooleanCell.js +2 -1
  212. package/node/components/cell/GridEditDateCell.js +2 -1
  213. package/node/components/cell/GridEditInputCell.js +2 -1
  214. package/node/components/cell/GridEditSingleSelectCell.js +2 -1
  215. package/node/components/cell/GridSkeletonCell.js +81 -0
  216. package/node/components/cell/index.js +13 -0
  217. package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
  218. package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
  219. package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  220. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
  221. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  222. package/node/components/containers/GridRoot.js +4 -4
  223. package/node/components/containers/GridRootStyles.js +16 -2
  224. package/node/components/panel/GridColumnsPanel.js +36 -5
  225. package/node/constants/defaultGridSlotsComponents.js +1 -0
  226. package/node/constants/gridClasses.js +1 -1
  227. package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
  228. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
  229. package/node/hooks/features/columnGrouping/index.js +18 -0
  230. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
  231. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
  232. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
  233. package/node/hooks/features/density/densitySelector.js +6 -2
  234. package/node/hooks/features/density/useGridDensity.js +48 -9
  235. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  236. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  237. package/node/hooks/features/filter/gridFilterUtils.js +55 -55
  238. package/node/hooks/features/filter/useGridFilter.js +1 -1
  239. package/node/hooks/features/focus/useGridFocus.js +13 -3
  240. package/node/hooks/features/index.js +13 -0
  241. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  242. package/node/hooks/features/rows/useGridParamsApi.js +1 -1
  243. package/node/hooks/features/rows/useGridRows.js +60 -7
  244. package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
  245. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  246. package/node/index.js +1 -1
  247. package/node/internals/index.js +28 -0
  248. package/node/models/api/gridColumnGroupingApi.js +5 -0
  249. package/node/models/events/gridEvents.js +2 -0
  250. package/node/models/gridColumnGrouping.js +13 -0
  251. package/node/models/index.js +13 -0
  252. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
  253. package/node/models/params/index.js +13 -0
  254. package/node/utils/utils.js +18 -0
  255. package/package.json +3 -3
  256. package/utils/utils.d.ts +1 -0
  257. package/utils/utils.js +16 -0
@@ -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;
@@ -134,8 +134,18 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
134
134
  }
135
135
 
136
136
  rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
137
- columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
138
137
  var rowToFocus = currentPage.rows[rowIndexToFocus];
138
+ var colSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowToFocus.id, columnIndexToFocus);
139
+
140
+ if (colSpanInfo && colSpanInfo.spannedByColSpan) {
141
+ if (direction === 'left' || direction === 'below') {
142
+ columnIndexToFocus = colSpanInfo.leftVisibleCellIndex;
143
+ } else if (direction === 'right') {
144
+ columnIndexToFocus = colSpanInfo.rightVisibleCellIndex;
145
+ }
146
+ }
147
+
148
+ columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
139
149
  var columnToFocus = visibleColumns[columnIndexToFocus];
140
150
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
141
151
  }, [apiRef, props.pagination, props.paginationMode]);
@@ -172,7 +182,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
172
182
  });
173
183
  });
174
184
  }, [logger, apiRef]);
175
- var handleCellMouseUp = React.useCallback(function (params) {
185
+ var handleCellMouseDown = React.useCallback(function (params) {
176
186
  lastClickedCell.current = params;
177
187
  }, []);
178
188
  var handleDocumentClick = React.useCallback(function (event) {
@@ -259,7 +269,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
259
269
  }, [apiRef, handleDocumentClick]);
260
270
  useGridApiEventHandler(apiRef, 'columnHeaderBlur', handleBlur);
261
271
  useGridApiEventHandler(apiRef, 'cellDoubleClick', handleCellDoubleClick);
262
- useGridApiEventHandler(apiRef, 'cellMouseUp', handleCellMouseUp);
272
+ useGridApiEventHandler(apiRef, 'cellMouseDown', handleCellMouseDown);
263
273
  useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
264
274
  useGridApiEventHandler(apiRef, 'cellModeChange', handleCellModeChange);
265
275
  useGridApiEventHandler(apiRef, 'columnHeaderFocus', handleColumnHeaderFocus);
@@ -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';
@@ -37,6 +37,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
37
37
  * @param {number} colIndex Index of the column to focus
38
38
  * @param {number} rowIndex index of the row to focus
39
39
  * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
40
+ * TODO replace with apiRef.current.unstable_moveFocusToRelativeCell()
40
41
  */
41
42
 
42
43
  var goToCell = React.useCallback(function (colIndex, rowId) {
@@ -98,6 +99,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
98
99
  case 'ArrowDown':
99
100
  case 'Enter':
100
101
  {
102
+ // TODO v6: Remove Enter case because `cellNavigationKeyDown` is not fired by the new editing API
101
103
  // "Enter" is only triggered by the row / cell editing feature
102
104
  if (rowIndexBefore < lastRowIndexInPage) {
103
105
  goToCell(colIndexBefore, getRowIdFromIndex(rowIndexBefore + 1));
@@ -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