@mui/x-data-grid 7.0.0-beta.6 → 7.0.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 (329) hide show
  1. package/CHANGELOG.md +311 -12
  2. package/DataGrid/DataGrid.js +57 -17
  3. package/DataGrid/useDataGridComponent.js +3 -0
  4. package/DataGrid/useDataGridProps.js +6 -7
  5. package/README.md +1 -1
  6. package/components/GridColumnHeaders.d.ts +1 -2
  7. package/components/GridColumnHeaders.js +6 -17
  8. package/components/GridFooter.js +2 -3
  9. package/components/GridHeader.js +1 -2
  10. package/components/GridHeaders.js +1 -4
  11. package/components/GridPagination.d.ts +6 -5
  12. package/components/GridPagination.js +14 -11
  13. package/components/GridRow.d.ts +1 -1
  14. package/components/GridRow.js +17 -36
  15. package/components/GridScrollArea.d.ts +10 -0
  16. package/components/GridScrollArea.js +150 -0
  17. package/components/base/GridFooterPlaceholder.js +1 -2
  18. package/components/base/GridOverlays.js +3 -6
  19. package/components/cell/GridActionsCell.js +4 -6
  20. package/components/cell/GridActionsCellItem.d.ts +8 -25
  21. package/components/cell/GridActionsCellItem.js +8 -5
  22. package/components/cell/GridBooleanCell.d.ts +1 -0
  23. package/components/cell/GridBooleanCell.js +3 -2
  24. package/components/cell/GridCell.d.ts +7 -0
  25. package/components/cell/GridCell.js +18 -11
  26. package/components/cell/GridEditBooleanCell.js +1 -2
  27. package/components/cell/GridEditDateCell.js +2 -3
  28. package/components/cell/GridEditInputCell.js +2 -2
  29. package/components/cell/GridEditSingleSelectCell.js +5 -8
  30. package/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -3
  31. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  32. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -0
  33. package/components/columnHeaders/GridColumnGroupHeader.js +22 -13
  34. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -3
  35. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -0
  36. package/components/columnHeaders/GridColumnHeaderItem.js +26 -12
  37. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  38. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -3
  39. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -0
  40. package/components/columnHeaders/GridGenericColumnHeaderItem.js +7 -6
  41. package/components/columnSelection/GridCellCheckboxRenderer.js +3 -5
  42. package/components/columnSelection/GridHeaderCheckbox.js +1 -2
  43. package/components/columnsManagement/GridColumnsManagement.js +17 -21
  44. package/components/containers/GridRoot.js +3 -3
  45. package/components/containers/GridRootStyles.js +12 -20
  46. package/components/menu/GridMenu.js +4 -6
  47. package/components/menu/columnMenu/GridColumnHeaderMenu.js +1 -1
  48. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +2 -3
  49. package/components/panel/GridColumnsPanel.js +1 -2
  50. package/components/panel/GridPanel.d.ts +1 -10
  51. package/components/panel/GridPanel.js +1 -2
  52. package/components/panel/GridPreferencesPanel.js +2 -3
  53. package/components/panel/filterPanel/GridFilterForm.js +24 -27
  54. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -1
  55. package/components/panel/filterPanel/GridFilterInputBoolean.js +6 -7
  56. package/components/panel/filterPanel/GridFilterInputDate.d.ts +1 -1
  57. package/components/panel/filterPanel/GridFilterInputDate.js +3 -4
  58. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +11 -15
  59. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +10 -14
  60. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -1
  61. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +10 -11
  62. package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -1
  63. package/components/panel/filterPanel/GridFilterInputValue.js +5 -7
  64. package/components/panel/filterPanel/GridFilterPanel.js +5 -9
  65. package/components/panel/filterPanel/filterPanelUtils.js +1 -1
  66. package/components/toolbar/GridToolbarColumnsButton.js +3 -5
  67. package/components/toolbar/GridToolbarDensitySelector.js +8 -10
  68. package/components/toolbar/GridToolbarExport.js +2 -2
  69. package/components/toolbar/GridToolbarExportContainer.js +3 -5
  70. package/components/toolbar/GridToolbarFilterButton.js +3 -5
  71. package/components/toolbar/GridToolbarQuickFilter.js +4 -5
  72. package/components/virtualization/GridVirtualScrollbar.js +4 -0
  73. package/components/virtualization/GridVirtualScroller.js +6 -1
  74. package/components/virtualization/GridVirtualScrollerContent.js +1 -2
  75. package/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  76. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
  77. package/constants/gridClasses.d.ts +6 -32
  78. package/constants/gridClasses.js +1 -1
  79. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  80. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +1 -2
  81. package/hooks/core/useGridApiInitialization.js +4 -6
  82. package/hooks/features/clipboard/useGridClipboard.js +6 -5
  83. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +4 -16
  84. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +4 -8
  85. package/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -23
  86. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +23 -7
  87. package/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -101
  88. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +2 -2
  89. package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
  90. package/hooks/features/columnResize/columnResizeSelector.js +3 -0
  91. package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
  92. package/hooks/features/columnResize/columnResizeState.js +1 -0
  93. package/hooks/features/columnResize/gridColumnResizeApi.d.ts +44 -0
  94. package/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  95. package/hooks/features/columnResize/index.d.ts +3 -0
  96. package/hooks/features/columnResize/index.js +3 -0
  97. package/hooks/features/columnResize/useGridColumnResize.d.ts +10 -0
  98. package/hooks/features/columnResize/useGridColumnResize.js +553 -0
  99. package/hooks/features/columns/gridColumnsSelector.js +1 -2
  100. package/hooks/features/columns/gridColumnsUtils.d.ts +0 -9
  101. package/hooks/features/columns/gridColumnsUtils.js +5 -22
  102. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  103. package/hooks/features/columns/useGridColumns.js +11 -19
  104. package/hooks/features/density/densitySelector.d.ts +4 -2
  105. package/hooks/features/density/densitySelector.js +8 -2
  106. package/hooks/features/density/densityState.d.ts +1 -4
  107. package/hooks/features/density/useGridDensity.d.ts +2 -4
  108. package/hooks/features/density/useGridDensity.js +21 -29
  109. package/hooks/features/dimensions/useGridDimensions.js +7 -10
  110. package/hooks/features/editing/useGridCellEditing.js +25 -8
  111. package/hooks/features/editing/useGridEditing.js +1 -2
  112. package/hooks/features/editing/useGridRowEditing.js +4 -6
  113. package/hooks/features/export/serializers/csvSerializer.d.ts +2 -0
  114. package/hooks/features/export/serializers/csvSerializer.js +25 -16
  115. package/hooks/features/export/useGridCsvExport.js +9 -10
  116. package/hooks/features/export/useGridPrintExport.js +17 -22
  117. package/hooks/features/export/utils.js +2 -3
  118. package/hooks/features/filter/gridFilterSelector.js +15 -22
  119. package/hooks/features/filter/gridFilterUtils.js +10 -16
  120. package/hooks/features/filter/useGridFilter.js +9 -15
  121. package/hooks/features/focus/useGridFocus.js +5 -6
  122. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +1 -0
  123. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
  124. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +23 -5
  125. package/hooks/features/index.d.ts +1 -0
  126. package/hooks/features/index.js +1 -0
  127. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -2
  128. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +19 -2
  129. package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
  130. package/hooks/features/pagination/gridPaginationSelector.js +9 -4
  131. package/hooks/features/pagination/useGridPagination.d.ts +1 -6
  132. package/hooks/features/pagination/useGridPagination.js +9 -158
  133. package/hooks/features/pagination/useGridPaginationModel.d.ts +11 -0
  134. package/hooks/features/pagination/useGridPaginationModel.js +165 -0
  135. package/hooks/features/pagination/useGridRowCount.d.ts +8 -0
  136. package/hooks/features/pagination/useGridRowCount.js +94 -0
  137. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +7 -12
  138. package/hooks/features/rowSelection/useGridRowSelection.js +11 -16
  139. package/hooks/features/rows/gridRowsSelector.js +11 -19
  140. package/hooks/features/rows/gridRowsUtils.js +7 -9
  141. package/hooks/features/rows/useGridParamsApi.js +1 -1
  142. package/hooks/features/rows/useGridRows.js +4 -13
  143. package/hooks/features/rows/useGridRowsMeta.js +7 -13
  144. package/hooks/features/scroll/useGridScroll.js +3 -4
  145. package/hooks/features/sorting/gridSortingSelector.js +4 -7
  146. package/hooks/features/sorting/useGridSorting.js +8 -14
  147. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +4 -4
  148. package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  149. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +3 -3
  150. package/hooks/features/virtualization/useGridVirtualScroller.js +220 -71
  151. package/hooks/utils/useGridApiEventHandler.js +5 -10
  152. package/hooks/utils/useGridNativeEventListener.js +1 -2
  153. package/hooks/utils/useLazyRef.d.ts +1 -2
  154. package/hooks/utils/useLazyRef.js +1 -11
  155. package/hooks/utils/useOnMount.d.ts +1 -2
  156. package/hooks/utils/useOnMount.js +1 -7
  157. package/hooks/utils/useTimeout.d.ts +1 -11
  158. package/hooks/utils/useTimeout.js +1 -36
  159. package/index.js +1 -1
  160. package/internals/index.d.ts +3 -1
  161. package/internals/index.js +2 -1
  162. package/internals/utils/getPinnedCellOffset.d.ts +3 -0
  163. package/internals/utils/getPinnedCellOffset.js +17 -0
  164. package/internals/utils/useProps.js +1 -2
  165. package/joy/joySlots.js +18 -63
  166. package/locales/jaJP.js +3 -4
  167. package/material/index.js +0 -2
  168. package/models/api/gridApiCommon.d.ts +3 -3
  169. package/models/api/gridCoreApi.d.ts +1 -5
  170. package/models/api/gridRowsMetaApi.d.ts +1 -1
  171. package/models/api/index.d.ts +1 -1
  172. package/models/api/index.js +0 -1
  173. package/models/events/gridEventLookup.d.ts +13 -0
  174. package/models/gridExport.d.ts +6 -0
  175. package/models/gridHeaderFilteringModel.d.ts +1 -0
  176. package/models/gridSlotsComponent.d.ts +0 -5
  177. package/models/gridStateCommunity.d.ts +3 -0
  178. package/models/params/gridScrollParams.d.ts +5 -3
  179. package/models/props/DataGridProps.d.ts +58 -28
  180. package/modern/DataGrid/DataGrid.js +57 -17
  181. package/modern/DataGrid/useDataGridComponent.js +3 -0
  182. package/modern/DataGrid/useDataGridProps.js +6 -7
  183. package/modern/components/GridColumnHeaders.js +6 -17
  184. package/modern/components/GridHeaders.js +1 -4
  185. package/modern/components/GridPagination.js +13 -6
  186. package/modern/components/GridRow.js +4 -19
  187. package/modern/components/GridScrollArea.js +150 -0
  188. package/modern/components/cell/GridActionsCell.js +1 -1
  189. package/modern/components/cell/GridActionsCellItem.js +4 -0
  190. package/modern/components/cell/GridBooleanCell.js +3 -2
  191. package/modern/components/cell/GridCell.js +11 -3
  192. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  193. package/modern/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  194. package/modern/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  195. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  196. package/modern/components/containers/GridRoot.js +3 -3
  197. package/modern/components/containers/GridRootStyles.js +12 -20
  198. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  199. package/modern/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  200. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  201. package/modern/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  202. package/modern/components/toolbar/GridToolbarDensitySelector.js +5 -5
  203. package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
  204. package/modern/components/virtualization/GridVirtualScroller.js +6 -1
  205. package/modern/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  206. package/modern/constants/gridClasses.js +1 -1
  207. package/modern/hooks/features/clipboard/useGridClipboard.js +4 -2
  208. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +184 -97
  209. package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
  210. package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
  211. package/modern/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  212. package/modern/hooks/features/columnResize/index.js +3 -0
  213. package/modern/hooks/features/columnResize/useGridColumnResize.js +553 -0
  214. package/modern/hooks/features/columns/gridColumnsUtils.js +4 -20
  215. package/modern/hooks/features/density/densitySelector.js +8 -2
  216. package/modern/hooks/features/density/useGridDensity.js +21 -29
  217. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -5
  218. package/modern/hooks/features/editing/useGridCellEditing.js +22 -3
  219. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  220. package/modern/hooks/features/export/serializers/csvSerializer.js +23 -12
  221. package/modern/hooks/features/export/useGridCsvExport.js +2 -1
  222. package/modern/hooks/features/export/useGridPrintExport.js +8 -7
  223. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  224. package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
  225. package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  226. package/modern/hooks/features/index.js +1 -0
  227. package/modern/hooks/features/pagination/gridPaginationSelector.js +8 -2
  228. package/modern/hooks/features/pagination/useGridPagination.js +8 -149
  229. package/modern/hooks/features/pagination/useGridPaginationModel.js +165 -0
  230. package/modern/hooks/features/pagination/useGridRowCount.js +94 -0
  231. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -2
  232. package/modern/hooks/features/scroll/useGridScroll.js +1 -1
  233. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  234. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  235. package/modern/hooks/utils/useLazyRef.js +1 -11
  236. package/modern/hooks/utils/useOnMount.js +1 -7
  237. package/modern/hooks/utils/useTimeout.js +1 -36
  238. package/modern/index.js +1 -1
  239. package/modern/internals/index.js +2 -1
  240. package/modern/internals/utils/getPinnedCellOffset.js +17 -0
  241. package/modern/joy/joySlots.js +11 -50
  242. package/modern/locales/jaJP.js +3 -4
  243. package/modern/material/index.js +0 -2
  244. package/modern/models/api/index.js +0 -1
  245. package/modern/utils/cellBorderUtils.js +8 -0
  246. package/modern/utils/createSelector.js +1 -1
  247. package/modern/utils/domUtils.js +144 -0
  248. package/modern/utils/keyboardUtils.js +1 -1
  249. package/node/DataGrid/DataGrid.js +57 -17
  250. package/node/DataGrid/useDataGridComponent.js +3 -0
  251. package/node/DataGrid/useDataGridProps.js +6 -7
  252. package/node/components/GridColumnHeaders.js +6 -16
  253. package/node/components/GridHeaders.js +1 -4
  254. package/node/components/GridPagination.js +10 -4
  255. package/node/components/GridRow.js +3 -18
  256. package/node/components/GridScrollArea.js +158 -0
  257. package/node/components/cell/GridActionsCell.js +1 -1
  258. package/node/components/cell/GridActionsCellItem.js +4 -0
  259. package/node/components/cell/GridBooleanCell.js +3 -2
  260. package/node/components/cell/GridCell.js +12 -4
  261. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  262. package/node/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  263. package/node/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  264. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  265. package/node/components/containers/GridRoot.js +2 -2
  266. package/node/components/containers/GridRootStyles.js +12 -20
  267. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  268. package/node/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  269. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  270. package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  271. package/node/components/toolbar/GridToolbarDensitySelector.js +4 -4
  272. package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
  273. package/node/components/virtualization/GridVirtualScroller.js +6 -1
  274. package/node/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  275. package/node/constants/gridClasses.js +1 -1
  276. package/node/hooks/features/clipboard/useGridClipboard.js +4 -2
  277. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +190 -103
  278. package/node/hooks/features/columnResize/columnResizeSelector.js +10 -0
  279. package/node/hooks/features/columnResize/columnResizeState.js +5 -0
  280. package/node/hooks/features/columnResize/gridColumnResizeApi.js +16 -0
  281. package/node/hooks/features/columnResize/index.js +38 -0
  282. package/node/hooks/features/columnResize/useGridColumnResize.js +564 -0
  283. package/node/hooks/features/columns/gridColumnsUtils.js +4 -21
  284. package/node/hooks/features/density/densitySelector.js +9 -3
  285. package/node/hooks/features/density/useGridDensity.js +22 -30
  286. package/node/hooks/features/dimensions/useGridDimensions.js +4 -5
  287. package/node/hooks/features/editing/useGridCellEditing.js +22 -3
  288. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  289. package/node/hooks/features/export/serializers/csvSerializer.js +23 -12
  290. package/node/hooks/features/export/useGridCsvExport.js +2 -1
  291. package/node/hooks/features/export/useGridPrintExport.js +8 -7
  292. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  293. package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +4 -1
  294. package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  295. package/node/hooks/features/index.js +11 -0
  296. package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
  297. package/node/hooks/features/pagination/useGridPagination.js +9 -153
  298. package/node/hooks/features/pagination/useGridPaginationModel.js +176 -0
  299. package/node/hooks/features/pagination/useGridRowCount.js +103 -0
  300. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -1
  301. package/node/hooks/features/scroll/useGridScroll.js +1 -1
  302. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  303. package/node/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  304. package/node/hooks/utils/useLazyRef.js +7 -13
  305. package/node/hooks/utils/useOnMount.js +8 -10
  306. package/node/hooks/utils/useTimeout.js +7 -37
  307. package/node/index.js +1 -1
  308. package/node/internals/index.js +27 -8
  309. package/node/internals/utils/getPinnedCellOffset.js +24 -0
  310. package/node/joy/joySlots.js +11 -50
  311. package/node/locales/jaJP.js +3 -4
  312. package/node/material/index.js +0 -2
  313. package/node/models/api/index.js +0 -11
  314. package/node/utils/cellBorderUtils.js +16 -0
  315. package/node/utils/createSelector.js +1 -1
  316. package/node/utils/domUtils.js +155 -0
  317. package/node/utils/keyboardUtils.js +1 -1
  318. package/package.json +4 -4
  319. package/utils/cellBorderUtils.d.ts +3 -0
  320. package/utils/cellBorderUtils.js +8 -0
  321. package/utils/createSelector.js +9 -9
  322. package/utils/domUtils.d.ts +14 -1
  323. package/utils/domUtils.js +144 -0
  324. package/utils/getGridLocalization.js +9 -12
  325. package/utils/keyboardUtils.js +1 -1
  326. package/components/columnHeaders/GridColumnHeadersInner.d.ts +0 -8
  327. package/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  328. package/modern/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  329. package/node/components/columnHeaders/GridColumnHeadersInner.js +0 -67
