@mui/x-data-grid 7.0.0-beta.6 → 7.0.0-beta.7

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 (189) hide show
  1. package/CHANGELOG.md +117 -1
  2. package/DataGrid/DataGrid.js +44 -0
  3. package/DataGrid/useDataGridComponent.js +3 -0
  4. package/DataGrid/useDataGridProps.js +3 -2
  5. package/components/GridColumnHeaders.d.ts +1 -2
  6. package/components/GridColumnHeaders.js +6 -17
  7. package/components/GridHeaders.js +1 -4
  8. package/components/GridPagination.js +2 -7
  9. package/components/GridRow.d.ts +1 -1
  10. package/components/GridRow.js +4 -19
  11. package/components/GridScrollArea.d.ts +10 -0
  12. package/components/GridScrollArea.js +150 -0
  13. package/components/cell/GridCell.d.ts +7 -0
  14. package/components/cell/GridCell.js +11 -3
  15. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  16. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -0
  17. package/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  18. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -0
  19. package/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  20. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -0
  21. package/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  22. package/components/containers/GridRootStyles.js +12 -20
  23. package/components/virtualization/GridVirtualScrollbar.js +4 -0
  24. package/components/virtualization/GridVirtualScroller.js +6 -1
  25. package/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  26. package/constants/gridClasses.d.ts +6 -32
  27. package/constants/gridClasses.js +1 -1
  28. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  29. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +23 -7
  30. package/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -99
  31. package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
  32. package/hooks/features/columnResize/columnResizeSelector.js +3 -0
  33. package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
  34. package/hooks/features/columnResize/columnResizeState.js +1 -0
  35. package/hooks/features/columnResize/gridColumnResizeApi.d.ts +44 -0
  36. package/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  37. package/hooks/features/columnResize/index.d.ts +3 -0
  38. package/hooks/features/columnResize/index.js +3 -0
  39. package/hooks/features/columnResize/useGridColumnResize.d.ts +10 -0
  40. package/hooks/features/columnResize/useGridColumnResize.js +563 -0
  41. package/hooks/features/columns/gridColumnsUtils.js +4 -1
  42. package/hooks/features/dimensions/useGridDimensions.js +4 -5
  43. package/hooks/features/editing/useGridCellEditing.js +21 -2
  44. package/hooks/features/export/useGridPrintExport.js +8 -7
  45. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +1 -0
  46. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +6 -0
  47. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +30 -7
  48. package/hooks/features/index.d.ts +1 -0
  49. package/hooks/features/index.js +1 -0
  50. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +19 -2
  51. package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
  52. package/hooks/features/pagination/gridPaginationSelector.js +8 -2
  53. package/hooks/features/pagination/useGridPagination.d.ts +1 -6
  54. package/hooks/features/pagination/useGridPagination.js +9 -157
  55. package/hooks/features/pagination/useGridPaginationModel.d.ts +11 -0
  56. package/hooks/features/pagination/useGridPaginationModel.js +170 -0
  57. package/hooks/features/pagination/useGridRowCount.d.ts +8 -0
  58. package/hooks/features/pagination/useGridRowCount.js +97 -0
  59. package/hooks/features/scroll/useGridScroll.js +1 -1
  60. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +4 -4
  61. package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  62. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  63. package/hooks/utils/useLazyRef.d.ts +1 -2
  64. package/hooks/utils/useLazyRef.js +1 -11
  65. package/hooks/utils/useOnMount.d.ts +1 -2
  66. package/hooks/utils/useOnMount.js +1 -7
  67. package/hooks/utils/useTimeout.d.ts +1 -11
  68. package/hooks/utils/useTimeout.js +1 -36
  69. package/index.js +1 -1
  70. package/internals/index.d.ts +1 -1
  71. package/internals/index.js +1 -1
  72. package/internals/utils/getPinnedCellOffset.d.ts +3 -0
  73. package/internals/utils/getPinnedCellOffset.js +17 -0
  74. package/joy/joySlots.js +13 -52
  75. package/locales/jaJP.js +3 -4
  76. package/material/index.js +0 -2
  77. package/models/api/gridApiCommon.d.ts +3 -3
  78. package/models/api/gridCoreApi.d.ts +1 -5
  79. package/models/events/gridEventLookup.d.ts +6 -0
  80. package/models/gridHeaderFilteringModel.d.ts +1 -0
  81. package/models/gridSlotsComponent.d.ts +0 -5
  82. package/models/gridStateCommunity.d.ts +2 -0
  83. package/models/params/gridScrollParams.d.ts +5 -3
  84. package/models/props/DataGridProps.d.ts +35 -1
  85. package/modern/DataGrid/DataGrid.js +44 -0
  86. package/modern/DataGrid/useDataGridComponent.js +3 -0
  87. package/modern/DataGrid/useDataGridProps.js +3 -2
  88. package/modern/components/GridColumnHeaders.js +6 -17
  89. package/modern/components/GridHeaders.js +1 -4
  90. package/modern/components/GridPagination.js +2 -4
  91. package/modern/components/GridRow.js +4 -19
  92. package/modern/components/GridScrollArea.js +150 -0
  93. package/modern/components/cell/GridCell.js +11 -3
  94. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  95. package/modern/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  96. package/modern/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  97. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  98. package/modern/components/containers/GridRootStyles.js +12 -20
  99. package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
  100. package/modern/components/virtualization/GridVirtualScroller.js +6 -1
  101. package/modern/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  102. package/modern/constants/gridClasses.js +1 -1
  103. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +184 -97
  104. package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
  105. package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
  106. package/modern/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  107. package/modern/hooks/features/columnResize/index.js +3 -0
  108. package/modern/hooks/features/columnResize/useGridColumnResize.js +553 -0
  109. package/modern/hooks/features/columns/gridColumnsUtils.js +4 -1
  110. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -5
  111. package/modern/hooks/features/editing/useGridCellEditing.js +21 -2
  112. package/modern/hooks/features/export/useGridPrintExport.js +8 -7
  113. package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
  114. package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  115. package/modern/hooks/features/index.js +1 -0
  116. package/modern/hooks/features/pagination/gridPaginationSelector.js +8 -2
  117. package/modern/hooks/features/pagination/useGridPagination.js +8 -149
  118. package/modern/hooks/features/pagination/useGridPaginationModel.js +165 -0
  119. package/modern/hooks/features/pagination/useGridRowCount.js +94 -0
  120. package/modern/hooks/features/scroll/useGridScroll.js +1 -1
  121. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  122. package/modern/hooks/utils/useLazyRef.js +1 -11
  123. package/modern/hooks/utils/useOnMount.js +1 -7
  124. package/modern/hooks/utils/useTimeout.js +1 -36
  125. package/modern/index.js +1 -1
  126. package/modern/internals/index.js +1 -1
  127. package/modern/internals/utils/getPinnedCellOffset.js +17 -0
  128. package/modern/joy/joySlots.js +11 -50
  129. package/modern/locales/jaJP.js +3 -4
  130. package/modern/material/index.js +0 -2
  131. package/modern/utils/cellBorderUtils.js +8 -0
  132. package/modern/utils/domUtils.js +144 -0
  133. package/node/DataGrid/DataGrid.js +44 -0
  134. package/node/DataGrid/useDataGridComponent.js +3 -0
  135. package/node/DataGrid/useDataGridProps.js +3 -2
  136. package/node/components/GridColumnHeaders.js +6 -16
  137. package/node/components/GridHeaders.js +1 -4
  138. package/node/components/GridPagination.js +1 -3
  139. package/node/components/GridRow.js +3 -18
  140. package/node/components/GridScrollArea.js +158 -0
  141. package/node/components/cell/GridCell.js +12 -4
  142. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  143. package/node/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  144. package/node/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  145. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  146. package/node/components/containers/GridRootStyles.js +12 -20
  147. package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
  148. package/node/components/virtualization/GridVirtualScroller.js +6 -1
  149. package/node/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  150. package/node/constants/gridClasses.js +1 -1
  151. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +190 -103
  152. package/node/hooks/features/columnResize/columnResizeSelector.js +10 -0
  153. package/node/hooks/features/columnResize/columnResizeState.js +5 -0
  154. package/node/hooks/features/columnResize/gridColumnResizeApi.js +16 -0
  155. package/node/hooks/features/columnResize/index.js +38 -0
  156. package/node/hooks/features/columnResize/useGridColumnResize.js +564 -0
  157. package/node/hooks/features/columns/gridColumnsUtils.js +4 -1
  158. package/node/hooks/features/dimensions/useGridDimensions.js +4 -5
  159. package/node/hooks/features/editing/useGridCellEditing.js +21 -2
  160. package/node/hooks/features/export/useGridPrintExport.js +8 -7
  161. package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +4 -1
  162. package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  163. package/node/hooks/features/index.js +11 -0
  164. package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
  165. package/node/hooks/features/pagination/useGridPagination.js +9 -153
  166. package/node/hooks/features/pagination/useGridPaginationModel.js +176 -0
  167. package/node/hooks/features/pagination/useGridRowCount.js +103 -0
  168. package/node/hooks/features/scroll/useGridScroll.js +1 -1
  169. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  170. package/node/hooks/utils/useLazyRef.js +7 -13
  171. package/node/hooks/utils/useOnMount.js +8 -10
  172. package/node/hooks/utils/useTimeout.js +7 -37
  173. package/node/index.js +1 -1
  174. package/node/internals/index.js +15 -8
  175. package/node/internals/utils/getPinnedCellOffset.js +24 -0
  176. package/node/joy/joySlots.js +11 -50
  177. package/node/locales/jaJP.js +3 -4
  178. package/node/material/index.js +0 -2
  179. package/node/utils/cellBorderUtils.js +16 -0
  180. package/node/utils/domUtils.js +155 -0
  181. package/package.json +1 -1
  182. package/utils/cellBorderUtils.d.ts +3 -0
  183. package/utils/cellBorderUtils.js +8 -0
  184. package/utils/domUtils.d.ts +14 -1
  185. package/utils/domUtils.js +147 -0
  186. package/components/columnHeaders/GridColumnHeadersInner.d.ts +0 -8
  187. package/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  188. package/modern/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  189. package/node/components/columnHeaders/GridColumnHeadersInner.js +0 -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);
