@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
@@ -15,6 +15,8 @@ var ReactDOM = _interopRequireWildcard(require("react-dom"));
15
15
 
16
16
  var _utils = require("@mui/material/utils");
17
17
 
18
+ var _styles = require("@mui/material/styles");
19
+
18
20
  var _reselect = require("reselect");
19
21
 
20
22
  var _useGridApiContext = require("../../utils/useGridApiContext");
@@ -45,12 +47,26 @@ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
45
47
 
46
48
  var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
47
49
 
50
+ var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
51
+
52
+ var _utils2 = require("../../../utils/utils");
53
+
48
54
  var _jsxRuntime = require("react/jsx-runtime");
49
55
 
50
56
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
51
57
 
52
58
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
59
 
60
+ // TODO: add the possibility to switch this value if needed for customization
61
+ const MERGE_EMPTY_CELLS = true;
62
+ const GridColumnHeaderRow = (0, _styles.styled)('div', {
63
+ name: 'MuiDataGrid',
64
+ slot: 'ColumnHeaderRow',
65
+ overridesResolver: (props, styles) => styles.columnHeaderRow
66
+ })(() => ({
67
+ display: 'flex'
68
+ }));
69
+
54
70
  function isUIEvent(event) {
55
71
  return !!event.target;
56
72
  }
@@ -69,6 +85,8 @@ const useGridColumnHeaders = props => {
69
85
  const cellTabIndexState = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridTabIndexCellSelector);
70
86
  const columnHeaderFocus = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridFocusColumnHeaderSelector);
71
87
  const headerHeight = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityHeaderHeightSelector);
88
+ const headerGroupingMaxDepth = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityHeaderGroupingMaxDepthSelector);
89
+ const totalHeaderHeight = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityTotalHeaderHeightSelector);
72
90
  const filterColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterActiveItemsLookupSelector);
73
91
  const sortColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortColumnLookupSelector);
74
92
  const columnMenuState = (0, _useGridSelector.useGridSelector)(apiRef, _columnMenuSelector.gridColumnMenuSelector);
@@ -164,9 +182,9 @@ const useGridColumnHeaders = props => {
164
182
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnResizeStop', handleColumnResizeStop);
165
183
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
166
184
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
167
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsScroll', handleScroll);
185
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsScroll', handleScroll); // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
168
186
 
169
- const getColumns = (params, other = {}) => {
187
+ const getColumnsToRender = params => {
170
188
  const {
171
189
  renderContext: nextRenderContext = renderContext,
172
190
  minFirstColumn = minColumnIndex,
@@ -177,7 +195,6 @@ const useGridColumnHeaders = props => {
177
195
  return null;
178
196
  }
179
197
 
180
- const columns = [];
181
198
  const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
182
199
  firstIndex: nextRenderContext.firstRowIndex,
183
200
  lastIndex: nextRenderContext.lastRowIndex,
@@ -196,6 +213,27 @@ const useGridColumnHeaders = props => {
196
213
  });
197
214
  const lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
198
215
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
216
+ return {
217
+ renderedColumns,
218
+ firstColumnToRender,
219
+ lastColumnToRender,
220
+ minFirstColumn,
221
+ maxLastColumn
222
+ };
223
+ };
224
+
225
+ const getColumnHeaders = (params, other = {}) => {
226
+ const columnsToRender = getColumnsToRender(params);
227
+
228
+ if (columnsToRender == null) {
229
+ return null;
230
+ }
231
+
232
+ const {
233
+ renderedColumns,
234
+ firstColumnToRender
235
+ } = columnsToRender;
236
+ const columns = [];
199
237
 
200
238
  for (let i = 0; i < renderedColumns.length; i += 1) {
201
239
  const column = renderedColumns[i];
@@ -220,25 +258,186 @@ const useGridColumnHeaders = props => {
220
258
  }, other), column.field));
221
259
  }
222
260
 
