@mui/x-data-grid 6.0.0-alpha.2 → 6.0.0-alpha.4

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 (293) hide show
  1. package/CHANGELOG.md +493 -141
  2. package/DataGrid/DataGrid.js +14 -34
  3. package/DataGrid/useDataGridComponent.js +8 -14
  4. package/DataGrid/useDataGridProps.js +3 -3
  5. package/colDef/gridCheckboxSelectionColDef.js +1 -1
  6. package/colDef/gridNumericOperators.d.ts +1 -1
  7. package/colDef/gridSingleSelectOperators.d.ts +1 -1
  8. package/colDef/gridStringOperators.d.ts +1 -1
  9. package/components/GridFooter.js +1 -1
  10. package/components/GridRow.js +2 -2
  11. package/components/base/GridBody.js +2 -2
  12. package/components/cell/GridEditInputCell.js +3 -8
  13. package/components/cell/GridEditSingleSelectCell.js +6 -38
  14. package/components/columnHeaders/GridColumnGroupHeader.d.ts +2 -0
  15. package/components/columnHeaders/GridColumnGroupHeader.js +32 -5
  16. package/components/columnSelection/GridHeaderCheckbox.js +3 -3
  17. package/components/containers/GridRoot.js +4 -3
  18. package/components/panel/GridColumnsPanel.d.ts +2 -0
  19. package/components/panel/GridColumnsPanel.js +10 -4
  20. package/components/panel/filterPanel/GridFilterForm.d.ts +12 -0
  21. package/components/panel/filterPanel/GridFilterForm.js +29 -7
  22. package/components/panel/filterPanel/GridFilterPanel.d.ts +12 -0
  23. package/components/panel/filterPanel/GridFilterPanel.js +64 -19
  24. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +1 -1
  25. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +1 -1
  26. package/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.d.ts +1 -1
  27. package/hooks/core/useGridInitialization.d.ts +1 -1
  28. package/hooks/core/useGridStateInitialization.d.ts +1 -1
  29. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +10 -1
  30. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +6 -0
  31. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +34 -1
  32. package/hooks/features/columnGrouping/gridColumnGroupsUtils.d.ts +15 -0
  33. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +89 -0
  34. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -15
  35. package/hooks/features/columnGrouping/useGridColumnGrouping.js +66 -66
  36. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  37. package/hooks/features/columnHeaders/useGridColumnHeaders.js +60 -116
  38. package/hooks/features/density/densitySelector.d.ts +0 -2
  39. package/hooks/features/density/densitySelector.js +1 -3
  40. package/hooks/features/density/densityState.d.ts +0 -1
  41. package/hooks/features/density/useGridDensity.d.ts +1 -1
  42. package/hooks/features/density/useGridDensity.js +9 -45
  43. package/hooks/features/dimensions/useGridDimensions.js +3 -2
  44. package/hooks/features/{editRows/gridEditRowsSelector.d.ts → editing/gridEditingSelectors.d.ts} +0 -0
  45. package/hooks/features/{editRows/gridEditRowsSelector.js → editing/gridEditingSelectors.js} +0 -0
  46. package/hooks/features/editing/index.d.ts +1 -0
  47. package/hooks/features/editing/index.js +1 -0
  48. package/hooks/features/{editRows/useGridCellEditing.new.d.ts → editing/useGridCellEditing.d.ts} +0 -0
  49. package/hooks/features/{editRows/useGridCellEditing.new.js → editing/useGridCellEditing.js} +21 -6
  50. package/hooks/features/{editRows/useGridEditing.new.d.ts → editing/useGridEditing.d.ts} +0 -0
  51. package/hooks/features/{editRows/useGridEditing.new.js → editing/useGridEditing.js} +3 -3
  52. package/hooks/features/{editRows/useGridRowEditing.new.d.ts → editing/useGridRowEditing.d.ts} +0 -0
  53. package/hooks/features/{editRows/useGridRowEditing.new.js → editing/useGridRowEditing.js} +20 -6
  54. package/hooks/features/export/useGridPrintExport.js +2 -2
  55. package/hooks/features/focus/gridFocusState.d.ts +6 -0
  56. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -0
  57. package/hooks/features/focus/gridFocusStateSelector.js +6 -2
  58. package/hooks/features/focus/useGridFocus.js +69 -11
  59. package/hooks/features/index.d.ts +2 -2
  60. package/hooks/features/index.js +2 -2
  61. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +135 -1
  62. package/hooks/features/{selection/gridSelectionSelector.d.ts → rowSelection/gridRowSelectionSelector.d.ts} +1 -1
  63. package/hooks/features/rowSelection/gridRowSelectionSelector.js +9 -0
  64. package/hooks/features/rowSelection/index.d.ts +1 -0
  65. package/hooks/features/rowSelection/index.js +1 -0
  66. package/hooks/features/rowSelection/useGridRowSelection.d.ts +12 -0
  67. package/hooks/features/{selection/useGridSelection.js → rowSelection/useGridRowSelection.js} +37 -37
  68. package/hooks/features/{selection/useGridSelectionPreProcessors.d.ts → rowSelection/useGridRowSelectionPreProcessors.d.ts} +1 -1
  69. package/hooks/features/{selection/useGridSelectionPreProcessors.js → rowSelection/useGridRowSelectionPreProcessors.js} +1 -1
  70. package/hooks/features/rows/gridRowsInterfaces.d.ts +4 -0
  71. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  72. package/hooks/features/rows/gridRowsUtils.js +5 -2
  73. package/hooks/features/rows/useGridRows.js +23 -7
  74. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
  75. package/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  76. package/hooks/utils/useGridApi.d.ts +1 -1
  77. package/hooks/utils/useGridApiEventHandler.d.ts +2 -2
  78. package/hooks/utils/useGridApiRef.d.ts +1 -1
  79. package/hooks/utils/useGridInitializeState.d.ts +1 -1
  80. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  81. package/hooks/utils/useGridSelector.d.ts +1 -1
  82. package/hooks/utils/useGridState.d.ts +1 -1
  83. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  84. package/index.js +1 -1
  85. package/internals/index.d.ts +3 -5
  86. package/internals/index.js +3 -5
  87. package/legacy/DataGrid/DataGrid.js +14 -34
  88. package/legacy/DataGrid/useDataGridComponent.js +8 -14
  89. package/legacy/DataGrid/useDataGridProps.js +3 -3
  90. package/legacy/colDef/gridCheckboxSelectionColDef.js +1 -1
  91. package/legacy/components/GridFooter.js +1 -1
  92. package/legacy/components/GridRow.js +2 -2
  93. package/legacy/components/base/GridBody.js +2 -2
  94. package/legacy/components/cell/GridEditInputCell.js +3 -8
  95. package/legacy/components/cell/GridEditSingleSelectCell.js +6 -52
  96. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +46 -13
  97. package/legacy/components/columnSelection/GridHeaderCheckbox.js +3 -3
  98. package/legacy/components/containers/GridRoot.js +4 -3
  99. package/legacy/components/panel/GridColumnsPanel.js +10 -3
  100. package/legacy/components/panel/filterPanel/GridFilterForm.js +31 -7
  101. package/legacy/components/panel/filterPanel/GridFilterPanel.js +67 -18
  102. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +33 -1
  103. package/legacy/hooks/features/columnGrouping/gridColumnGroupsUtils.js +96 -0
  104. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +64 -64
  105. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +70 -122
  106. package/legacy/hooks/features/density/densitySelector.js +0 -6
  107. package/legacy/hooks/features/density/useGridDensity.js +6 -44
  108. package/legacy/hooks/features/dimensions/useGridDimensions.js +3 -2
  109. package/legacy/hooks/features/{editRows/gridEditRowsSelector.js → editing/gridEditingSelectors.js} +0 -0
  110. package/legacy/hooks/features/editing/index.js +1 -0
  111. package/legacy/hooks/features/{editRows/useGridCellEditing.new.js → editing/useGridCellEditing.js} +21 -6
  112. package/legacy/hooks/features/{editRows/useGridEditing.new.js → editing/useGridEditing.js} +3 -3
  113. package/legacy/hooks/features/{editRows/useGridRowEditing.new.js → editing/useGridRowEditing.js} +20 -6
  114. package/legacy/hooks/features/export/useGridPrintExport.js +2 -2
  115. package/legacy/hooks/features/focus/gridFocusStateSelector.js +8 -0
  116. package/legacy/hooks/features/focus/useGridFocus.js +72 -11
  117. package/legacy/hooks/features/index.js +2 -2
  118. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +129 -1
  119. package/legacy/hooks/features/rowSelection/gridRowSelectionSelector.js +19 -0
  120. package/legacy/hooks/features/rowSelection/index.js +1 -0
  121. package/legacy/hooks/features/{selection/useGridSelection.js → rowSelection/useGridRowSelection.js} +37 -37
  122. package/legacy/hooks/features/{selection/useGridSelectionPreProcessors.js → rowSelection/useGridRowSelectionPreProcessors.js} +1 -1
  123. package/legacy/hooks/features/rows/gridRowsUtils.js +5 -2
  124. package/legacy/hooks/features/rows/useGridRows.js +25 -7
  125. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  126. package/legacy/index.js +1 -1
  127. package/legacy/internals/index.js +3 -5
  128. package/legacy/locales/trTR.js +17 -17
  129. package/legacy/models/api/{gridSelectionApi.js → gridRowSelectionApi.js} +0 -0
  130. package/legacy/models/api/index.js +1 -1
  131. package/legacy/models/{gridSelectionModel.js → gridRowSelectionModel.js} +0 -0
  132. package/legacy/models/index.js +1 -1
  133. package/{models/api/gridSelectionApi.js → legacy/models/params/gridColumnGroupHeaderParams.js} +0 -0
  134. package/legacy/models/params/gridEditCellParams.js +0 -4
  135. package/legacy/models/params/index.js +1 -0
  136. package/locales/trTR.js +17 -17
  137. package/models/api/gridApiCommon.d.ts +3 -6
  138. package/models/api/gridApiCommunity.d.ts +1 -7
  139. package/models/api/gridEditingApi.d.ts +36 -121
  140. package/models/api/gridFocusApi.d.ts +13 -0
  141. package/models/api/{gridSelectionApi.d.ts → gridRowSelectionApi.d.ts} +2 -2
  142. package/models/{gridSelectionModel.js → api/gridRowSelectionApi.js} +0 -0
  143. package/models/api/index.d.ts +2 -2
  144. package/models/api/index.js +1 -1
  145. package/models/colDef/gridColDef.d.ts +0 -8
  146. package/models/events/gridEventLookup.d.ts +30 -19
  147. package/models/gridColumnGrouping.d.ts +1 -26
  148. package/models/gridRowSelectionModel.d.ts +3 -0
  149. package/{modern/models/api/gridSelectionApi.js → models/gridRowSelectionModel.js} +0 -0
  150. package/models/gridStateCommunity.d.ts +2 -2
  151. package/models/index.d.ts +1 -1
  152. package/models/index.js +1 -1
  153. package/models/params/gridColumnGroupHeaderParams.d.ts +30 -0
  154. package/{modern/models/gridSelectionModel.js → models/params/gridColumnGroupHeaderParams.js} +0 -0
  155. package/models/params/gridEditCellParams.d.ts +4 -17
  156. package/models/params/gridEditCellParams.js +0 -4
  157. package/models/params/gridRowParams.d.ts +4 -4
  158. package/models/params/index.d.ts +1 -0
  159. package/models/params/index.js +1 -0
  160. package/models/props/DataGridProps.d.ts +8 -32
  161. package/modern/DataGrid/DataGrid.js +14 -34
  162. package/modern/DataGrid/useDataGridComponent.js +8 -12
  163. package/modern/DataGrid/useDataGridProps.js +3 -3
  164. package/modern/colDef/gridCheckboxSelectionColDef.js +1 -1
  165. package/modern/components/GridFooter.js +1 -1
  166. package/modern/components/GridRow.js +2 -2
  167. package/modern/components/base/GridBody.js +2 -2
  168. package/modern/components/cell/GridEditInputCell.js +3 -4
  169. package/modern/components/cell/GridEditSingleSelectCell.js +6 -34
  170. package/modern/components/columnHeaders/GridColumnGroupHeader.js +32 -5
  171. package/modern/components/columnSelection/GridHeaderCheckbox.js +3 -3
  172. package/modern/components/containers/GridRoot.js +4 -3
  173. package/modern/components/panel/GridColumnsPanel.js +10 -4
  174. package/modern/components/panel/filterPanel/GridFilterForm.js +29 -7
  175. package/modern/components/panel/filterPanel/GridFilterPanel.js +62 -17
  176. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +14 -1
  177. package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +83 -0
  178. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +50 -62
  179. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +58 -98
  180. package/modern/hooks/features/density/densitySelector.js +1 -3
  181. package/modern/hooks/features/density/useGridDensity.js +9 -37
  182. package/modern/hooks/features/dimensions/useGridDimensions.js +3 -2
  183. package/modern/hooks/features/{editRows/gridEditRowsSelector.js → editing/gridEditingSelectors.js} +0 -0
  184. package/modern/hooks/features/editing/index.js +1 -0
  185. package/modern/hooks/features/{editRows/useGridCellEditing.new.js → editing/useGridCellEditing.js} +21 -6
  186. package/modern/hooks/features/{editRows/useGridEditing.new.js → editing/useGridEditing.js} +3 -3
  187. package/modern/hooks/features/{editRows/useGridRowEditing.new.js → editing/useGridRowEditing.js} +20 -6
  188. package/modern/hooks/features/export/useGridPrintExport.js +2 -2
  189. package/modern/hooks/features/focus/gridFocusStateSelector.js +6 -2
  190. package/modern/hooks/features/focus/useGridFocus.js +69 -11
  191. package/modern/hooks/features/index.js +2 -2
  192. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +135 -1
  193. package/modern/hooks/features/rowSelection/gridRowSelectionSelector.js +9 -0
  194. package/modern/hooks/features/rowSelection/index.js +1 -0
  195. package/modern/hooks/features/{selection/useGridSelection.js → rowSelection/useGridRowSelection.js} +37 -37
  196. package/modern/hooks/features/{selection/useGridSelectionPreProcessors.js → rowSelection/useGridRowSelectionPreProcessors.js} +1 -1
  197. package/modern/hooks/features/rows/gridRowsUtils.js +5 -2
  198. package/modern/hooks/features/rows/useGridRows.js +23 -7
  199. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  200. package/modern/index.js +1 -1
  201. package/modern/internals/index.js +3 -5
  202. package/modern/locales/trTR.js +17 -17
  203. package/modern/models/api/gridRowSelectionApi.js +1 -0
  204. package/modern/models/api/index.js +1 -1
  205. package/modern/models/gridRowSelectionModel.js +1 -0
  206. package/modern/models/index.js +1 -1
  207. package/modern/models/params/gridColumnGroupHeaderParams.js +1 -0
  208. package/modern/models/params/gridEditCellParams.js +0 -4
  209. package/modern/models/params/index.js +1 -0
  210. package/node/DataGrid/DataGrid.js +14 -34
  211. package/node/DataGrid/useDataGridComponent.js +9 -17
  212. package/node/DataGrid/useDataGridProps.js +3 -3
  213. package/node/colDef/gridCheckboxSelectionColDef.js +2 -2
  214. package/node/components/GridFooter.js +2 -2
  215. package/node/components/GridRow.js +2 -2
  216. package/node/components/base/GridBody.js +2 -2
  217. package/node/components/cell/GridEditInputCell.js +3 -9
  218. package/node/components/cell/GridEditSingleSelectCell.js +6 -38
  219. package/node/components/columnHeaders/GridColumnGroupHeader.js +32 -5
  220. package/node/components/columnSelection/GridHeaderCheckbox.js +3 -3
  221. package/node/components/containers/GridRoot.js +4 -2
  222. package/node/components/panel/GridColumnsPanel.js +10 -4
  223. package/node/components/panel/filterPanel/GridFilterForm.js +30 -7
  224. package/node/components/panel/filterPanel/GridFilterPanel.js +63 -19
  225. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +40 -3
  226. package/node/hooks/features/columnGrouping/gridColumnGroupsUtils.js +102 -0
  227. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +68 -71
  228. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +57 -113
  229. package/node/hooks/features/density/densitySelector.js +2 -6
  230. package/node/hooks/features/density/useGridDensity.js +9 -48
  231. package/node/hooks/features/dimensions/useGridDimensions.js +3 -1
  232. package/node/hooks/features/{editRows/gridEditRowsSelector.js → editing/gridEditingSelectors.js} +0 -0
  233. package/node/hooks/features/{editRows → editing}/index.js +4 -4
  234. package/node/hooks/features/{editRows/useGridCellEditing.new.js → editing/useGridCellEditing.js} +28 -13
  235. package/node/hooks/features/{editRows/useGridEditing.new.js → editing/useGridEditing.js} +4 -4
  236. package/node/hooks/features/{editRows/useGridRowEditing.new.js → editing/useGridRowEditing.js} +28 -14
  237. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  238. package/node/hooks/features/focus/gridFocusStateSelector.js +10 -4
  239. package/node/hooks/features/focus/useGridFocus.js +68 -10
  240. package/node/hooks/features/index.js +8 -8
  241. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +138 -1
  242. package/node/hooks/features/{selection/gridSelectionSelector.js → rowSelection/gridRowSelectionSelector.js} +6 -6
  243. package/node/hooks/features/rowSelection/index.js +18 -0
  244. package/node/hooks/features/{selection/useGridSelection.js → rowSelection/useGridRowSelection.js} +43 -43
  245. package/node/hooks/features/{selection/useGridSelectionPreProcessors.js → rowSelection/useGridRowSelectionPreProcessors.js} +3 -3
  246. package/node/hooks/features/rows/gridRowsUtils.js +5 -2
  247. package/node/hooks/features/rows/useGridRows.js +23 -7
  248. package/node/hooks/features/virtualization/useGridVirtualScroller.js +4 -4
  249. package/node/index.js +1 -1
  250. package/node/internals/index.js +23 -45
  251. package/node/locales/trTR.js +17 -17
  252. package/node/models/api/{gridSelectionApi.js → gridRowSelectionApi.js} +0 -0
  253. package/node/models/api/index.js +4 -4
  254. package/node/models/{gridSelectionModel.js → gridRowSelectionModel.js} +0 -0
  255. package/node/models/index.js +4 -4
  256. package/node/models/params/gridColumnGroupHeaderParams.js +5 -0
  257. package/node/models/params/gridEditCellParams.js +0 -3
  258. package/node/models/params/index.js +13 -0
  259. package/package.json +2 -2
  260. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +0 -4
  261. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +0 -35
  262. package/hooks/features/editRows/index.d.ts +0 -1
  263. package/hooks/features/editRows/index.js +0 -1
  264. package/hooks/features/editRows/useGridCellEditing.old.d.ts +0 -4
  265. package/hooks/features/editRows/useGridCellEditing.old.js +0 -359
  266. package/hooks/features/editRows/useGridEditing.old.d.ts +0 -11
  267. package/hooks/features/editRows/useGridEditing.old.js +0 -167
  268. package/hooks/features/editRows/useGridRowEditing.old.d.ts +0 -4
  269. package/hooks/features/editRows/useGridRowEditing.old.js +0 -334
  270. package/hooks/features/selection/gridSelectionSelector.js +0 -9
  271. package/hooks/features/selection/index.d.ts +0 -1
  272. package/hooks/features/selection/index.js +0 -1
  273. package/hooks/features/selection/useGridSelection.d.ts +0 -12
  274. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +0 -35
  275. package/legacy/hooks/features/editRows/index.js +0 -1
  276. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +0 -411
  277. package/legacy/hooks/features/editRows/useGridEditing.old.js +0 -184
  278. package/legacy/hooks/features/editRows/useGridRowEditing.old.js +0 -505
  279. package/legacy/hooks/features/selection/gridSelectionSelector.js +0 -19
  280. package/legacy/hooks/features/selection/index.js +0 -1
  281. package/models/gridSelectionModel.d.ts +0 -3
  282. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +0 -29
  283. package/modern/hooks/features/editRows/index.js +0 -1
  284. package/modern/hooks/features/editRows/useGridCellEditing.old.js +0 -355
  285. package/modern/hooks/features/editRows/useGridEditing.old.js +0 -163
  286. package/modern/hooks/features/editRows/useGridRowEditing.old.js +0 -326
  287. package/modern/hooks/features/selection/gridSelectionSelector.js +0 -9
  288. package/modern/hooks/features/selection/index.js +0 -1
  289. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +0 -55
  290. package/node/hooks/features/editRows/useGridCellEditing.old.js +0 -380
  291. package/node/hooks/features/editRows/useGridEditing.old.js +0 -193
  292. package/node/hooks/features/editRows/useGridRowEditing.old.js +0 -358
  293. package/node/hooks/features/selection/index.js +0 -18