@@ -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 == null ? void 0 : 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,176 @@ 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
+ }) => {
204
+ var _apiRef$current$getCo, _apiRef$current$getCo2;
147
205
  const columnsToRender = getColumnsToRender(params);
148
206
  if (columnsToRender.renderedColumns.length === 0) {
149
207
  return null;
150
208
  }
151
209
  const {
210
+ renderedColumns,
152
211
  firstColumnToRender,
153
212
  lastColumnToRender
154
213
  } = 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
214
+ const rowStructure = columnGroupsHeaderStructure[depth];
215
+ const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
216
+ const firstGroupToRender = (_apiRef$current$getCo = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo : null;
217
+ const firstGroupIndex = rowStructure.findIndex(({
218
+ groupId,
219
+ columnFields
220
+ }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
221
+ const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
222
+ const lastGroupToRender = (_apiRef$current$getCo2 = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo2 : null;
223
+ const lastGroupIndex = rowStructure.findIndex(({
224
+ groupId,
225
+ columnFields
226
+ }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
227
+ const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
228
+ return _extends({}, groupStructure, {
229
+ columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
205
230
  });
206
- }
207
- headerToRender.forEach((depthInfo, depthIndex) => {
208
- const children = depthInfo.elements.map(({
231
+ }).filter(groupStructure => groupStructure.columnFields.length > 0);
232
+ const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
233
+ const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
234
+ const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
235
+ var _column$computedWidth;
236
+ const column = apiRef.current.getColumn(field);
237
+ return acc + ((_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0);
238
+ }, 0);
239
+ let columnIndex = firstColumnToRender;
240
+ const children = visibleColumnGroupHeader.map(({
241
+ groupId,
242
+ columnFields
243
+ }, index) => {
244
+ const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
245
+ const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
246
+ const headerInfo = {
209
247
  groupId,
210
- width,
211
- fields,
212
- colIndex,
248
+ width: columnFields.reduce((acc, field) => acc + apiRef.current.getColumn(field).computedWidth, 0),
249
+ fields: columnFields,
250
+ colIndex: columnIndex,
213
251
  hasFocus,
214
252
  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);
253
+ };
254
+ const pinnedPosition = params.position;
255
+ const style = getCellOffsetStyle({
256
+ pinnedPosition,
257
+ columnIndex,
258
+ computedWidth: headerInfo.width
228
259
  });
229
- columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
260
+ columnIndex += columnFields.length;
261
+ let indexInSection = index;
262
+ if (pinnedPosition === 'left') {
263
+ // Group headers can expand to multiple columns, we need to adjust the index
264
+ indexInSection = columnIndex - 1;
265
+ }
266
+ return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
267
+ groupId: groupId,
268
+ width: headerInfo.width,
269
+ fields: headerInfo.fields,
270
+ colIndex: headerInfo.colIndex,
271
+ depth: depth,
272
+ isLastColumn: headerInfo.colIndex === visibleColumns.length - headerInfo.fields.length,
273
+ maxDepth: headerGroupingMaxDepth,
274
+ height: dimensions.headerHeight,
275
+ hasFocus: hasFocus,
276
+ tabIndex: tabIndex,
277
+ pinnedPosition: pinnedPosition,
278
+ style: style,
279
+ indexInSection: indexInSection,
280
+ sectionLength: renderedColumns.length
281
+ }, index);
282
+ });
283
+ return getFillers(params, children, leftOverflow);
284
+ };
285
+ const getColumnGroupHeadersRows = () => {
286
+ if (headerGroupingMaxDepth === 0) {
287
+ return null;
288
+ }
289
+ const headerRows = [];
290
+ for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
291
+ headerRows.push( /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
230
292
  role: "row",
231
- "aria-rowindex": depthIndex + 1,
293
+ "aria-rowindex": depth + 1,
232
294
  ownerState: rootProps,
233
- children: getFillers(params, children, depthInfo.leftOverflow)
234
- }, depthIndex));
235
- });
236
- return columns;
295
+ children: [leftRenderContext && getColumnGroupHeaders({
296
+ depth,
297
+ params: {
298
+ position: GridPinnedColumnPosition.LEFT,
299
+ renderContext: leftRenderContext,
300
+ minFirstColumn: leftRenderContext.firstColumnIndex,
301
+ maxLastColumn: leftRenderContext.lastColumnIndex
302
+ }
303
+ }), getColumnGroupHeaders({
304
+ depth,
305
+ params: {
306
+ renderContext
307
+ }
308
+ }), rightRenderContext && getColumnGroupHeaders({
309
+ depth,
310
+ params: {
311
+ position: GridPinnedColumnPosition.RIGHT,
312
+ renderContext: rightRenderContext,
313
+ minFirstColumn: rightRenderContext.firstColumnIndex,
314
+ maxLastColumn: rightRenderContext.lastColumnIndex
315
+ }
316
+ })]
317
+ }, depth));
318
+ }
319
+ return headerRows;
237
320
  };
238
321
  return {
239
322
  renderContext,
323
+ leftRenderContext,
324
+ rightRenderContext,
325
+ pinnedColumns,
326
+ visibleColumns,
327
+ getCellOffsetStyle,
240
328
  getFillers,
241
- getColumnHeaders,
329
+ getColumnHeadersRow,
242
330
  getColumnsToRender,
243
- getColumnGroupHeaders,
331
+ getColumnGroupHeadersRows,
244
332
  isDragging: !!dragCol,
245
333
  getInnerProps: () => ({
246
- ref: handleInnerRef,
247
334
  role: 'rowgroup'
248
335
  })
249
336
  };
@@ -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;