261
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
262
+ role: "row",
263
+ "aria-rowindex": headerGroupingMaxDepth + 1,
264
+ children: columns
265
+ });
266
+ };
267
+
268
+ const getParents = (path = [], depth) => path.slice(0, depth + 1);
269
+
270
+ const getColumnGroupHeaders = params => {
271
+ if (headerGroupingMaxDepth === 0) {
272
+ return null;
273
+ }
274
+
275
+ const columnsToRender = getColumnsToRender(params);
276
+
277
+ if (columnsToRender == null) {
278
+ return null;
279
+ }
280
+
281
+ const {
282
+ renderedColumns,
283
+ firstColumnToRender,
284
+ lastColumnToRender,
285
+ maxLastColumn
286
+ } = columnsToRender;
287
+ const columns = [];
288
+ const headerToRender = [];
289
+
290
+ for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
291
+ var _visibleColumns$first, _visibleColumns$first2, _visibleColumns$first3;
292
+
293
+ // Initialize the header line with a grouping item containing all the columns on the left of the virtualization which are in the same group as the first group to render
294
+ const initialHeader = [];
295
+ let leftOverflow = 0;
296
+ let columnIndex = firstColumnToRender - 1;
297
+ const firstColumnToRenderGroup = (_visibleColumns$first = visibleColumns[firstColumnToRender]) == null ? void 0 : (_visibleColumns$first2 = _visibleColumns$first.groupPath) == null ? void 0 : _visibleColumns$first2[depth]; // The array of parent is used to manage empty grouping cell
298
+ // When two empty grouping cell are next to each other, we merge them if the belong to the same group.
299
+
300
+ const firstColumnToRenderGroupParents = getParents((_visibleColumns$first3 = visibleColumns[firstColumnToRender]) == null ? void 0 : _visibleColumns$first3.groupPath, depth);
301
+
302
+ while (firstColumnToRenderGroup !== null && columnIndex >= minColumnIndex && (_visibleColumns$colum = visibleColumns[columnIndex]) != null && _visibleColumns$colum.groupPath && (0, _utils2.isDeepEqual)(getParents((_visibleColumns$colum2 = visibleColumns[columnIndex]) == null ? void 0 : _visibleColumns$colum2.groupPath, depth), firstColumnToRenderGroupParents)) {
303
+ var _visibleColumns$colum, _visibleColumns$colum2, _column$computedWidth;
304
+
305
+ const column = visibleColumns[columnIndex];
306
+ leftOverflow += (_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0;
307
+
308
+ if (initialHeader.length === 0) {
309
+ var _column$computedWidth2;
310
+
311
+ initialHeader.push({
312
+ width: (_column$computedWidth2 = column.computedWidth) != null ? _column$computedWidth2 : 0,
313
+ fields: [column.field],
314
+ groupId: firstColumnToRenderGroup,
315
+ groupParents: firstColumnToRenderGroupParents,
316
+ colIndex: columnIndex
317
+ });
318
+ } else {
319
+ var _column$computedWidth3;
320
+
321
+ initialHeader[0].width += (_column$computedWidth3 = column.computedWidth) != null ? _column$computedWidth3 : 0;
322
+ initialHeader[0].fields.push(column.field);
323
+ initialHeader[0].colIndex = columnIndex;
324
+ }
325
+
326
+ columnIndex -= 1;
327
+ }
328
+
329
+ const depthInfo = renderedColumns.reduce((aggregated, column, i) => {
330
+ var _column$computedWidth7;
331
+
332
+ const lastItem = aggregated[aggregated.length - 1];
333
+
334
+ if (column.groupPath && column.groupPath.length > depth) {
335
+ var _column$computedWidth5;
336
+
337
+ if (lastItem && lastItem.groupId === column.groupPath[depth]) {
338
+ var _column$computedWidth4;
339
+
340
+ // Merge with the previous columns
341
+ return [...aggregated.slice(0, aggregated.length - 1), (0, _extends2.default)({}, lastItem, {
342
+ width: lastItem.width + ((_column$computedWidth4 = column.computedWidth) != null ? _column$computedWidth4 : 0),
343
+ fields: [...lastItem.fields, column.field]
344
+ })];
345
+ } // Create a new grouping
346
+
347
+
348
+ return [...aggregated, {
349
+ groupId: column.groupPath[depth],
350
+ groupParents: getParents(column.groupPath, depth),
351
+ width: (_column$computedWidth5 = column.computedWidth) != null ? _column$computedWidth5 : 0,
352
+ fields: [column.field],
353
+ colIndex: firstColumnToRender + i
354
+ }];
355
+ }
356
+
357
+ if (MERGE_EMPTY_CELLS && lastItem && lastItem.groupId === null && (0, _utils2.isDeepEqual)(getParents(column.groupPath, depth), lastItem.groupParents)) {
358
+ var _column$computedWidth6;
359
+
360
+ // We merge with previous column
361
+ return [...aggregated.slice(0, aggregated.length - 1), (0, _extends2.default)({}, lastItem, {
362
+ width: lastItem.width + ((_column$computedWidth6 = column.computedWidth) != null ? _column$computedWidth6 : 0),
363
+ fields: [...lastItem.fields, column.field]
364
+ })];
365
+ } // We create new empty cell
366
+
367
+
368
+ return [...aggregated, {
369
+ groupId: null,
370
+ groupParents: getParents(column.groupPath, depth),
371
+ width: (_column$computedWidth7 = column.computedWidth) != null ? _column$computedWidth7 : 0,
372
+ fields: [column.field],
373
+ colIndex: firstColumnToRender + i
374
+ }];
375
+ }, initialHeader);
376
+ columnIndex = lastColumnToRender;
377
+ const lastColumnToRenderGroup = depthInfo[depthInfo.length - 1].groupId;
378
+
379
+ while (lastColumnToRenderGroup !== null && columnIndex < maxLastColumn && (_visibleColumns$colum3 = visibleColumns[columnIndex]) != null && _visibleColumns$colum3.groupPath && ((_visibleColumns$colum4 = visibleColumns[columnIndex]) == null ? void 0 : (_visibleColumns$colum5 = _visibleColumns$colum4.groupPath) == null ? void 0 : _visibleColumns$colum5[depth]) === lastColumnToRenderGroup) {
380
+ var _visibleColumns$colum3, _visibleColumns$colum4, _visibleColumns$colum5, _column$computedWidth8;
381
+
382
+ const column = visibleColumns[columnIndex];
383
+ depthInfo[depthInfo.length - 1].width += (_column$computedWidth8 = column.computedWidth) != null ? _column$computedWidth8 : 0;
384
+ depthInfo[depthInfo.length - 1].fields.push(column.field);
385
+ columnIndex += 1;
386
+ }
387
+
388
+ headerToRender.push({
389
+ leftOverflow,
390
+ elements: [...depthInfo]
391
+ });
392
+ }
393
+
394
+ headerToRender.forEach((depthInfo, depthIndex) => {
395
+ columns.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
396
+ style: {
397
+ height: `${headerHeight}px`,
398
+ transform: `translateX(-${depthInfo.leftOverflow}px)`
399
+ },
400
+ role: "row",
401
+ "aria-rowindex": depthIndex + 1,
402
+ children: depthInfo.elements.map(({
403
+ groupId,
404
+ width,
405
+ fields,
406
+ colIndex
407
+ }, groupIndex) => {
408
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnGroupHeader.GridColumnGroupHeader, {
409
+ groupId: groupId,
410
+ width: width,
411
+ fields: fields,
412
+ colIndex: colIndex,
413
+ depth: depthIndex,
414
+ isLastColumn: colIndex === visibleColumns.length - fields.length,
415
+ extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
416
+ maxDepth: headerToRender.length,
417
+ height: headerHeight
418
+ }, groupIndex);
419
+ })
420
+ }, depthIndex));
421
+ });
223
422
  return columns;