@@ -3,51 +3,13 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
3
3
  const _excluded = ["groupId", "children"];
4
4
  import * as React from 'react';
5
5
  import { isLeaf } from '../../../models/gridColumnGrouping';
6
- import { gridColumnGroupsLookupSelector } from './gridColumnGroupsSelector';
7
- import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
6
+ import { gridColumnGroupsLookupSelector, gridColumnGroupsUnwrappedModelSelector } from './gridColumnGroupsSelector';
8
7
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
9
- export function hasGroupPath(lookupElement) {
10
- return lookupElement.groupPath !== undefined;
11
- }
12
-
13
- // This is the recurrence function that help writing `unwrapGroupingColumnModel()`
14
- const recurrentUnwrapGroupingColumnModel = (columnGroupNode, parents, unwrappedGroupingModelToComplet) => {
15
- if (isLeaf(columnGroupNode)) {
16
- if (unwrappedGroupingModelToComplet[columnGroupNode.field] !== undefined) {
17
- throw new Error([`MUI: columnGroupingModel contains duplicated field`, `column field ${columnGroupNode.field} occurrs two times in the grouping model:`, `- ${unwrappedGroupingModelToComplet[columnGroupNode.field].join(' > ')}`, `- ${parents.join(' > ')}`].join('\n'));
18
- }
19
-
20
- unwrappedGroupingModelToComplet[columnGroupNode.field] = parents;
21
- return;
22
- }
23
-
24
- const {
25
- groupId,
26
- children
27
- } = columnGroupNode;
28
- children.forEach(child => {
29
- recurrentUnwrapGroupingColumnModel(child, [...parents, groupId], unwrappedGroupingModelToComplet);
30
- });
31
- };
32
- /**
33
- * This is a function that provide for each column the array of its parents.
34
- * Parents are ordered from the root to the leaf.
35
- * @param columnGroupingModel The model such as provided in DataGrid props
36
- * @returns An object `{[field]: groupIds}` where `groupIds` is the parents of the column `field`
37
- */
38
-
39
-
40
- export const unwrapGroupingColumnModel = columnGroupingModel => {
41
- if (!columnGroupingModel) {
42
- return {};
43
- }
44
-
45
- const unwrappedSubTree = {};
46
- columnGroupingModel.forEach(columnGroupNode => {
47
- recurrentUnwrapGroupingColumnModel(columnGroupNode, [], unwrappedSubTree);
48
- });
49
- return unwrappedSubTree;
50
- };
8
+ import { getColumnGroupsHeaderStructure, unwrapGroupingColumnModel } from './gridColumnGroupsUtils';
9
+ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
10
+ import { gridColumnFieldsSelector, // GridColumnsState,
11
+ gridVisibleColumnFieldsSelector } from '../columns';
12
+ import { useGridSelector } from '../../utils/useGridSelector';
51
13
 