@@ -41,19 +41,15 @@ const createGroupLookup = columnGroupingModel => {
41
41
  return _extends({}, groupLookup);
42
42
  };
43
43
  export const columnGroupsStateInitializer = (state, props, apiRef) => {
44
- var _props$columnGrouping, _props$columnGrouping2, _apiRef$current$state;
45
44
  if (!props.columnGroupingModel) {
46
45
  return state;
47
46
  }
48
47
  const columnFields = gridColumnFieldsSelector(apiRef);
49
48
  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
50
- const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
51
- const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
52
- const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, (_apiRef$current$state = apiRef.current.state.pinnedColumns) != null ? _apiRef$current$state : {});
53
- const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
54
- var _unwrappedGroupingMod, _unwrappedGroupingMod2;
55
- return (_unwrappedGroupingMod = (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod2.length) != null ? _unwrappedGroupingMod : 0;
56
- }));
49
+ const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
50
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
51
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, apiRef.current.state.pinnedColumns ?? {});
52
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
57
53
  return _extends({}, state, {
58
54
  columnGrouping: {
59
55
  lookup: groupLookup,
@@ -73,9 +69,8 @@ export const useGridColumnGrouping = (apiRef, props) => {
73
69
  * API METHODS
74
70
  */
75
71
  const getColumnGroupPath = React.useCallback(field => {
76
- var _unwrappedGroupingMod3;
77
72
  const unwrappedGroupingModel = gridColumnGroupsUnwrappedModelSelector(apiRef);
78
- return (_unwrappedGroupingMod3 = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod3 : [];
73
+ return unwrappedGroupingModel[field] ?? [];
79
74
  }, [apiRef]);
80
75
  const getAllGroupDetails = React.useCallback(() => {
81
76
  const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
@@ -87,12 +82,10 @@ export const useGridColumnGrouping = (apiRef, props) => {
87
82
  };
88
83
  useGridApiMethod(apiRef, columnGroupingApi, 'public');
89
84
  const handleColumnIndexChange = React.useCallback(() => {
90
- var _props$columnGrouping3;
91
- const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping3 = props.columnGroupingModel) != null ? _props$columnGrouping3 : []);
85
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
92
86
  apiRef.current.setState(state => {
93
- var _state$columns$ordere, _state$columns, _state$pinnedColumns;
94
- const orderedFields = (_state$columns$ordere = (_state$columns = state.columns) == null ? void 0 : _state$columns.orderedFields) != null ? _state$columns$ordere : [];
95
- const pinnedColumns = (_state$pinnedColumns = state.pinnedColumns) != null ? _state$pinnedColumns : {};
87
+ const orderedFields = state.columns?.orderedFields ?? [];
88
+ const pinnedColumns = state.pinnedColumns ?? {};
96
89
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);
97
90
  return _extends({}, state, {
98
91
  columnGrouping: _extends({}, state.columnGrouping, {
@@ -102,18 +95,14 @@ export const useGridColumnGrouping = (apiRef, props) => {
102
95
  });
103
96
  }, [apiRef, props.columnGroupingModel]);
104
97
  const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
105
- var _apiRef$current$getPi, _apiRef$current$getPi2, _apiRef$current;
106
98
  // @ts-expect-error Move this logic to `Pro` package
107
- const pinnedColumns = (_apiRef$current$getPi = (_apiRef$current$getPi2 = (_apiRef$current = apiRef.current).getPinnedColumns) == null ? void 0 : _apiRef$current$getPi2.call(_apiRef$current)) != null ? _apiRef$current$getPi : {};
99
+ const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
108
100
  const columnFields = gridColumnFieldsSelector(apiRef);
109
101
  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
110
- const groupLookup = createGroupLookup(columnGroupingModel != null ? columnGroupingModel : []);
111
- const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel != null ? columnGroupingModel : []);
102
+ const groupLookup = createGroupLookup(columnGroupingModel ?? []);
103
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel ?? []);
112
104
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, pinnedColumns);
113
- const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
114
- var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
115
- return (_unwrappedGroupingMod4 = (_unwrappedGroupingMod5 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod5.length) != null ? _unwrappedGroupingMod4 : 0;
116
- }));
105
+ const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
117
106
  apiRef.current.setState(state => {
118
107
  return _extends({}, state, {
119
108
  columnGrouping: {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
3
- import { GridRenderContext } from '../../../models/params/gridScrollParams';
3
+ import type { GridColumnsRenderContext } from '../../../models/params/gridScrollParams';
4
4
  import { GridStateColDef } from '../../../models/colDef/gridColDef';
5
5
  import { GridSortColumnLookup } from '../sorting';
6
6
  import { GridFilterActiveItemsLookup } from '../filter';
@@ -9,7 +9,6 @@ import { GridColumnMenuState } from '../columnMenu';
9
9
  import { GridPinnedColumnPosition, GridColumnVisibilityModel } from '../columns';
10
10
  import { GridGroupingStructure } from '../columnGrouping/gridColumnGroupsInterfaces';
11
11
  export interface UseGridColumnHeadersProps {
12
- innerRef?: React.Ref<HTMLDivElement>;
13
12
  visibleColumns: GridStateColDef[];
14
13
  sortColumnLookup: GridSortColumnLookup;
15
14
  filterColumnLookup: GridFilterActiveItemsLookup;
@@ -25,7 +24,7 @@ export interface UseGridColumnHeadersProps {
25
24
  }
26
25
  export interface GetHeadersParams {
27
26
  position?: GridPinnedColumnPosition;
28
- renderContext?: GridRenderContext;
27
+ renderContext?: GridColumnsRenderContext;
29
28
  minFirstColumn?: number;
30
29
  maxLastColumn?: number;
31
30
  }
@@ -34,18 +33,35 @@ export declare const GridColumnHeaderRow: import("@emotion/styled").StyledCompon
34
33
  ownerState: OwnerState;
35
34
  }, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
36
35
  export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) => {
37
- renderContext: GridRenderContext;
36
+ renderContext: GridColumnsRenderContext;
37
+ leftRenderContext: {
38
+ firstColumnIndex: number;
39
+ lastColumnIndex: number;
40
+ } | null;
41
+ rightRenderContext: {
42
+ firstColumnIndex: number;
43
+ lastColumnIndex: number;
44
+ } | null;
45
+ pinnedColumns: {
46
+ left: GridStateColDef[];
47
+ right: GridStateColDef[];
48
+ };
49
+ visibleColumns: GridStateColDef[];
50
+ getCellOffsetStyle: ({ pinnedPosition, columnIndex, computedWidth, }: {
51
+ pinnedPosition?: GridPinnedColumnPosition | undefined;
52
+ columnIndex: number;
53
+ computedWidth: number;
54
+ }) => React.CSSProperties | undefined;
38
55
  getFillers: (params: GetHeadersParams | undefined, children: React.ReactNode, leftOverflow: number, borderTop?: boolean) => React.JSX.Element;
39
- getColumnHeaders: (params?: GetHeadersParams, other?: {}) => React.JSX.Element;
56
+ getColumnHeadersRow: () => React.JSX.Element;
40
57
  getColumnsToRender: (params?: GetHeadersParams) => {
41
58
  renderedColumns: GridStateColDef[];
42
59
  firstColumnToRender: number;
43
60
  lastColumnToRender: number;
44
61
  };
45
- getColumnGroupHeaders: (params?: GetHeadersParams) => React.JSX.Element[] | null;
62
+ getColumnGroupHeadersRows: () => React.JSX.Element[] | null;
46
63
  isDragging: boolean;
47
64
  getInnerProps: () => {
48
- ref: ((instance: HTMLDivElement | null) => void) | null;
49
65
  role: string;
50
66
  };
51
67
  };
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { unstable_useForkRef as useForkRef } from '@mui/utils';
4
3
  import { styled, useTheme } from '@mui/material/styles';
5
4
  import { useGridSelector } from '../../utils';
6
5
  import { useGridRootProps } from '../../utils/useGridRootProps';
@@ -13,16 +12,11 @@ import { computeOffsetLeft } from '../virtualization/useGridVirtualScroller';
13
12
  import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
14
13
  import { GridPinnedColumnPosition, gridColumnPositionsSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
15
14
  import { GridScrollbarFillerCell as ScrollbarFiller } from '../../../components/GridScrollbarFillerCell';
15
+ import { getPinnedCellOffset } from '../../../internals/utils/getPinnedCellOffset';
16
+ import { GridColumnHeaderSeparatorSides } from '../../../components/columnHeaders/GridColumnHeaderSeparator';
16
17
  import { gridClasses } from '../../../constants/gridClasses';
17
18
  import { jsx as _jsx } from "react/jsx-runtime";
18
19
  import { jsxs as _jsxs } from "react/jsx-runtime";
19
- const SpaceFiller = styled('div')({
20
- /* GridRootStyles conflict */
21
- '&&&': {
22
- padding: 0,
23
- width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
24
- }
25
- });
26
20
  export const GridColumnHeaderRow = styled('div', {
27
21
  name: 'MuiDataGrid',
28
22
  slot: 'ColumnHeaderRow',
@@ -33,7 +27,6 @@ export const GridColumnHeaderRow = styled('div', {
33
27
  });
34
28
  export const useGridColumnHeaders = props => {
35
29
  const {
36
- innerRef: innerRefProp,
37
30
  visibleColumns,
38
31
  sortColumnLookup,
39
32
  filterColumnLookup,
@@ -53,20 +46,30 @@ export const useGridColumnHeaders = props => {
53
46
  const theme = useTheme();
54
47
  const rootProps = useGridRootProps();
55
48
  const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
56
- const innerRef = React.useRef(null);
57
- const handleInnerRef = useForkRef(innerRefProp, innerRef);
58
49
  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
59
50
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
60
51
  const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
61
52
  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
62
53
  const offsetLeft = computeOffsetLeft(columnPositions, renderContext, theme.direction, pinnedColumns.left.length);
63
54
  React.useEffect(() => {
64
- apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
55
+ apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;
65
56
  }, [apiRef]);
66
57
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
67
58
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
68
59
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
69
60
  const handleColumnReorderStop = React.useCallback(() => setDragCol(''), []);
61
+ const leftRenderContext = React.useMemo(() => {
62
+ return pinnedColumns.left.length ? {
63
+ firstColumnIndex: 0,
64
+ lastColumnIndex: pinnedColumns.left.length
65
+ } : null;
66
+ }, [pinnedColumns.left.length]);
67
+ const rightRenderContext = React.useMemo(() => {
68
+ return pinnedColumns.right.length ? {
69
+ firstColumnIndex: visibleColumns.length - pinnedColumns.right.length,
70
+ lastColumnIndex: visibleColumns.length
71
+ } : null;
72
+ }, [pinnedColumns.right.length, visibleColumns.length]);
70
73
  useGridApiEventHandler(apiRef, 'columnResizeStart', handleColumnResizeStart);
71
74
  useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
72
75
  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
@@ -89,8 +92,8 @@ export const useGridColumnHeaders = props => {
89
92
  };
90
93
  };
91
94
  const getFillers = (params, children, leftOverflow, borderTop = false) => {
92
- const isPinnedRight = (params == null ? void 0 : params.position) === GridPinnedColumnPosition.RIGHT;
93
- const isNotPinned = (params == null ? void 0 : params.position) === undefined;
95
+ const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;
96
+ const isNotPinned = params?.position === undefined;
94
97
  const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;
95
98
  const leftOffsetWidth = offsetLeft - leftOverflow;
96
99
  return /*#__PURE__*/_jsxs(React.Fragment, {
@@ -99,8 +102,9 @@ export const useGridColumnHeaders = props => {
99
102
  style: {
100
103
  width: leftOffsetWidth
101
104
  }
102
- }), children, isNotPinned && /*#__PURE__*/_jsx(SpaceFiller, {
103
- className: gridClasses.columnHeader
105
+ }), children, isNotPinned && /*#__PURE__*/_jsx("div", {
106
+ role: "presentation",
107
+ className: gridClasses.filler
104
108
  }), hasScrollbarFiller && /*#__PURE__*/_jsx(ScrollbarFiller, {
105
109
  header: true,
106
110
  borderTop: borderTop,
@@ -108,6 +112,27 @@ export const useGridColumnHeaders = props => {
108
112
  })]
109
113
  });
110
114
  };
115
+ const getCellOffsetStyle = ({
116
+ pinnedPosition,
117
+ columnIndex,
118
+ computedWidth
119
+ }) => {
120
+ let style;
121
+ if (pinnedPosition === 'left' || pinnedPosition === 'right') {
122
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, computedWidth, columnIndex, columnPositions, dimensions);
123
+ if (pinnedPosition === 'left') {
124
+ style = {
125
+ left: pinnedOffset
126
+ };
127
+ }
128
+ if (pinnedPosition === 'right') {
129
+ style = {
130
+ right: pinnedOffset
131
+ };
132
+ }
133
+ }
134
+ return style;
135
+ };
111
136
  const getColumnHeaders = (params, other = {}) => {
112
137
  const {
113
138
  renderedColumns,
@@ -121,6 +146,12 @@ export const useGridColumnHeaders = props => {
121
146
  const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === colDef.field || isFirstColumn && !hasOtherElementInTabSequence ? 0 : -1;
122
147
  const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
123
148
  const open = columnMenuState.open && columnMenuState.field === colDef.field;
149
+ const pinnedPosition = params?.position;
150
+ const style = getCellOffsetStyle({
151
+ pinnedPosition,
152
+ columnIndex,
153
+ computedWidth: colDef.computedWidth
154
+ });
124
155
  columns.push( /*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {
125
156
  columnMenuOpen: open,
126
157
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
@@ -130,120 +161,174 @@ export const useGridColumnHeaders = props => {
130
161
  colIndex: columnIndex,
131
162
  isResizing: resizeCol === colDef.field,
132
163
  hasFocus: hasFocus,
133
- tabIndex: tabIndex
164
+ tabIndex: tabIndex,
165
+ pinnedPosition: pinnedPosition,
166
+ style: style,
167
+ indexInSection: i,
168
+ sectionLength: renderedColumns.length
134
169
  }, other), colDef.field));
135
170
  }
136
- return /*#__PURE__*/_jsx(GridColumnHeaderRow, {
171
+ return getFillers(params, columns, 0);
172
+ };
173
+ const getColumnHeadersRow = () => {
174
+ return /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
137
175
  role: "row",
138
176
  "aria-rowindex": headerGroupingMaxDepth + 1,
139
177
  ownerState: rootProps,
140
- children: getFillers(params, columns, 0)
178
+ children: [leftRenderContext && getColumnHeaders({
179
+ position: GridPinnedColumnPosition.LEFT,
180
+ renderContext: leftRenderContext,
181
+ minFirstColumn: leftRenderContext.firstColumnIndex,
182
+ maxLastColumn: leftRenderContext.lastColumnIndex
183
+ }, {
184
+ disableReorder: true
185
+ }), getColumnHeaders({
186
+ renderContext,
187
+ minFirstColumn: pinnedColumns.left.length,
188
+ maxLastColumn: visibleColumns.length - pinnedColumns.right.length
189
+ }), rightRenderContext && getColumnHeaders({
190
+ position: GridPinnedColumnPosition.RIGHT,
191
+ renderContext: rightRenderContext,
192
+ minFirstColumn: rightRenderContext.firstColumnIndex,
193
+ maxLastColumn: rightRenderContext.lastColumnIndex
194
+ }, {
195
+ disableReorder: true,
196
+ separatorSide: GridColumnHeaderSeparatorSides.Left
197
+ })]
141
198
  });
142
199
  };
143
- const getColumnGroupHeaders = params => {
144
- if (headerGroupingMaxDepth === 0) {
145
- return null;
146
- }
200
+ const getColumnGroupHeaders = ({
201
+ depth,
202
+ params
203
+ }) => {
147
204
  const columnsToRender = getColumnsToRender(params);
148
205
  if (columnsToRender.renderedColumns.length === 0) {
149
206
  return null;
150
207
  }
151
208
  const {
209
+ renderedColumns,
152
210
  firstColumnToRender,
153
211
  lastColumnToRender
154
212
  } = columnsToRender;
155
- const columns = [];
156
- const headerToRender = [];
157
- for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
158
- var _apiRef$current$getCo, _apiRef$current$getCo2;
159
- const rowStructure = columnGroupsHeaderStructure[depth];
160
- const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
161
- const firstGroupToRender = (_apiRef$current$getCo = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo : null;
162
- const firstGroupIndex = rowStructure.findIndex(({
163
- groupId,
164
- columnFields
165
- }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
166
- const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
167
- const lastGroupToRender = (_apiRef$current$getCo2 = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo2 : null;
168
- const lastGroupIndex = rowStructure.findIndex(({
169
- groupId,
170
- columnFields
171
- }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
172
- const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
173
- return _extends({}, groupStructure, {
174
- columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
175
- });
176
- }).filter(groupStructure => groupStructure.columnFields.length > 0);
177
- const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
178
- const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
179
- const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
180
- var _column$computedWidth;
181
- const column = apiRef.current.getColumn(field);
182
- return acc + ((_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0);
183
- }, 0);
184
- let columnIndex = firstColumnToRender;
185
- const elements = visibleColumnGroupHeader.map(({
186
- groupId,
187
- columnFields
188
- }) => {
189
- const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
190
- const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
191
- const headerInfo = {
192
- groupId,
193
- width: columnFields.reduce((acc, field) => acc + apiRef.current.getColumn(field).computedWidth, 0),
194
- fields: columnFields,
195
- colIndex: columnIndex,
196
- hasFocus,
197
- tabIndex
198
- };
199
- columnIndex += columnFields.length;
200
- return headerInfo;
201
- });
202
- headerToRender.push({
203
- leftOverflow,
204
- elements
213
+ const rowStructure = columnGroupsHeaderStructure[depth];
214
+ const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
215
+ const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
216
+ const firstGroupIndex = rowStructure.findIndex(({
217
+ groupId,
218
+ columnFields
219
+ }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
220
+ const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
221
+ const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
222
+ const lastGroupIndex = rowStructure.findIndex(({
223
+ groupId,
224
+ columnFields
225
+ }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
226
+ const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
227
+ return _extends({}, groupStructure, {
228
+ columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
205
229
  });
206
- }
207
- headerToRender.forEach((depthInfo, depthIndex) => {
208
- const children = depthInfo.elements.map(({
230
+ }).filter(groupStructure => groupStructure.columnFields.length > 0);
231
+ const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
232
+ const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
233
+ const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
234
+ const column = apiRef.current.getColumn(field);
235
+ return acc + (column.computedWidth ?? 0);
236
+ }, 0);
237
+ let columnIndex = firstColumnToRender;
238
+ const children = visibleColumnGroupHeader.map(({
239
+ groupId,
240
+ columnFields
241
+ }, index) => {
242
+ const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
243
+ const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
244
+ const headerInfo = {
209
245
  groupId,
210
- width,
211
- fields,
212
- colIndex,
246
+ width: columnFields.reduce((acc, field) => acc + apiRef.current.getColumn(field).computedWidth, 0),
247
+ fields: columnFields,
248
+ colIndex: columnIndex,
213
249
  hasFocus,
214
250
  tabIndex
215
- }, groupIndex) => {
216
- return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
217
- groupId: groupId,
218
- width: width,
219
- fields: fields,
220
- colIndex: colIndex,
221
- depth: depthIndex,
222
- isLastColumn: colIndex === visibleColumns.length - fields.length,
223
- maxDepth: headerToRender.length,
224
- height: dimensions.headerHeight,
225
- hasFocus: hasFocus,
226
- tabIndex: tabIndex
227
- }, groupIndex);
251
+ };
252
+ const pinnedPosition = params.position;
253
+ const style = getCellOffsetStyle({
254
+ pinnedPosition,
255
+ columnIndex,
256
+ computedWidth: headerInfo.width
228
257
  });
229
- columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
258
+ columnIndex += columnFields.length;
259
+ let indexInSection = index;
260
+ if (pinnedPosition === 'left') {
261
+ // Group headers can expand to multiple columns, we need to adjust the index
262
+ indexInSection = columnIndex - 1;
263
+ }
264
+ return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
265
+ groupId: groupId,
266
+ width: headerInfo.width,
267
+ fields: headerInfo.fields,
268
+ colIndex: headerInfo.colIndex,
269
+ depth: depth,
270
+ isLastColumn: headerInfo.colIndex === visibleColumns.length - headerInfo.fields.length,
271
+ maxDepth: headerGroupingMaxDepth,
272
+ height: dimensions.headerHeight,
273
+ hasFocus: hasFocus,
274
+ tabIndex: tabIndex,
275
+ pinnedPosition: pinnedPosition,
276
+ style: style,
277
+ indexInSection: indexInSection,
278
+ sectionLength: renderedColumns.length
279
+ }, index);
280
+ });
281
+ return getFillers(params, children, leftOverflow);
282
+ };
283
+ const getColumnGroupHeadersRows = () => {
284
+ if (headerGroupingMaxDepth === 0) {
285
+ return null;
286
+ }
287
+ const headerRows = [];
288
+ for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
289
+ headerRows.push( /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
230
290
  role: "row",
231
- "aria-rowindex": depthIndex + 1,
291
+ "aria-rowindex": depth + 1,
232
292
  ownerState: rootProps,
233
- children: getFillers(params, children, depthInfo.leftOverflow)
234
- }, depthIndex));
235
- });
236
- return columns;
293
+ children: [leftRenderContext && getColumnGroupHeaders({
294
+ depth,
295
+ params: {
296
+ position: GridPinnedColumnPosition.LEFT,
297
+ renderContext: leftRenderContext,
298
+ minFirstColumn: leftRenderContext.firstColumnIndex,
299
+ maxLastColumn: leftRenderContext.lastColumnIndex
300
+ }
301
+ }), getColumnGroupHeaders({
302
+ depth,
303
+ params: {
304
+ renderContext
305
+ }
306
+ }), rightRenderContext && getColumnGroupHeaders({
307
+ depth,
308
+ params: {
309
+ position: GridPinnedColumnPosition.RIGHT,
310
+ renderContext: rightRenderContext,
311
+ minFirstColumn: rightRenderContext.firstColumnIndex,
312
+ maxLastColumn: rightRenderContext.lastColumnIndex
313
+ }
314
+ })]
315
+ }, depth));
316
+ }
317
+ return headerRows;
237
318
  };
238
319
  return {
239
320
  renderContext,
321
+ leftRenderContext,
322
+ rightRenderContext,
323
+ pinnedColumns,
324
+ visibleColumns,
325
+ getCellOffsetStyle,
240
326
  getFillers,
241
- getColumnHeaders,
327
+ getColumnHeadersRow,
242
328
  getColumnsToRender,
243
- getColumnGroupHeaders,
329
+ getColumnGroupHeadersRows,
244
330
  isDragging: !!dragCol,
245
331
  getInnerProps: () => ({
246
- ref: handleInnerRef,
247
332
  role: 'rowgroup'
248
333
  })
249
334
  };
@@ -37,8 +37,8 @@ const useGridColumnMenuSlots = props => {
37
37
  const sorted = cleansedItems.sort((a, b) => {
38
38
  const leftItemProps = processedSlotProps[a];
39
39
  const rightItemProps = processedSlotProps[b];
40
- const leftDisplayOrder = Number.isFinite(leftItemProps == null ? void 0 : leftItemProps.displayOrder) ? leftItemProps.displayOrder : 100;
41
- const rightDisplayOrder = Number.isFinite(rightItemProps == null ? void 0 : rightItemProps.displayOrder) ? rightItemProps.displayOrder : 100;
40
+ const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
41
+ const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
42
42
  return leftDisplayOrder - rightDisplayOrder;
43
43
  });
44
44
  return sorted.reduce((acc, key, index) => {
@@ -0,0 +1,3 @@
1
+ import { GridStateCommunity } from '../../../models/gridStateCommunity';
2
+ export declare const gridColumnResizeSelector: (state: GridStateCommunity) => import("./columnResizeState").GridColumnResizeState;
3
+ export declare const gridResizingColumnFieldSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string>;
@@ -0,0 +1,3 @@
1
+ import { createSelector } from '../../../utils/createSelector';
2
+ export const gridColumnResizeSelector = state => state.columnResize;
3
+ export const gridResizingColumnFieldSelector = createSelector(gridColumnResizeSelector, columnResize => columnResize.resizingColumnField);
@@ -0,0 +1,3 @@
1
+ export interface GridColumnResizeState {
2
+ resizingColumnField: string;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,44 @@
1
+ import type { GridColDef } from '../../../models/colDef/gridColDef';
2
+ export declare const DEFAULT_GRID_AUTOSIZE_OPTIONS: {
3
+ includeHeaders: boolean;
4
+ includeOutliers: boolean;
5
+ outliersFactor: number;
6
+ expand: boolean;
7
+ };
8
+ export type GridAutosizeOptions = {
9
+ /**
10
+ * The columns to autosize. By default, applies to all columns.
11
+ */
12
+ columns?: GridColDef['field'][];
13
+ /**
14
+ * If true, include the header widths in the calculation.
15
+ * @default false
16
+ */
17
+ includeHeaders?: boolean;
18
+ /**
19
+ * If true, width outliers will be ignored.
20
+ * @default false
21
+ */
22
+ includeOutliers?: boolean;
23
+ /**
24
+ * The IQR factor range to detect outliers.
25
+ * @default 1.5
26
+ */
27
+ outliersFactor?: number;
28
+ /**
29
+ * If the total width is less than the available width, expand columns to fill it.
30
+ * @default false
31
+ */
32
+ expand?: boolean;
33
+ };
34
+ /**
35
+ * The Resize API interface that is available in the grid `apiRef`.
36
+ */
37
+ export interface GridColumnResizeApi {
38
+ /**
39
+ * Auto-size the columns of the grid based on the cells' content and the space available.
40
+ * @param {GridAutosizeOptions} options The autosizing options
41
+ * @returns {Promise} A promise that resolves when autosizing is completed
42
+ */
43
+ autosizeColumns: (options?: GridAutosizeOptions) => Promise<void>;
44
+ }
@@ -0,0 +1,10 @@
1
+ export const DEFAULT_GRID_AUTOSIZE_OPTIONS = {
2
+ includeHeaders: true,
3
+ includeOutliers: false,
4
+ outliersFactor: 1.5,
5
+ expand: false
6
+ };
7
+
8
+ /**
9
+ * The Resize API interface that is available in the grid `apiRef`.
10
+ */
@@ -0,0 +1,3 @@
1
+ export * from './columnResizeSelector';
2
+ export * from './columnResizeState';
3
+ export * from './gridColumnResizeApi';
@@ -0,0 +1,3 @@
1
+ export * from './columnResizeSelector';
2
+ export * from './columnResizeState';
3
+ export * from './gridColumnResizeApi';
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { GridStateInitializer } from '../../utils/useGridInitializeState';
3
+ import type { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
+ import type { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
5
+ export declare const columnResizeStateInitializer: GridStateInitializer;
6
+ /**
7
+ * @requires useGridColumns (method, event)
8
+ * TODO: improve experience for last column
9
+ */
10
+ export declare const useGridColumnResize: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'autosizeOptions' | 'autosizeOnMount' | 'disableAutosize' | 'onColumnResize' | 'onColumnWidthChange'>) => void;