224
423
  };
225
424
 
226
425
  const rootStyle = {
227
- minHeight: headerHeight,
228
- maxHeight: headerHeight,
426
+ minHeight: totalHeaderHeight,
427
+ maxHeight: totalHeaderHeight,
229
428
  lineHeight: `${headerHeight}px`
230
429
  };
231
430
  return {
232
431
  renderContext,
233
- getColumns,
432
+ getColumnHeaders,
433
+ getColumnGroupHeaders,
234
434
  isDragging: !!dragCol,
235
435
  getRootProps: (other = {}) => (0, _extends2.default)({
236
436
  style: rootStyle
237
437
  }, other),
238
438
  getInnerProps: () => ({
239
439
  ref: handleInnerRef,
240
- 'aria-rowindex': 1,
241
- role: 'row'
440
+ role: 'rowgroup'
242
441
  })
243
442
  };
244
443
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridDensityValueSelector = exports.gridDensitySelector = exports.gridDensityRowHeightSelector = exports.gridDensityHeaderHeightSelector = exports.gridDensityFactorSelector = void 0;
6
+ exports.gridDensityValueSelector = exports.gridDensityTotalHeaderHeightSelector = exports.gridDensitySelector = exports.gridDensityRowHeightSelector = exports.gridDensityHeaderHeightSelector = exports.gridDensityHeaderGroupingMaxDepthSelector = exports.gridDensityFactorSelector = void 0;
7
7
 