52
14
  const createGroupLookup = columnGroupingModel => {
53
15
  let groupLookup = {};
@@ -87,14 +49,29 @@ const createGroupLookup = columnGroupingModel => {
87
49
  return _extends({}, groupLookup);
88
50
  };
89
51
 
90
- export const columnGroupsStateInitializer = (state, props) => {
91
- var _props$columnGrouping;
52
+ export const columnGroupsStateInitializer = (state, props, apiRef) => {
53
+ var _props$experimentalFe, _props$columnGrouping, _props$columnGrouping2;
54
+
55
+ if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
56
+ return state;
57
+ }
92
58
 
59
+ const columnFields = gridColumnFieldsSelector(apiRef);
60
+ const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
93
61
  const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
62
+ const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
63
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel);
64
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
65
+ var _unwrappedGroupingMod, _unwrappedGroupingMod2;
66
+
67
+ return (_unwrappedGroupingMod = (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod2.length) != null ? _unwrappedGroupingMod : 0;
68
+ }));
94
69
  return _extends({}, state, {
95
70
  columnGrouping: {
96
71
  lookup: groupLookup,
97
- groupCollapsedModel: {}
72
+ unwrappedGroupingModel,
73
+ headerStructure: columnGroupsHeaderStructure,
74
+ maxDepth
98
75
  }
99
76
  });
