@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.
- package/CHANGELOG.md +117 -1
- package/DataGrid/DataGrid.js +44 -0
- package/DataGrid/useDataGridComponent.js +3 -0
- package/DataGrid/useDataGridProps.js +3 -2
- package/components/GridColumnHeaders.d.ts +1 -2
- package/components/GridColumnHeaders.js +6 -17
- package/components/GridHeaders.js +1 -4
- package/components/GridPagination.js +2 -7
- package/components/GridRow.d.ts +1 -1
- package/components/GridRow.js +4 -19
- package/components/GridScrollArea.d.ts +10 -0
- package/components/GridScrollArea.js +150 -0
- package/components/cell/GridCell.d.ts +7 -0
- package/components/cell/GridCell.js +11 -3
- package/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -0
- package/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -0
- package/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -0
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/components/containers/GridRootStyles.js +12 -20
- package/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/components/virtualization/GridVirtualScroller.js +6 -1
- package/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/constants/gridClasses.d.ts +6 -32
- package/constants/gridClasses.js +1 -1
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +23 -7
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -99
- package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
- package/hooks/features/columnResize/columnResizeSelector.js +3 -0
- package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
- package/hooks/features/columnResize/columnResizeState.js +1 -0
- package/hooks/features/columnResize/gridColumnResizeApi.d.ts +44 -0
- package/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
- package/hooks/features/columnResize/index.d.ts +3 -0
- package/hooks/features/columnResize/index.js +3 -0
- package/hooks/features/columnResize/useGridColumnResize.d.ts +10 -0
- package/hooks/features/columnResize/useGridColumnResize.js +563 -0
- package/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/hooks/features/dimensions/useGridDimensions.js +4 -5
- package/hooks/features/editing/useGridCellEditing.js +21 -2
- package/hooks/features/export/useGridPrintExport.js +8 -7
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +1 -0
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +6 -0
- package/hooks/features/headerFiltering/useGridHeaderFiltering.js +30 -7
- package/hooks/features/index.d.ts +1 -0
- package/hooks/features/index.js +1 -0
- package/hooks/features/pagination/gridPaginationInterfaces.d.ts +19 -2
- package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
- package/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/hooks/features/pagination/useGridPagination.d.ts +1 -6
- package/hooks/features/pagination/useGridPagination.js +9 -157
- package/hooks/features/pagination/useGridPaginationModel.d.ts +11 -0
- package/hooks/features/pagination/useGridPaginationModel.js +170 -0
- package/hooks/features/pagination/useGridRowCount.d.ts +8 -0
- package/hooks/features/pagination/useGridRowCount.js +97 -0
- package/hooks/features/scroll/useGridScroll.js +1 -1
- package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +4 -4
- package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
- package/hooks/utils/useLazyRef.d.ts +1 -2
- package/hooks/utils/useLazyRef.js +1 -11
- package/hooks/utils/useOnMount.d.ts +1 -2
- package/hooks/utils/useOnMount.js +1 -7
- package/hooks/utils/useTimeout.d.ts +1 -11
- package/hooks/utils/useTimeout.js +1 -36
- package/index.js +1 -1
- package/internals/index.d.ts +1 -1
- package/internals/index.js +1 -1
- package/internals/utils/getPinnedCellOffset.d.ts +3 -0
- package/internals/utils/getPinnedCellOffset.js +17 -0
- package/joy/joySlots.js +13 -52
- package/locales/jaJP.js +3 -4
- package/material/index.js +0 -2
- package/models/api/gridApiCommon.d.ts +3 -3
- package/models/api/gridCoreApi.d.ts +1 -5
- package/models/events/gridEventLookup.d.ts +6 -0
- package/models/gridHeaderFilteringModel.d.ts +1 -0
- package/models/gridSlotsComponent.d.ts +0 -5
- package/models/gridStateCommunity.d.ts +2 -0
- package/models/params/gridScrollParams.d.ts +5 -3
- package/models/props/DataGridProps.d.ts +35 -1
- package/modern/DataGrid/DataGrid.js +44 -0
- package/modern/DataGrid/useDataGridComponent.js +3 -0
- package/modern/DataGrid/useDataGridProps.js +3 -2
- package/modern/components/GridColumnHeaders.js +6 -17
- package/modern/components/GridHeaders.js +1 -4
- package/modern/components/GridPagination.js +2 -4
- package/modern/components/GridRow.js +4 -19
- package/modern/components/GridScrollArea.js +150 -0
- package/modern/components/cell/GridCell.js +11 -3
- package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/modern/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/modern/components/containers/GridRootStyles.js +12 -20
- package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/modern/components/virtualization/GridVirtualScroller.js +6 -1
- package/modern/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +184 -97
- package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
- package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
- package/modern/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
- package/modern/hooks/features/columnResize/index.js +3 -0
- package/modern/hooks/features/columnResize/useGridColumnResize.js +553 -0
- package/modern/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/modern/hooks/features/dimensions/useGridDimensions.js +4 -5
- package/modern/hooks/features/editing/useGridCellEditing.js +21 -2
- package/modern/hooks/features/export/useGridPrintExport.js +8 -7
- package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
- package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
- package/modern/hooks/features/index.js +1 -0
- package/modern/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/modern/hooks/features/pagination/useGridPagination.js +8 -149
- package/modern/hooks/features/pagination/useGridPaginationModel.js +165 -0
- package/modern/hooks/features/pagination/useGridRowCount.js +94 -0
- package/modern/hooks/features/scroll/useGridScroll.js +1 -1
- package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/modern/hooks/utils/useLazyRef.js +1 -11
- package/modern/hooks/utils/useOnMount.js +1 -7
- package/modern/hooks/utils/useTimeout.js +1 -36
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -1
- package/modern/internals/utils/getPinnedCellOffset.js +17 -0
- package/modern/joy/joySlots.js +11 -50
- package/modern/locales/jaJP.js +3 -4
- package/modern/material/index.js +0 -2
- package/modern/utils/cellBorderUtils.js +8 -0
- package/modern/utils/domUtils.js +144 -0
- package/node/DataGrid/DataGrid.js +44 -0
- package/node/DataGrid/useDataGridComponent.js +3 -0
- package/node/DataGrid/useDataGridProps.js +3 -2
- package/node/components/GridColumnHeaders.js +6 -16
- package/node/components/GridHeaders.js +1 -4
- package/node/components/GridPagination.js +1 -3
- package/node/components/GridRow.js +3 -18
- package/node/components/GridScrollArea.js +158 -0
- package/node/components/cell/GridCell.js +12 -4
- package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/node/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/node/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/node/components/containers/GridRootStyles.js +12 -20
- package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/node/components/virtualization/GridVirtualScroller.js +6 -1
- package/node/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +190 -103
- package/node/hooks/features/columnResize/columnResizeSelector.js +10 -0
- package/node/hooks/features/columnResize/columnResizeState.js +5 -0
- package/node/hooks/features/columnResize/gridColumnResizeApi.js +16 -0
- package/node/hooks/features/columnResize/index.js +38 -0
- package/node/hooks/features/columnResize/useGridColumnResize.js +564 -0
- package/node/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/node/hooks/features/dimensions/useGridDimensions.js +4 -5
- package/node/hooks/features/editing/useGridCellEditing.js +21 -2
- package/node/hooks/features/export/useGridPrintExport.js +8 -7
- package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +4 -1
- package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
- package/node/hooks/features/index.js +11 -0
- package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/node/hooks/features/pagination/useGridPagination.js +9 -153
- package/node/hooks/features/pagination/useGridPaginationModel.js +176 -0
- package/node/hooks/features/pagination/useGridRowCount.js +103 -0
- package/node/hooks/features/scroll/useGridScroll.js +1 -1
- package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/node/hooks/utils/useLazyRef.js +7 -13
- package/node/hooks/utils/useOnMount.js +8 -10
- package/node/hooks/utils/useTimeout.js +7 -37
- package/node/index.js +1 -1
- package/node/internals/index.js +15 -8
- package/node/internals/utils/getPinnedCellOffset.js +24 -0
- package/node/joy/joySlots.js +11 -50
- package/node/locales/jaJP.js +3 -4
- package/node/material/index.js +0 -2
- package/node/utils/cellBorderUtils.js +16 -0
- package/node/utils/domUtils.js +155 -0
- package/package.json +1 -1
- package/utils/cellBorderUtils.d.ts +3 -0
- package/utils/cellBorderUtils.js +8 -0
- package/utils/domUtils.d.ts +14 -1
- package/utils/domUtils.js +147 -0
- package/components/columnHeaders/GridColumnHeadersInner.d.ts +0 -8
- package/components/columnHeaders/GridColumnHeadersInner.js +0 -58
- package/modern/components/columnHeaders/GridColumnHeadersInner.js +0 -58
- 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.
|
|
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(
|
|
103
|
-
|
|
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
|
|
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:
|
|
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 =
|
|
144
|
-
|
|
145
|
-
|
|
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
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
208
|
-
|
|
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
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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
|
-
|
|
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":
|
|
293
|
+
"aria-rowindex": depth + 1,
|
|
232
294
|
ownerState: rootProps,
|
|
233
|
-
children:
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
329
|
+
getColumnHeadersRow,
|
|
242
330
|
getColumnsToRender,
|
|
243
|
-
|
|
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 @@
|
|
|
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
|
+
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;
|