8
8
  var _createSelector = require("../../../utils/createSelector");
9
9
 
@@ -16,5 +16,9 @@ const gridDensityRowHeightSelector = (0, _createSelector.createSelector)(gridDen
16
16
  exports.gridDensityRowHeightSelector = gridDensityRowHeightSelector;
17
17
  const gridDensityHeaderHeightSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerHeight);
18
18
  exports.gridDensityHeaderHeightSelector = gridDensityHeaderHeightSelector;
19
+ const gridDensityHeaderGroupingMaxDepthSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerGroupingMaxDepth);
20
+ exports.gridDensityHeaderGroupingMaxDepthSelector = gridDensityHeaderGroupingMaxDepthSelector;
19
21
  const gridDensityFactorSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.factor);
20
- exports.gridDensityFactorSelector = gridDensityFactorSelector;
22
+ exports.gridDensityFactorSelector = gridDensityFactorSelector;
23
+ const gridDensityTotalHeaderHeightSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerHeight * (1 + density.headerGroupingMaxDepth));
24
+ exports.gridDensityTotalHeaderHeightSelector = gridDensityTotalHeaderHeightSelector;
@@ -21,6 +21,12 @@ var _densitySelector = require("./densitySelector");
21
21
 
22
22
  var _utils = require("../../../utils/utils");
23
23
 
24
+ var _useGridSelector = require("../../utils/useGridSelector");
25
+
26
+ var _columns = require("../columns");
27
+
28
+ var _useGridColumnGrouping = require("../columnGrouping/useGridColumnGrouping");
29
+
24
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
31
 
26
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -31,13 +37,14 @@ const COMFORTABLE_DENSITY_FACTOR = 1.3; // TODO v6: revise keeping headerHeight
31
37
 
32
38
  exports.COMFORTABLE_DENSITY_FACTOR = COMFORTABLE_DENSITY_FACTOR;
33
39
 
34
- const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight) => {
40
+ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight, newMaxDepth) => {
35
41
  switch (newDensity) {
36
42
  case _gridDensity.GridDensityTypes.Compact:
37
43
  return {
38
44
  value: newDensity,
39
45
  headerHeight: Math.floor(newHeaderHeight * COMPACT_DENSITY_FACTOR),
40
46
  rowHeight: Math.floor(newRowHeight * COMPACT_DENSITY_FACTOR),
47
+ headerGroupingMaxDepth: newMaxDepth,
41
48
  factor: COMPACT_DENSITY_FACTOR
42
49
  };
43
50
 
@@ -46,6 +53,7 @@ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight) => {
46
53
  value: newDensity,
47
54
  headerHeight: Math.floor(newHeaderHeight * COMFORTABLE_DENSITY_FACTOR),
48
55
  rowHeight: Math.floor(newRowHeight * COMFORTABLE_DENSITY_FACTOR),
56
+ headerGroupingMaxDepth: newMaxDepth,
49
57
  factor: COMFORTABLE_DENSITY_FACTOR
50
58
  };
51
59
 
@@ -54,24 +62,55 @@ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight) => {
54
62
  value: newDensity,
55
63
  headerHeight: newHeaderHeight,
56
64
  rowHeight: newRowHeight,
65
+ headerGroupingMaxDepth: newMaxDepth,
57
66
  factor: 1
58
67
  };
59
68
  }
60
69
  };
61
70
 
62
- const densityStateInitializer = (state, props) => (0, _extends2.default)({}, state, {
63
- density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight)
64
- });
71
+ const densityStateInitializer = (state, props) => {
72
+ // TODO: think about improving this initialization. Could it be done in the useColumn initializer?
73
+ // TODO: manage to remove ts-ignore
74
+ let maxDepth;
75
+
76
+ if (props.columnGroupingModel == null || Object.keys(props.columnGroupingModel).length === 0) {
77
+ maxDepth = 0;
78
+ } else {
79
+ const unwrappedGroupingColumnModel = (0, _useGridColumnGrouping.unwrapGroupingColumnModel)(props.columnGroupingModel);
80
+ const columnsState = state.columns;
81
+ const visibleColumns = columnsState.all.filter(field => columnsState.columnVisibilityModel[field] !== false);
82
+
83
+ if (visibleColumns.length === 0) {
84
+ maxDepth = 0;
85
+ } else {
86
+ maxDepth = Math.max(...visibleColumns.map(field => {
87
+ var _unwrappedGroupingCol, _unwrappedGroupingCol2;
88
+
89
+ return (_unwrappedGroupingCol = (_unwrappedGroupingCol2 = unwrappedGroupingColumnModel[field]) == null ? void 0 : _unwrappedGroupingCol2.length) != null ? _unwrappedGroupingCol : 0;
90
+ }));
91
+ }
92
+ }
93
+
94
+ return (0, _extends2.default)({}, state, {
95
+ density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight, maxDepth)
96
+ });
97
+ };
65
98
 