100
77
  };
@@ -104,16 +81,16 @@ export const columnGroupsStateInitializer = (state, props) => {
104
81
  */
105
82
 
106
83
  export const useGridColumnGrouping = (apiRef, props) => {
107
- var _props$experimentalFe2;
84
+ var _props$experimentalFe3;
108
85
 
109
86
  /**
110
87
  * API METHODS
111
88
  */
112
89
  const getColumnGroupPath = React.useCallback(field => {
113
- var _columnLookup$field$g, _columnLookup$field;
90
+ var _unwrappedGroupingMod3;
114
91
 
115
- const columnLookup = gridColumnLookupSelector(apiRef);
116
- return (_columnLookup$field$g = (_columnLookup$field = columnLookup[field]) == null ? void 0 : _columnLookup$field.groupPath) != null ? _columnLookup$field$g : [];
92
+ const unwrappedGroupingModel = gridColumnGroupsUnwrappedModelSelector(apiRef);
93
+ return (_unwrappedGroupingMod3 = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod3 : [];
117
94
  }, [apiRef]);
118
95
  const getAllGroupDetails = React.useCallback(() => {
119
96
  const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
@@ -124,30 +101,53 @@ export const useGridColumnGrouping = (apiRef, props) => {
124
101
  unstable_getAllGroupDetails: getAllGroupDetails
125
102
  };
126
103
  useGridApiMethod(apiRef, columnGroupingApi, 'GridColumnGroupingApi');
104
+ const handleColumnReorderChange = React.useCallback(() => {
105
+ var _props$columnGrouping3;
106
+
107
+ const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping3 = props.columnGroupingModel) != null ? _props$columnGrouping3 : []);
108
+ apiRef.current.setState(state => {
109
+ var _state$columns$all, _state$columns;
110
+
111
+ const orderedFields = (_state$columns$all = (_state$columns = state.columns) == null ? void 0 : _state$columns.all) != null ? _state$columns$all : [];
112
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel);
113
+ return _extends({}, state, {
114
+ columnGrouping: _extends({}, state.columnGrouping, {
115
+ headerStructure: columnGroupsHeaderStructure
116
+ })
117
+ });
118
+ });
119
+ }, [apiRef, props.columnGroupingModel]);
120
+ useGridApiEventHandler(apiRef, 'columnOrderChange', handleColumnReorderChange);
121
+ const columnFields = useGridSelector(apiRef, gridColumnFieldsSelector);
122
+ const visibleColumnFields = useGridSelector(apiRef, gridVisibleColumnFieldsSelector);
127
123
  /**
128
124
  * EFFECTS
129
125
  */
130
- // The effect does not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`
131
- // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
132
126
 
133
- const isFirstRender = React.useRef(true);
134
127
  React.useEffect(() => {
135
- var _props$experimentalFe, _props$columnGrouping2;
128
+ var _props$experimentalFe2, _props$columnGrouping4, _props$columnGrouping5;
136
129
 
137
- if (isFirstRender.current) {
138
- isFirstRender.current = false;
130
+ if (!((_props$experimentalFe2 = props.experimentalFeatures) != null && _props$experimentalFe2.columnGrouping)) {
139
131
  return;
140
132
  }
141
133
 
142
- if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
143
- return;
144
- }
134
+ const groupLookup = createGroupLookup((_props$columnGrouping4 = props.columnGroupingModel) != null ? _props$columnGrouping4 : []);
135
+ const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping5 = props.columnGroupingModel) != null ? _props$columnGrouping5 : []);
136
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel);
137
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
138
+ var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
145
139
 
146
- const groupLookup = createGroupLookup((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
147
- apiRef.current.setState(state => _extends({}, state, {
148
- columnGrouping: _extends({}, state.columnGrouping, {
149
- lookup: groupLookup
150
- })
140
+ return (_unwrappedGroupingMod4 = (_unwrappedGroupingMod5 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod5.length) != null ? _unwrappedGroupingMod4 : 0;
151
141
  }));
152
- }, [apiRef, props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
142
+ apiRef.current.setState(state => {
143
+ return _extends({}, state, {
144
+ columnGrouping: {
145
+ lookup: groupLookup,
146
+ unwrappedGroupingModel,
147
+ headerStructure: columnGroupsHeaderStructure,
148
+ maxDepth
149
+ }
150
+ });
151
+ });
152
+ }, [apiRef, columnFields, visibleColumnFields, props.columnGroupingModel, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
153
153
  };
@@ -22,7 +22,7 @@ export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) =>
22
22
  };
23
23
  };