66
99
  exports.densityStateInitializer = densityStateInitializer;
67
100
 
68
101
  const useGridDensity = (apiRef, props) => {
102
+ const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _columns.gridVisibleColumnDefinitionsSelector);
103
+ const maxDepth = visibleColumns.length > 0 ? Math.max(...visibleColumns.map(column => {
104
+ var _column$groupPath$len, _column$groupPath;
105
+
106
+ return (_column$groupPath$len = (_column$groupPath = column.groupPath) == null ? void 0 : _column$groupPath.length) != null ? _column$groupPath$len : 0;
107
+ })) : 0;
69
108
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useDensity');
70
- const setDensity = React.useCallback((newDensity, newHeaderHeight = props.headerHeight, newRowHeight = props.rowHeight) => {
109
+ const setDensity = React.useCallback((newDensity, newHeaderHeight = props.headerHeight, newRowHeight = props.rowHeight, newMaxDepth = maxDepth) => {
71
110
  logger.debug(`Set grid density to ${newDensity}`);
72
111
  apiRef.current.setState(state => {
73
112
  const currentDensityState = (0, _densitySelector.gridDensitySelector)(state);
74
- const newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight);
113
+ const newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight, newMaxDepth);
75
114
 
76
115
  if ((0, _utils.isDeepEqual)(currentDensityState, newDensityState)) {
77
116
  return state;
@@ -82,10 +121,10 @@ const useGridDensity = (apiRef, props) => {
82
121
  });
83
122
  });
84
123
  apiRef.current.forceUpdate();
85
- }, [logger, apiRef, props.headerHeight, props.rowHeight]);
124
+ }, [logger, apiRef, props.headerHeight, props.rowHeight, maxDepth]);
86
125
  React.useEffect(() => {
87
- apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight);
88
- }, [apiRef, props.density, props.rowHeight, props.headerHeight]);
126
+ apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight, maxDepth);
127
+ }, [apiRef, props.density, props.rowHeight, props.headerHeight, maxDepth]);
89
128
  const densityApi = {
90
129
  setDensity
91
130
  };