24
24
  getInnerProps: () => {
25
- ref: React.Ref<HTMLDivElement>;
25
+ ref: ((instance: HTMLDivElement | null) => void) | null;
26
26
  role: string;
27
27
  };
28
28
  };
@@ -6,9 +6,9 @@ import { styled } from '@mui/material/styles';
6
6
  import { defaultMemoize } from 'reselect';
7
7
  import { useGridApiContext } from '../../utils/useGridApiContext';
8
8
  import { useGridSelector } from '../../utils/useGridSelector';
9
- import { gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';
10
- import { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector } from '../focus/gridFocusStateSelector';
11
- import { gridDensityHeaderHeightSelector, gridDensityHeaderGroupingMaxDepthSelector, gridDensityTotalHeaderHeightSelector } from '../density/densitySelector';
9
+ import { gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector, gridColumnVisibilityModelSelector } from '../columns/gridColumnsSelector';
10
+ import { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector, unstable_gridFocusColumnGroupHeaderSelector, unstable_gridTabIndexColumnGroupHeaderSelector } from '../focus/gridFocusStateSelector';
11
+ import { gridDensityHeaderHeightSelector } from '../density/densitySelector';
12
12
  import { gridFilterActiveItemsLookupSelector } from '../filter/gridFilterSelector';
13
13
  import { gridSortColumnLookupSelector } from '../sorting/gridSortingSelector';
14
14
  import { gridColumnMenuSelector } from '../columnMenu/columnMenuSelector';
@@ -19,10 +19,8 @@ import { getFirstColumnIndexToRender } from '../columns/gridColumnsUtils';
19
19
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
20
20
  import { getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
21
21
  import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
22
- import { isDeepEqual } from '../../../utils/utils'; // TODO: add the possibility to switch this value if needed for customization
23
-
22
+ import { gridTotalHeaderHeightSelector, gridColumnGroupsHeaderMaxDepthSelector, gridColumnGroupsHeaderStructureSelector } from '../columnGrouping/gridColumnGroupsSelector';
24
23
  import { jsx as _jsx } from "react/jsx-runtime";
25
- const MERGE_EMPTY_CELLS = true;
26
24
  const GridColumnHeaderRow = styled('div', {
27
25
  name: 'MuiDataGrid',
28
26
  slot: 'ColumnHeaderRow',
@@ -45,15 +43,19 @@ export const useGridColumnHeaders = props => {
45
43
  const apiRef = useGridApiContext();
46
44
  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
47
45
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
48
- const tabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
46
+ const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
49
47
  const cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);
48
+ const columnGroupHeaderTabIndexState = useGridSelector(apiRef, unstable_gridTabIndexColumnGroupHeaderSelector);
50
49
  const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
50
+ const columnGroupHeaderFocus = useGridSelector(apiRef, unstable_gridFocusColumnGroupHeaderSelector);
51
51
  const headerHeight = useGridSelector(apiRef, gridDensityHeaderHeightSelector);
52
- const headerGroupingMaxDepth = useGridSelector(apiRef, gridDensityHeaderGroupingMaxDepthSelector);
53
- const totalHeaderHeight = useGridSelector(apiRef, gridDensityTotalHeaderHeightSelector);
52
+ const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);
53
+ const totalHeaderHeight = useGridSelector(apiRef, gridTotalHeaderHeightSelector);
54
54
  const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
55
55
  const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
56
56
  const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
57
+ const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
58
+ const columnGroupsHeaderStructure = useGridSelector(apiRef, gridColumnGroupsHeaderStructureSelector);
57
59
  const rootProps = useGridRootProps();
58
60
  const innerRef = React.useRef(null);
59
61
  const handleInnerRef = useForkRef(innerRefProp, innerRef);
@@ -203,8 +205,8 @@ export const useGridColumnHeaders = props => {
203
205
  const column = renderedColumns[i];
204
206
  const columnIndex = firstColumnToRender + i;
205
207
  const isFirstColumn = columnIndex === 0;
206
- const hasTabbableElement = !(tabIndexState === null && cellTabIndexState === null);
207
- const tabIndex = tabIndexState !== null && tabIndexState.field === column.field || isFirstColumn && !hasTabbableElement ? 0 : -1;
208
+ const hasTabbableElement = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && cellTabIndexState === null);
209
+ const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === column.field || isFirstColumn && !hasTabbableElement ? 0 : -1;
208
210
  const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === column.field;
209
211
  const open = columnMenuState.open && columnMenuState.field === column.field;
210
212
  columns.push( /*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[column.field], {
@@ -229,8 +231,6 @@ export const useGridColumnHeaders = props => {
229
231
  });
230
232
  };
231
233
 
232
- const getParents = (path = [], depth) => path.slice(0, depth + 1);
233
-
234
234
  const getColumnGroupHeaders = params => {
235
235
  if (headerGroupingMaxDepth === 0) {
236
236
  return null;
@@ -243,115 +243,55 @@ export const useGridColumnHeaders = props => {
243
243
  }
244
244
 
245
245
  const {
246
- renderedColumns,
247
246
  firstColumnToRender,
248
- lastColumnToRender,
249
- maxLastColumn
247
+ lastColumnToRender
250
248
  } = columnsToRender;
251
249
  const columns = [];
252
250
  const headerToRender = [];
253
251
 
254
252
  for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
255
- var _visibleColumns$first, _visibleColumns$first2, _visibleColumns$first3;
256
-
257
- // 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
258
- const initialHeader = [];
259
- let leftOverflow = 0;
260
- let columnIndex = firstColumnToRender - 1;
261
- 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
262
- // When two empty grouping cell are next to each other, we merge them if the belong to the same group.
263
-
264
- const firstColumnToRenderGroupParents = getParents((_visibleColumns$first3 = visibleColumns[firstColumnToRender]) == null ? void 0 : _visibleColumns$first3.groupPath, depth);
265
-
266
- while (firstColumnToRenderGroup !== null && columnIndex >= minColumnIndex && (_visibleColumns$colum = visibleColumns[columnIndex]) != null && _visibleColumns$colum.groupPath && isDeepEqual(getParents((_visibleColumns$colum2 = visibleColumns[columnIndex]) == null ? void 0 : _visibleColumns$colum2.groupPath, depth), firstColumnToRenderGroupParents)) {
267
- var _visibleColumns$colum, _visibleColumns$colum2, _column$computedWidth;
268
-
269
- const column = visibleColumns[columnIndex];
270
- leftOverflow += (_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0;
271
-
272
- if (initialHeader.length === 0) {
273
- var _column$computedWidth2;
274
-
275
- initialHeader.push({
276
- width: (_column$computedWidth2 = column.computedWidth) != null ? _column$computedWidth2 : 0,
277
- fields: [column.field],
278
- groupId: firstColumnToRenderGroup,
279
- groupParents: firstColumnToRenderGroupParents,
280
- colIndex: columnIndex
281
- });
282
- } else {
283
- var _column$computedWidth3;
284
-
285
- initialHeader[0].width += (_column$computedWidth3 = column.computedWidth) != null ? _column$computedWidth3 : 0;
286
- initialHeader[0].fields.push(column.field);
287
- initialHeader[0].colIndex = columnIndex;
288
- }
289
-
290
- columnIndex -= 1;
291
- }
292
-
293
- const depthInfo = renderedColumns.reduce((aggregated, column, i) => {
294
- var _column$computedWidth7;
295
-
296
- const lastItem = aggregated[aggregated.length - 1];
297
-
298
- if (column.groupPath && column.groupPath.length > depth) {
299
- var _column$computedWidth5;
300
-
301
- if (lastItem && lastItem.groupId === column.groupPath[depth]) {
302
- var _column$computedWidth4;
303
-
304
- // Merge with the previous columns
305
- return [...aggregated.slice(0, aggregated.length - 1), _extends({}, lastItem, {
306
- width: lastItem.width + ((_column$computedWidth4 = column.computedWidth) != null ? _column$computedWidth4 : 0),
307
- fields: [...lastItem.fields, column.field]
308
- })];
309
- } // Create a new grouping
310
-
311
-
312
- return [...aggregated, {
313
- groupId: column.groupPath[depth],
314
- groupParents: getParents(column.groupPath, depth),
315
- width: (_column$computedWidth5 = column.computedWidth) != null ? _column$computedWidth5 : 0,
316
- fields: [column.field],
317
- colIndex: firstColumnToRender + i
318
- }];
319
- }
320
-
321
- if (MERGE_EMPTY_CELLS && lastItem && lastItem.groupId === null && isDeepEqual(getParents(column.groupPath, depth), lastItem.groupParents)) {
322
- var _column$computedWidth6;
323
-
324
- // We merge with previous column
325
- return [...aggregated.slice(0, aggregated.length - 1), _extends({}, lastItem, {
326
- width: lastItem.width + ((_column$computedWidth6 = column.computedWidth) != null ? _column$computedWidth6 : 0),
327
- fields: [...lastItem.fields, column.field]
328
- })];
329
- } // We create new empty cell
330
-
331
-
332
- return [...aggregated, {
333
- groupId: null,
334
- groupParents: getParents(column.groupPath, depth),
335
- width: (_column$computedWidth7 = column.computedWidth) != null ? _column$computedWidth7 : 0,
336
- fields: [column.field],
337
- colIndex: firstColumnToRender + i
338
- }];
339
- }, initialHeader);
340
- columnIndex = lastColumnToRender;
341
- const lastColumnToRenderGroup = depthInfo[depthInfo.length - 1].groupId;
342
-
343
- 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) {
344
- var _visibleColumns$colum3, _visibleColumns$colum4, _visibleColumns$colum5, _column$computedWidth8;
345
-
346
- const column = visibleColumns[columnIndex];
347
- depthInfo[depthInfo.length - 1].width += (_column$computedWidth8 = column.computedWidth) != null ? _column$computedWidth8 : 0;
348
- depthInfo[depthInfo.length - 1].fields.push(column.field);
349
- columnIndex += 1;
350
- }
351
-
253
+ var _apiRef$current$unsta, _apiRef$current$unsta2;
254
+
255
+ const rowStructure = columnGroupsHeaderStructure[depth];
256
+ const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
257
+ const firstGroupToRender = (_apiRef$current$unsta = apiRef.current.unstable_getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$unsta : null;
258
+ const firstGroupIndex = rowStructure.findIndex(({
259
+ groupId,
260
+ columnFields
261
+ }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
262
+ const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
263
+ const lastGroupToRender = (_apiRef$current$unsta2 = apiRef.current.unstable_getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$unsta2 : null;
264
+ const lastGroupIndex = rowStructure.findIndex(({
265
+ groupId,
266
+ columnFields
267
+ }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
268
+ const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
269
+ return _extends({}, groupStructure, {
270
+ columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
271
+ });
272
+ }).filter(groupStructure => groupStructure.columnFields.length > 0);
273
+ const leftOverflow = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
274
+ let columnIndex = firstColumnToRender;
275
+ const elements = visibleColumnGroupHeader.map(({
276
+ groupId,
277
+ columnFields
278
+ }) => {
279
+ const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
280
+ const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
281
+ const headerInfo = {
282
+ groupId,
283
+ width: columnFields.map(field => apiRef.current.getColumn(field).computedWidth).reduce((acc, val) => acc + val, 0),
284
+ fields: columnFields,
285
+ colIndex: columnIndex,
286
+ hasFocus,
287
+ tabIndex
288
+ };
289
+ columnIndex += columnFields.length;
290
+ return headerInfo;
291
+ });
352
292
  headerToRender.push({
353
293
  leftOverflow,
354
- elements: [...depthInfo]
294
+ elements
355
295
  });
356
296
  }
357
297
 
@@ -367,7 +307,9 @@ export const useGridColumnHeaders = props => {
367
307
  groupId,
368
308
  width,
369
309
  fields,
370
- colIndex
310
+ colIndex,
311
+ hasFocus,
312
+ tabIndex
371
313
  }, groupIndex) => {
372
314
  return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
373
315
  groupId: groupId,
@@ -378,7 +320,9 @@ export const useGridColumnHeaders = props => {
378
320
  isLastColumn: colIndex === visibleColumns.length - fields.length,
379
321
  extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
380
322
  maxDepth: headerToRender.length,
381
- height: headerHeight
323
+ height: headerHeight,
324
+ hasFocus: hasFocus,
325
+ tabIndex: tabIndex
382
326
  }, groupIndex);
383
327
  })
384
328
  }, depthIndex));
@@ -3,6 +3,4 @@ export declare const gridDensitySelector: (state: GridStateCommunity) => import(
3
3
  export declare const gridDensityValueSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridDensity>;
4
4
  export declare const gridDensityRowHeightSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
5
5
  export declare const gridDensityHeaderHeightSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
6
- export declare const gridDensityHeaderGroupingMaxDepthSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
7
6
  export declare const gridDensityFactorSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
8
- export declare const gridDensityTotalHeaderHeightSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
@@ -3,6 +3,4 @@ export const gridDensitySelector = state => state.density;
3
3
  export const gridDensityValueSelector = createSelector(gridDensitySelector, density => density.value);
4
4
  export const gridDensityRowHeightSelector = createSelector(gridDensitySelector, density => density.rowHeight);
5
5
  export const gridDensityHeaderHeightSelector = createSelector(gridDensitySelector, density => density.headerHeight);
6
- export const gridDensityHeaderGroupingMaxDepthSelector = createSelector(gridDensitySelector, density => density.headerGroupingMaxDepth);
7
- export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => density.factor);
8
- export const gridDensityTotalHeaderHeightSelector = createSelector(gridDensitySelector, density => density.headerHeight * (1 + density.headerGroupingMaxDepth));
6
+ export const gridDensityFactorSelector = createSelector(gridDensitySelector, density => density.factor);
@@ -3,6 +3,5 @@ export interface GridDensityState {
3
3
  value: GridDensity;
4
4
  rowHeight: number;
5
5
  headerHeight: number;
6
- headerGroupingMaxDepth: number;
7
6
  factor: number;
8
7
  }
@@ -4,5 +4,5 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
4
  import { GridStateInitializer } from '../../utils/useGridInitializeState';
5
5
  export declare const COMPACT_DENSITY_FACTOR = 0.7;
6
6
  export declare const COMFORTABLE_DENSITY_FACTOR = 1.3;
7
- export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'density' | 'headerHeight' | 'rowHeight' | 'columnGroupingModel'>>;
7
+ export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'density' | 'headerHeight' | 'rowHeight'>>;
8
8
  export declare const useGridDensity: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'headerHeight' | 'rowHeight' | 'density'>) => void;
@@ -5,20 +5,16 @@ import { useGridLogger } from '../../utils/useGridLogger';
5
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
6
  import { gridDensitySelector } from './densitySelector';
7
7
  import { isDeepEqual } from '../../../utils/utils';
8
- import { useGridSelector } from '../../utils/useGridSelector';
9
- import { gridVisibleColumnDefinitionsSelector } from '../columns';
10
- import { unwrapGroupingColumnModel } from '../columnGrouping/useGridColumnGrouping';
11
8
  export const COMPACT_DENSITY_FACTOR = 0.7;
12
9
  export const COMFORTABLE_DENSITY_FACTOR = 1.3; // TODO v6: revise keeping headerHeight and rowHeight in state
13
10
 
14
- const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight, newMaxDepth) => {
11
+ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight) => {
15
12
  switch (newDensity) {
16
13
  case GridDensityTypes.Compact:
17
14
  return {
18
15
  value: newDensity,
19
16
  headerHeight: Math.floor(newHeaderHeight * COMPACT_DENSITY_FACTOR),
20
17
  rowHeight: Math.floor(newRowHeight * COMPACT_DENSITY_FACTOR),
21
- headerGroupingMaxDepth: newMaxDepth,
22
18
  factor: COMPACT_DENSITY_FACTOR
23
19
  };
24
20
 
@@ -27,7 +23,6 @@ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight, newMa
27
23
  value: newDensity,
28
24
  headerHeight: Math.floor(newHeaderHeight * COMFORTABLE_DENSITY_FACTOR),
29
25
  rowHeight: Math.floor(newRowHeight * COMFORTABLE_DENSITY_FACTOR),
30
- headerGroupingMaxDepth: newMaxDepth,
31
26
  factor: COMFORTABLE_DENSITY_FACTOR
32
27
  };
33
28
 
@@ -36,52 +31,21 @@ const getUpdatedDensityState = (newDensity, newHeaderHeight, newRowHeight, newMa
36
31
  value: newDensity,
37
32
  headerHeight: newHeaderHeight,
38
33
  rowHeight: newRowHeight,
39
- headerGroupingMaxDepth: newMaxDepth,
40
34
  factor: 1
41
35
  };
42
36
  }
43
37
  };
44
38
 
45
- export const densityStateInitializer = (state, props) => {
46
- // TODO: think about improving this initialization. Could it be done in the useColumn initializer?
47
- // TODO: manage to remove ts-ignore
48
- let maxDepth;
49
-
50
- if (props.columnGroupingModel == null || Object.keys(props.columnGroupingModel).length === 0) {
51
- maxDepth = 0;
52
- } else {
53
- const unwrappedGroupingColumnModel = unwrapGroupingColumnModel(props.columnGroupingModel);
54
- const columnsState = state.columns;
55
- const visibleColumns = columnsState.all.filter(field => columnsState.columnVisibilityModel[field] !== false);
56
-
57
- if (visibleColumns.length === 0) {
58
- maxDepth = 0;
59
- } else {
60
- maxDepth = Math.max(...visibleColumns.map(field => {
61
- var _unwrappedGroupingCol, _unwrappedGroupingCol2;
62
-
63
- return (_unwrappedGroupingCol = (_unwrappedGroupingCol2 = unwrappedGroupingColumnModel[field]) == null ? void 0 : _unwrappedGroupingCol2.length) != null ? _unwrappedGroupingCol : 0;
64
- }));
65
- }
66
- }
67
-
68
- return _extends({}, state, {
69
- density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight, maxDepth)
70
- });
71
- };
39
+ export const densityStateInitializer = (state, props) => _extends({}, state, {
40
+ density: getUpdatedDensityState(props.density, props.headerHeight, props.rowHeight)
41
+ });
72
42
  export const useGridDensity = (apiRef, props) => {
73
- const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
74
- const maxDepth = visibleColumns.length > 0 ? Math.max(...visibleColumns.map(column => {
75
- var _column$groupPath$len, _column$groupPath;
76
-
77
- return (_column$groupPath$len = (_column$groupPath = column.groupPath) == null ? void 0 : _column$groupPath.length) != null ? _column$groupPath$len : 0;
78
- })) : 0;
79
43
  const logger = useGridLogger(apiRef, 'useDensity');
80
- const setDensity = React.useCallback((newDensity, newHeaderHeight = props.headerHeight, newRowHeight = props.rowHeight, newMaxDepth = maxDepth) => {
44
+ const setDensity = React.useCallback((newDensity, newHeaderHeight = props.headerHeight, newRowHeight = props.rowHeight) => {
81
45
  logger.debug(`Set grid density to ${newDensity}`);
82
46
  apiRef.current.setState(state => {
83
47
  const currentDensityState = gridDensitySelector(state);
84
- const newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight, newMaxDepth);
48
+ const newDensityState = getUpdatedDensityState(newDensity, newHeaderHeight, newRowHeight);
85
49
 
86
50
  if (isDeepEqual(currentDensityState, newDensityState)) {
87
51
  return state;
@@ -92,10 +56,10 @@ export const useGridDensity = (apiRef, props) => {
92
56
  });
93
57
  });
94
58
  apiRef.current.forceUpdate();
95
- }, [logger, apiRef, props.headerHeight, props.rowHeight, maxDepth]);
59
+ }, [logger, apiRef, props.headerHeight, props.rowHeight]);
96
60
  React.useEffect(() => {
97
- apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight, maxDepth);
98
- }, [apiRef, props.density, props.rowHeight, props.headerHeight, maxDepth]);
61
+ apiRef.current.setDensity(props.density, props.headerHeight, props.rowHeight);
62
+ }, [apiRef, props.density, props.rowHeight, props.headerHeight]);
99
63
  const densityApi = {
100
64
  setDensity
101
65
  };
@@ -4,11 +4,12 @@ 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 { gridDensityTotalHeaderHeightSelector, gridDensityRowHeightSelector } from '../density';
7
+ import { gridDensityRowHeightSelector } from '../density';
8
8
  import { useGridSelector } from '../../utils';
9
9
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
10
10
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
11
11
  import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
12
+ import { gridTotalHeaderHeightSelector } from '../columnGrouping/gridColumnGroupsSelector';
12
13
  const isTestEnvironment = process.env.NODE_ENV === 'test';
13
14
 
14
15
  const hasScroll = ({
@@ -42,7 +43,7 @@ export function useGridDimensions(apiRef, props) {
42
43
  const rootDimensionsRef = React.useRef(null);
43
44
  const fullDimensionsRef = React.useRef(null);
44
45
  const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
45
- const totalHeaderHeight = useGridSelector(apiRef, gridDensityTotalHeaderHeightSelector);
46
+ const totalHeaderHeight = useGridSelector(apiRef, gridTotalHeaderHeightSelector);
46
47
  const updateGridDimensionsRef = React.useCallback(() => {
47
48
  var _apiRef$current$rootE;
48
49
 
@@ -0,0 +1 @@
1
+ export * from './gridEditingSelectors';
@@ -0,0 +1 @@
1
+ export * from './gridEditingSelectors';