@@ -64,7 +64,7 @@ function useGridDimensions(apiRef, props) {
64
64
  const rootDimensionsRef = React.useRef(null);
65
65
  const fullDimensionsRef = React.useRef(null);
66
66
  const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
67
- const headerHeight = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityHeaderHeightSelector);
67
+ const totalHeaderHeight = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityTotalHeaderHeightSelector);
68
68
  const updateGridDimensionsRef = React.useCallback(() => {
69
69
  var _apiRef$current$rootE;
70
70
 
@@ -109,7 +109,7 @@ function useGridDimensions(apiRef, props) {
109
109
  } else {
110
110
  viewportOuterSize = {
111
111
  width: rootDimensionsRef.current.width,
112
- height: rootDimensionsRef.current.height - headerHeight
112
+ height: rootDimensionsRef.current.height - totalHeaderHeight
113
113
  };
114
114
  const scrollInformation = hasScroll({
115
115
  content: {
@@ -143,7 +143,7 @@ function useGridDimensions(apiRef, props) {
143
143
  if (newFullDimensions.viewportInnerSize.width !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.width) || newFullDimensions.viewportInnerSize.height !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.height)) {
144
144
  apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
145
145
  }
146
- }, [apiRef, props.scrollbarSize, props.autoHeight, headerHeight, rowsMeta.currentPageTotalHeight]);
146
+ }, [apiRef, props.scrollbarSize, props.autoHeight, totalHeaderHeight, rowsMeta.currentPageTotalHeight]);
147
147
  const resize = React.useCallback(() => {
148
148
  updateGridDimensionsRef();
149
149
  apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
@@ -104,7 +104,7 @@ const useGridPrintExport = (apiRef, props) => {
104
104
  return;
105
105
  }
106
106
 
107
- const headerHeight = (0, _densitySelector.gridDensityHeaderHeightSelector)(apiRef);
107
+ const totalHeaderHeight = (0, _densitySelector.gridDensityTotalHeaderHeightSelector)(apiRef);
108
108
  const rowsMeta = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef.current.state);
109
109
  const gridRootElement = apiRef.current.rootElementRef.current;
110
110
  const gridClone = gridRootElement.cloneNode(true);
@@ -138,7 +138,7 @@ const useGridPrintExport = (apiRef, props) => {
138
138
  } // Expand container height to accommodate all rows
139
139
 
140
140
 
141
- gridClone.style.height = `${rowsMeta.currentPageTotalHeight + headerHeight + gridToolbarElementHeight + gridFooterElementHeight}px`; // Remove all loaded elements from the current host
141
+ gridClone.style.height = `${rowsMeta.currentPageTotalHeight + totalHeaderHeight + gridToolbarElementHeight + gridFooterElementHeight}px`; // Remove all loaded elements from the current host
142
142
 
143
143
  printDoc.body.innerHTML = '';
144
144
  printDoc.body.appendChild(gridClone);
@@ -88,76 +88,75 @@ exports.sanitizeFilterModel = sanitizeFilterModel;
88
88
  const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => (0, _extends2.default)({}, filteringState, {
89
89
  filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)
90
90
  });
91
- /**
92
- * Generates a method to easily check if a row is matching the current filter model.
93
- * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
94
- * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
95
- * @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.
96
- */
97
-
98
91
 
99
92
  exports.mergeStateWithFilterModel = mergeStateWithFilterModel;
100
93
 
101
- const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
102
- const {
103
- items
104
- } = filterModel;
105
-
106
- const getFilterCallbackFromItem = filterItem => {
107
- if (!filterItem.columnField || !filterItem.operatorValue) {
108
- return null;
109
- }
94
+ const getFilterCallbackFromItem = (filterItem, apiRef) => {
95
+ if (!filterItem.columnField || !filterItem.operatorValue) {
96
+ return null;
97
+ }
110
98
 
111
- const column = apiRef.current.getColumn(filterItem.columnField);
99
+ const column = apiRef.current.getColumn(filterItem.columnField);
112
100
 
113
- if (!column) {
114
- return null;
115
- }
101
+ if (!column) {
102
+ return null;
103
+ }
116
104
 
117
- let parsedValue;
105
+ let parsedValue;
118
106
 
119
- if (column.valueParser) {
120
- var _filterItem$value;
107
+ if (column.valueParser) {
108
+ var _filterItem$value;
121
109
 
122
- const parser = column.valueParser;
123
- parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(x => parser(x)) : parser(filterItem.value);
124
- } else {
125
- parsedValue = filterItem.value;
126
- }
110
+ const parser = column.valueParser;
111
+ parsedValue = Array.isArray(filterItem.value) ? (_filterItem$value = filterItem.value) == null ? void 0 : _filterItem$value.map(x => parser(x)) : parser(filterItem.value);
112
+ } else {
113
+ parsedValue = filterItem.value;
114
+ }
127
115
 
128
- const newFilterItem = (0, _extends2.default)({}, filterItem, {
129
- value: parsedValue
130
- });
131
- const filterOperators = column.filterOperators;
116
+ const newFilterItem = (0, _extends2.default)({}, filterItem, {
117
+ value: parsedValue
118
+ });
119
+ const filterOperators = column.filterOperators;
132
120
 
133
- if (!(filterOperators != null && filterOperators.length)) {
134
- throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
135
- }
121
+ if (!(filterOperators != null && filterOperators.length)) {
122
+ throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
123
+ }
136
124
 
137
- const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operatorValue);
125
+ const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operatorValue);
138
126
 
139
- if (!filterOperator) {
140
- throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operatorValue}'.`);
141
- }
127
+ if (!filterOperator) {
128
+ throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operatorValue}'.`);
129
+ }
142
130
 
143
- const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
131
+ const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
144
132
 
145
- if (typeof applyFilterOnRow !== 'function') {
146
- return null;
147
- }
133
+ if (typeof applyFilterOnRow !== 'function') {
134
+ return null;
135
+ }
148
136
 
149
- const fn = rowId => {
150
- const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
151
- return applyFilterOnRow(cellParams);
152
- };
137
+ const fn = rowId => {
138
+ const cellParams = apiRef.current.getCellParams(rowId, newFilterItem.columnField);
139
+ return applyFilterOnRow(cellParams);
140
+ };
153
141
 
154
- return {
155
- fn,
156
- item: newFilterItem
157
- };
142
+ return {
143
+ fn,
144
+ item: newFilterItem
158
145
  };
146
+ };
147
+ /**
148
+ * Generates a method to easily check if a row is matching the current filter model.
149
+ * @param {GridFilterModel} filterModel The model with which we want to filter the rows.
150
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
151
+ * @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.
152
+ */
159
153
 
160
- const appliers = items.map(getFilterCallbackFromItem).filter(callback => !!callback);
154
+
155
+ const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
156
+ const {
157
+ items
158
+ } = filterModel;
159
+ const appliers = items.map(item => getFilterCallbackFromItem(item, apiRef)).filter(callback => !!callback);
161
160
 
162
161
  if (appliers.length === 0) {
163
162
  return null;
@@ -249,9 +248,10 @@ const buildAggregatedFilterApplier = (filterModel, apiRef) => {
249
248
 
250
249
  exports.buildAggregatedFilterApplier = buildAggregatedFilterApplier;
251
250
 
252
- const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel) => {
251
+ const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel, apiRef) => {
253
252
  var _filterModel$quickFil, _filterModel$linkOper;
254
253
 
254
+ const cleanedFilterItems = filterModel.items.filter(item => getFilterCallbackFromItem(item, apiRef) !== null);
255
255
  const cleanedAllFilterItemResults = allFilterItemResults.filter(result => result != null);
256
256
  const cleanedAllQuickFilterResults = allQuickFilterResults.filter(result => result != null); // Defaultize operators
257
257
 
@@ -265,13 +265,13 @@ const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterMode
265
265
  };
266
266
 
267
267
  if (linkOperator === _models.GridLinkOperator.And) {
268
- const passesAllFilters = filterModel.items.every(filterItemPredicate);
268
+ const passesAllFilters = cleanedFilterItems.every(filterItemPredicate);
269
269
 
270
270
  if (!passesAllFilters) {
271
271
  return false;
272
272
  }
273
273
  } else {
274
- const passesSomeFilters = filterModel.items.some(filterItemPredicate);
274
+ const passesSomeFilters = cleanedFilterItems.some(filterItemPredicate);
275
275
 
276
276
  if (!passesSomeFilters) {
277
277
  return false;
@@ -304,7 +304,7 @@ const useGridFilter = (apiRef, props) => {
304
304
  passingFilterItems,
305
305
  passingQuickFilterValues
306
306
  } = params.isRowMatchingFilters(rowId);
307
- isRowPassing = (0, _gridFilterUtils.passFilterLogic)([passingFilterItems], [passingQuickFilterValues], params.filterModel);
307
+ isRowPassing = (0, _gridFilterUtils.passFilterLogic)([passingFilterItems], [passingQuickFilterValues], params.filterModel, apiRef);
308
308
  }
309
309
 
310
310
  filteredRowsLookup[rowId] = isRowPassing;
@@ -30,6 +30,19 @@ Object.keys(_columns).forEach(function (key) {
30
30
  });
31
31
  });
32
32
 
33
+ var _columnGrouping = require("./columnGrouping");
34
+
35
+ Object.keys(_columnGrouping).forEach(function (key) {
36
+ if (key === "default" || key === "__esModule") return;
37
+ if (key in exports && exports[key] === _columnGrouping[key]) return;
38
+ Object.defineProperty(exports, key, {
39
+ enumerable: true,
40
+ get: function () {
41
+ return _columnGrouping[key];
42
+ }
43
+ });
44
+ });
45
+
33
46
  var _density = require("./density");
34
47
 
35
48
  Object.keys(_density).forEach(function (key) {
@@ -121,7 +121,7 @@ function useGridParamsApi(apiRef) {
121
121
  formattedValue: value
122
122
  };
123
123
 
124
- if (colDef.valueFormatter) {
124
+ if (colDef && colDef.valueFormatter) {
125
125
  params.formattedValue = colDef.valueFormatter({
126
126
  id,
127
127
  field: params.field,