@mui/x-data-grid 5.15.3 → 5.16.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.
- package/CHANGELOG.md +56 -0
- package/DataGrid/DataGrid.js +2 -0
- package/DataGrid/useDataGridComponent.js +5 -0
- package/components/DataGridColumnHeaders.js +4 -3
- package/components/GridRow.js +5 -3
- package/components/base/GridBody.js +8 -5
- package/components/base/GridOverlays.js +3 -3
- package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
- package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
- package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
- package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
- package/components/containers/GridRoot.js +3 -3
- package/components/containers/GridRootStyles.js +14 -2
- package/components/panel/GridPanel.d.ts +1 -1
- package/constants/gridClasses.d.ts +16 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
- package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
- package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
- package/hooks/features/columnGrouping/index.d.ts +2 -0
- package/hooks/features/columnGrouping/index.js +2 -0
- package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
- package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
- package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
- package/hooks/features/density/densitySelector.d.ts +2 -0
- package/hooks/features/density/densitySelector.js +3 -1
- package/hooks/features/density/densityState.d.ts +1 -0
- package/hooks/features/density/useGridDensity.d.ts +1 -1
- package/hooks/features/density/useGridDensity.js +45 -9
- package/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/hooks/features/export/useGridPrintExport.js +3 -3
- package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
- package/hooks/features/index.d.ts +1 -0
- package/hooks/features/index.js +1 -0
- package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
- package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
- package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
- package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
- package/hooks/utils/useGridVisibleRows.d.ts +2 -2
- package/index.js +1 -1
- package/internals/index.d.ts +2 -0
- package/internals/index.js +2 -0
- package/legacy/DataGrid/DataGrid.js +2 -0
- package/legacy/DataGrid/useDataGridComponent.js +5 -0
- package/legacy/components/DataGridColumnHeaders.js +4 -3
- package/legacy/components/GridRow.js +4 -3
- package/legacy/components/base/GridBody.js +8 -5
- package/legacy/components/base/GridOverlays.js +3 -3
- package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
- package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
- package/legacy/components/containers/GridRoot.js +3 -3
- package/legacy/components/containers/GridRootStyles.js +11 -2
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
- package/legacy/hooks/features/columnGrouping/index.js +2 -0
- package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
- package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
- package/legacy/hooks/features/density/densitySelector.js +6 -0
- package/legacy/hooks/features/density/useGridDensity.js +44 -6
- package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
- package/legacy/hooks/features/index.js +1 -0
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +2 -0
- package/legacy/models/api/gridColumnGroupingApi.js +1 -0
- package/legacy/models/gridColumnGrouping.js +6 -0
- package/legacy/models/index.js +2 -1
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridColumnGroupingApi.d.ts +19 -0
- package/models/api/gridColumnGroupingApi.js +1 -0
- package/models/api/gridDensityApi.d.ts +2 -1
- package/models/colDef/gridColDef.d.ts +15 -1
- package/models/gridColumnGrouping.d.ts +67 -0
- package/models/gridColumnGrouping.js +6 -0
- package/models/gridRows.d.ts +5 -5
- package/models/gridStateCommunity.d.ts +2 -1
- package/models/index.d.ts +1 -0
- package/models/index.js +2 -1
- package/models/props/DataGridProps.d.ts +6 -0
- package/modern/DataGrid/DataGrid.js +2 -0
- package/modern/DataGrid/useDataGridComponent.js +5 -0
- package/modern/components/DataGridColumnHeaders.js +4 -3
- package/modern/components/GridRow.js +5 -3
- package/modern/components/base/GridBody.js +8 -5
- package/modern/components/base/GridOverlays.js +3 -3
- package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
- package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
- package/modern/components/containers/GridRoot.js +3 -3
- package/modern/components/containers/GridRootStyles.js +14 -2
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
- package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
- package/modern/hooks/features/columnGrouping/index.js +2 -0
- package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
- package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
- package/modern/hooks/features/density/densitySelector.js +3 -1
- package/modern/hooks/features/density/useGridDensity.js +37 -9
- package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
- package/modern/hooks/features/export/useGridPrintExport.js +3 -3
- package/modern/hooks/features/index.js +1 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +2 -0
- package/modern/models/api/gridColumnGroupingApi.js +1 -0
- package/modern/models/gridColumnGrouping.js +6 -0
- package/modern/models/index.js +2 -1
- package/node/DataGrid/DataGrid.js +2 -0
- package/node/DataGrid/useDataGridComponent.js +7 -0
- package/node/components/DataGridColumnHeaders.js +4 -3
- package/node/components/GridRow.js +6 -3
- package/node/components/base/GridBody.js +7 -4
- package/node/components/base/GridOverlays.js +2 -2
- package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
- package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
- package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
- package/node/components/containers/GridRoot.js +4 -4
- package/node/components/containers/GridRootStyles.js +14 -2
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
- package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
- package/node/hooks/features/columnGrouping/index.js +18 -0
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
- package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
- package/node/hooks/features/density/densitySelector.js +6 -2
- package/node/hooks/features/density/useGridDensity.js +48 -9
- package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/node/hooks/features/export/useGridPrintExport.js +2 -2
- package/node/hooks/features/index.js +13 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +22 -0
- package/node/models/api/gridColumnGroupingApi.js +5 -0
- package/node/models/gridColumnGrouping.js +13 -0
- package/node/models/index.js +13 -0
- package/package.json +3 -3
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["classes", "columnMenuOpen", "colIndex", "height", "isResizing", "sortDirection", "hasFocus", "tabIndex", "separatorSide", "isDraggable", "headerComponent", "description", "elementId", "width", "columnMenuIconButton", "columnMenu", "columnTitleIconButtons", "headerClassName", "label", "resizable", "draggableContainerProps", "columnHeaderSeparatorProps", "disableHeaderSeparator"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import clsx from 'clsx';
|
|
6
|
+
import { useForkRef } from '@mui/material/utils';
|
|
7
|
+
import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
|
|
8
|
+
import { GridColumnHeaderTitle } from './GridColumnHeaderTitle';
|
|
9
|
+
import { GridColumnHeaderSeparator } from './GridColumnHeaderSeparator';
|
|
10
|
+
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
const GridGenericColumnHeaderItem = /*#__PURE__*/React.forwardRef(function GridGenericColumnHeaderItem(props, ref) {
|
|
14
|
+
const {
|
|
15
|
+
classes,
|
|
16
|
+
columnMenuOpen,
|
|
17
|
+
colIndex,
|
|
18
|
+
height,
|
|
19
|
+
isResizing,
|
|
20
|
+
sortDirection,
|
|
21
|
+
hasFocus,
|
|
22
|
+
tabIndex,
|
|
23
|
+
separatorSide,
|
|
24
|
+
isDraggable,
|
|
25
|
+
headerComponent,
|
|
26
|
+
description,
|
|
27
|
+
width,
|
|
28
|
+
columnMenuIconButton = null,
|
|
29
|
+
columnMenu = null,
|
|
30
|
+
columnTitleIconButtons = null,
|
|
31
|
+
headerClassName,
|
|
32
|
+
label,
|
|
33
|
+
resizable,
|
|
34
|
+
draggableContainerProps,
|
|
35
|
+
columnHeaderSeparatorProps,
|
|
36
|
+
disableHeaderSeparator
|
|
37
|
+
} = props,
|
|
38
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
39
|
+
|
|
40
|
+
const apiRef = useGridApiContext();
|
|
41
|
+
const rootProps = useGridRootProps();
|
|
42
|
+
const headerCellRef = React.useRef(null);
|
|
43
|
+
const [showColumnMenuIcon, setShowColumnMenuIcon] = React.useState(columnMenuOpen);
|
|
44
|
+
const handleRef = useForkRef(headerCellRef, ref);
|
|
45
|
+
let ariaSort = 'none';
|
|
46
|
+
|
|
47
|
+
if (sortDirection != null) {
|
|
48
|
+
ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
if (!showColumnMenuIcon) {
|
|
53
|
+
setShowColumnMenuIcon(columnMenuOpen);
|
|
54
|
+
}
|
|
55
|
+
}, [showColumnMenuIcon, columnMenuOpen]);
|
|
56
|
+
React.useLayoutEffect(() => {
|
|
57
|
+
const columnMenuState = apiRef.current.state.columnMenu;
|
|
58
|
+
|
|
59
|
+
if (hasFocus && !columnMenuState.open) {
|
|
60
|
+
const focusableElement = headerCellRef.current.querySelector('[tabindex="0"]');
|
|
61
|
+
const elementToFocus = focusableElement || headerCellRef.current;
|
|
62
|
+
elementToFocus == null ? void 0 : elementToFocus.focus();
|
|
63
|
+
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
64
|
+
}
|
|
65
|
+
}, [apiRef, hasFocus]);
|
|
66
|
+
return /*#__PURE__*/_jsxs("div", _extends({
|
|
67
|
+
ref: handleRef,
|
|
68
|
+
className: clsx(classes.root, headerClassName),
|
|
69
|
+
style: {
|
|
70
|
+
height,
|
|
71
|
+
width,
|
|
72
|
+
minWidth: width,
|
|
73
|
+
maxWidth: width
|
|
74
|
+
},
|
|
75
|
+
role: "columnheader",
|
|
76
|
+
tabIndex: tabIndex,
|
|
77
|
+
"aria-colindex": colIndex + 1,
|
|
78
|
+
"aria-sort": ariaSort,
|
|
79
|
+
"aria-label": headerComponent == null ? label : undefined
|
|
80
|
+
}, other, {
|
|
81
|
+
children: [/*#__PURE__*/_jsxs("div", _extends({
|
|
82
|
+
className: classes.draggableContainer,
|
|
83
|
+
draggable: isDraggable
|
|
84
|
+
}, draggableContainerProps, {
|
|
85
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
86
|
+
className: classes.titleContainer,
|
|
87
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
88
|
+
className: classes.titleContainerContent,
|
|
89
|
+
children: headerComponent !== undefined ? headerComponent : /*#__PURE__*/_jsx(GridColumnHeaderTitle, {
|
|
90
|
+
label: label,
|
|
91
|
+
description: description,
|
|
92
|
+
columnWidth: width
|
|
93
|
+
})
|
|
94
|
+
}), columnTitleIconButtons]
|
|
95
|
+
}), columnMenuIconButton]
|
|
96
|
+
})), !disableHeaderSeparator && /*#__PURE__*/_jsx(GridColumnHeaderSeparator, _extends({
|
|
97
|
+
resizable: !rootProps.disableColumnResize && !!resizable,
|
|
98
|
+
resizing: isResizing,
|
|
99
|
+
height: height,
|
|
100
|
+
side: separatorSide
|
|
101
|
+
}, columnHeaderSeparatorProps)), columnMenu]
|
|
102
|
+
}));
|
|
103
|
+
});
|
|
104
|
+
export { GridGenericColumnHeaderItem };
|
|
@@ -12,8 +12,8 @@ import { useGridSelector } from '../../hooks/utils/useGridSelector';
|
|
|
12
12
|
import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
|
|
13
13
|
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
14
14
|
import { getDataGridUtilityClass } from '../../constants/gridClasses';
|
|
15
|
+
import { gridDensityHeaderGroupingMaxDepthSelector, gridDensityValueSelector } from '../../hooks/features/density/densitySelector';
|
|
15
16
|
import { gridPinnedRowsCountSelector, gridRowCountSelector } from '../../hooks/features/rows/gridRowsSelector';
|
|
16
|
-
import { gridDensityValueSelector } from '../../hooks/features/density/densitySelector';
|
|
17
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
18
|
|
|
19
19
|
const useUtilityClasses = ownerState => {
|
|
@@ -41,6 +41,7 @@ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
|
|
|
41
41
|
const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
|
|
42
42
|
const totalRowCount = useGridSelector(apiRef, gridRowCountSelector);
|
|
43
43
|
const densityValue = useGridSelector(apiRef, gridDensityValueSelector);
|
|
44
|
+
const headerGroupingMaxDepth = useGridSelector(apiRef, gridDensityHeaderGroupingMaxDepthSelector);
|
|
44
45
|
const rootContainerRef = React.useRef(null);
|
|
45
46
|
const handleRef = useForkRef(rootContainerRef, ref);
|
|
46
47
|
const pinnedRowsCount = useGridSelector(apiRef, gridPinnedRowsCountSelector);
|
|
@@ -71,8 +72,7 @@ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
|
|
|
71
72
|
className: clsx(className, classes.root),
|
|
72
73
|
role: "grid",
|
|
73
74
|
"aria-colcount": visibleColumns.length,
|
|
74
|
-
"aria-rowcount":
|
|
75
|
-
,
|
|
75
|
+
"aria-rowcount": headerGroupingMaxDepth + 1 + pinnedRowsCount + totalRowCount,
|
|
76
76
|
"aria-multiselectable": !rootProps.disableMultipleSelection,
|
|
77
77
|
"aria-label": rootProps['aria-label'],
|
|
78
78
|
"aria-labelledby": rootProps['aria-labelledby']
|
|
@@ -175,13 +175,24 @@ export const GridRootStyles = styled('div', {
|
|
|
175
175
|
minWidth: 0,
|
|
176
176
|
flex: 1,
|
|
177
177
|
whiteSpace: 'nowrap',
|
|
178
|
-
|
|
178
|
+
overflow: 'hidden'
|
|
179
179
|
},
|
|
180
180
|
[`& .${gridClasses.columnHeaderTitleContainerContent}`]: {
|
|
181
181
|
overflow: 'hidden',
|
|
182
182
|
display: 'flex',
|
|
183
183
|
alignItems: 'center'
|
|
184
184
|
},
|
|
185
|
+
[`& .${gridClasses['columnHeader--filledGroup']} .${gridClasses.columnHeaderTitleContainer}`]: {
|
|
186
|
+
borderBottom: `solid ${borderColor} 1px`,
|
|
187
|
+
boxSizing: 'border-box'
|
|
188
|
+
},
|
|
189
|
+
[`& .${gridClasses['columnHeader--filledGroup']}.${gridClasses['columnHeader--showColumnBorder']} .${gridClasses.columnHeaderTitleContainer}`]: {
|
|
190
|
+
borderBottom: `none`
|
|
191
|
+
},
|
|
192
|
+
[`& .${gridClasses['columnHeader--filledGroup']}.${gridClasses['columnHeader--showColumnBorder']}`]: {
|
|
193
|
+
borderBottom: `solid ${borderColor} 1px`,
|
|
194
|
+
boxSizing: 'border-box'
|
|
195
|
+
},
|
|
185
196
|
[`& .${gridClasses.sortIcon}, & .${gridClasses.filterIcon}`]: {
|
|
186
197
|
fontSize: 'inherit'
|
|
187
198
|
},
|
|
@@ -361,7 +372,8 @@ export const GridRootStyles = styled('div', {
|
|
|
361
372
|
},
|
|
362
373
|
[`& .${gridClasses.columnHeaderDraggableContainer}`]: {
|
|
363
374
|
display: 'flex',
|
|
364
|
-
width: '100%'
|
|
375
|
+
width: '100%',
|
|
376
|
+
height: '100%'
|
|
365
377
|
},
|
|
366
378
|
[`& .${gridClasses.rowReorderCellPlaceholder}`]: {
|
|
367
379
|
display: 'none'
|
|
@@ -18,5 +18,5 @@ export interface GridPanelProps extends StandardProps<MUIStyledCommonProps<Theme
|
|
|
18
18
|
open: boolean;
|
|
19
19
|
}
|
|
20
20
|
export declare const gridPanelClasses: Record<keyof GridPanelClasses, string>;
|
|
21
|
-
declare const GridPanel: React.ForwardRefExoticComponent<Pick<GridPanelProps, "hidden" | "color" | "style" | "open" | "translate" | "transition" | "slot" | "title" | "as" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "sx" | "theme" | "classes" | "
|
|
21
|
+
declare const GridPanel: React.ForwardRefExoticComponent<Pick<GridPanelProps, "hidden" | "color" | "style" | "open" | "translate" | "transition" | "slot" | "title" | "key" | "as" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "component" | "sx" | "theme" | "classes" | "components" | "container" | "placement" | "disablePortal" | "modifiers" | "anchorEl" | "componentsProps" | "keepMounted" | "popperOptions" | "popperRef"> & React.RefAttributes<HTMLDivElement>>;
|
|
22
22
|
export { GridPanel };
|
|
@@ -111,6 +111,10 @@ export interface GridClasses {
|
|
|
111
111
|
* Styles applied to the column header element.
|
|
112
112
|
*/
|
|
113
113
|
columnHeader: string;
|
|
114
|
+
/**
|
|
115
|
+
* Styles applied to the column group header element.
|
|
116
|
+
*/
|
|
117
|
+
columnGroupHeader: string;
|
|
114
118
|
/**
|
|
115
119
|
* Styles applied to the header checkbox cell element.
|
|
116
120
|
*/
|
|
@@ -139,6 +143,18 @@ export interface GridClasses {
|
|
|
139
143
|
* Styles applied to the column header's title excepted buttons.
|
|
140
144
|
*/
|
|
141
145
|
columnHeaderTitleContainerContent: string;
|
|
146
|
+
/**
|
|
147
|
+
* Styles applied to the column group header cell if not empty.
|
|
148
|
+
*/
|
|
149
|
+
'columnHeader--filledGroup': string;
|
|
150
|
+
/**
|
|
151
|
+
* Styles applied to the empty column group header cell.
|
|
152
|
+
*/
|
|
153
|
+
'columnHeader--emptyGroup': string;
|
|
154
|
+
/**
|
|
155
|
+
* Styles applied to the column group header cell when show column border.
|
|
156
|
+
*/
|
|
157
|
+
'columnHeader--showColumnBorder': string;
|
|
142
158
|
/**
|
|
143
159
|
* Styles applied to the column headers.
|
|
144
160
|
*/
|
package/constants/gridClasses.js
CHANGED
|
@@ -2,4 +2,4 @@ import { generateUtilityClasses, generateUtilityClass } from '@mui/material';
|
|
|
2
2
|
export function getDataGridUtilityClass(slot) {
|
|
3
3
|
return generateUtilityClass('MuiDataGrid', slot);
|
|
4
4
|
}
|
|
5
|
-
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
5
|
+
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GridStateCommunity } from '../../../models/gridStateCommunity';
|
|
2
|
+
/**
|
|
3
|
+
* @category ColumnGrouping
|
|
4
|
+
* @ignore - do not document.
|
|
5
|
+
*/
|
|
6
|
+
export declare const gridColumnGroupingSelector: (state: GridStateCommunity) => import("./gridColumnGroupsInterfaces").GridColumnsGroupingState;
|
|
7
|
+
export declare const gridColumnGroupsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridColumnGroupsInterfaces").GridColumnGroupLookup>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createSelector } from '../../../utils/createSelector';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @category ColumnGrouping
|
|
5
|
+
* @ignore - do not document.
|
|
6
|
+
*/
|
|
7
|
+
export const gridColumnGroupingSelector = state => state.columnGrouping;
|
|
8
|
+
export const gridColumnGroupsLookupSelector = createSelector(gridColumnGroupingSelector, columnGrouping => columnGrouping.lookup);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
3
|
+
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
|
+
import { GridStateInitializer } from '../../utils/useGridInitializeState';
|
|
5
|
+
import { GridColumnGroupingModel, GridColumnGroup } from '../../../models/gridColumnGrouping';
|
|
6
|
+
import { GridStateColDef, GridColDef } from '../../../models/colDef';
|
|
7
|
+
export declare function hasGroupPath(lookupElement: GridColDef | GridStateColDef): lookupElement is GridStateColDef;
|
|
8
|
+
declare type UnwrappedGroupingModel = {
|
|
9
|
+
[key: GridColDef['field']]: GridColumnGroup['groupId'][];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* This is a function that provide for each column the array of its parents.
|
|
13
|
+
* Parents are ordered from the root to the leaf.
|
|
14
|
+
* @param columnGroupingModel The model such as provided in DataGrid props
|
|
15
|
+
* @returns An object `{[field]: groupIds}` where `groupIds` is the parents of the column `field`
|
|
16
|
+
*/
|
|
17
|
+
export declare const unwrapGroupingColumnModel: (columnGroupingModel?: GridColumnGroupingModel) => UnwrappedGroupingModel;
|
|
18
|
+
export declare const columnGroupsStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'columnGroupingModel'>>;
|
|
19
|
+
/**
|
|
20
|
+
* @requires useGridColumns (method, event)
|
|
21
|
+
* @requires useGridParamsApi (method)
|
|
22
|
+
*/
|
|
23
|
+
export declare const useGridColumnGrouping: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnGroupingModel' | 'experimentalFeatures'>) => void;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["groupId", "children"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { isLeaf } from '../../../models/gridColumnGrouping';
|
|
6
|
+
import { gridColumnGroupsLookupSelector } from './gridColumnGroupsSelector';
|
|
7
|
+
import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
|
|
8
|
+
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
9
|
+
export function hasGroupPath(lookupElement) {
|
|
10
|
+
return lookupElement.groupPath !== undefined;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// This is the recurrence function that help writing `unwrapGroupingColumnModel()`
|
|
14
|
+
const recurrentUnwrapGroupingColumnModel = (columnGroupNode, parents, unwrappedGroupingModelToComplet) => {
|
|
15
|
+
if (isLeaf(columnGroupNode)) {
|
|
16
|
+
if (unwrappedGroupingModelToComplet[columnGroupNode.field] !== undefined) {
|
|
17
|
+
throw new Error([`MUI: columnGroupingModel contains duplicated field`, `column field ${columnGroupNode.field} occurrs two times in the grouping model:`, `- ${unwrappedGroupingModelToComplet[columnGroupNode.field].join(' > ')}`, `- ${parents.join(' > ')}`].join('\n'));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
unwrappedGroupingModelToComplet[columnGroupNode.field] = parents;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const {
|
|
25
|
+
groupId,
|
|
26
|
+
children
|
|
27
|
+
} = columnGroupNode;
|
|
28
|
+
children.forEach(child => {
|
|
29
|
+
recurrentUnwrapGroupingColumnModel(child, [...parents, groupId], unwrappedGroupingModelToComplet);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* This is a function that provide for each column the array of its parents.
|
|
34
|
+
* Parents are ordered from the root to the leaf.
|
|
35
|
+
* @param columnGroupingModel The model such as provided in DataGrid props
|
|
36
|
+
* @returns An object `{[field]: groupIds}` where `groupIds` is the parents of the column `field`
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
export const unwrapGroupingColumnModel = columnGroupingModel => {
|
|
41
|
+
if (!columnGroupingModel) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const unwrappedSubTree = {};
|
|
46
|
+
columnGroupingModel.forEach(columnGroupNode => {
|
|
47
|
+
recurrentUnwrapGroupingColumnModel(columnGroupNode, [], unwrappedSubTree);
|
|
48
|
+
});
|
|
49
|
+
return unwrappedSubTree;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const createGroupLookup = columnGroupingModel => {
|
|
53
|
+
let groupLookup = {};
|
|
54
|
+
columnGroupingModel.forEach(node => {
|
|
55
|
+
if (isLeaf(node)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const {
|
|
60
|
+
groupId,
|
|
61
|
+
children
|
|
62
|
+
} = node,
|
|
63
|
+
other = _objectWithoutPropertiesLoose(node, _excluded);
|
|
64
|
+
|
|
65
|
+
if (!groupId) {
|
|
66
|
+
throw new Error('MUI: An element of the columnGroupingModel does not have either `field` or `groupId`.');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!children) {
|
|
70
|
+
console.warn(`MUI: group groupId=${groupId} has no children.`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const groupParam = _extends({}, other, {
|
|
74
|
+
groupId
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const subTreeLookup = createGroupLookup(children);
|
|
78
|
+
|
|
79
|
+
if (subTreeLookup[groupId] !== undefined || groupLookup[groupId] !== undefined) {
|
|
80
|
+
throw new Error(`MUI: The groupId ${groupId} is used multiple times in the columnGroupingModel.`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
groupLookup = _extends({}, groupLookup, subTreeLookup, {
|
|
84
|
+
[groupId]: groupParam
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return _extends({}, groupLookup);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const columnGroupsStateInitializer = (state, props) => {
|
|
91
|
+
var _props$columnGrouping;
|
|
92
|
+
|
|
93
|
+
const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
|
|
94
|
+
return _extends({}, state, {
|
|
95
|
+
columnGrouping: {
|
|
96
|
+
lookup: groupLookup,
|
|
97
|
+
groupCollapsedModel: {}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* @requires useGridColumns (method, event)
|
|
103
|
+
* @requires useGridParamsApi (method)
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
export const useGridColumnGrouping = (apiRef, props) => {
|
|
107
|
+
var _props$experimentalFe2;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* API METHODS
|
|
111
|
+
*/
|
|
112
|
+
const getColumnGroupPath = React.useCallback(field => {
|
|
113
|
+
var _columnLookup$field$g, _columnLookup$field;
|
|
114
|
+
|
|
115
|
+
const columnLookup = gridColumnLookupSelector(apiRef);
|
|
116
|
+
return (_columnLookup$field$g = (_columnLookup$field = columnLookup[field]) == null ? void 0 : _columnLookup$field.groupPath) != null ? _columnLookup$field$g : [];
|
|
117
|
+
}, [apiRef]);
|
|
118
|
+
const getAllGroupDetails = React.useCallback(() => {
|
|
119
|
+
const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
|
|
120
|
+
return columnGroupLookup;
|
|
121
|
+
}, [apiRef]);
|
|
122
|
+
const columnGroupingApi = {
|
|
123
|
+
unstable_getColumnGroupPath: getColumnGroupPath,
|
|
124
|
+
unstable_getAllGroupDetails: getAllGroupDetails
|
|
125
|
+
};
|
|
126
|
+
useGridApiMethod(apiRef, columnGroupingApi, 'GridColumnGroupingApi');
|
|
127
|
+
/**
|
|
128
|
+
* EFFECTS
|
|
129
|
+
*/
|
|
130
|
+
// The effect does not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`
|
|
131
|
+
// As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
|
|
132
|
+
|
|
133
|
+
const isFirstRender = React.useRef(true);
|
|
134
|
+
React.useEffect(() => {
|
|
135
|
+
var _props$experimentalFe, _props$columnGrouping2;
|
|
136
|
+
|
|
137
|
+
if (isFirstRender.current) {
|
|
138
|
+
isFirstRender.current = false;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const groupLookup = createGroupLookup((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
|
|
147
|
+
apiRef.current.setState(state => _extends({}, state, {
|
|
148
|
+
columnGrouping: _extends({}, state.columnGrouping, {
|
|
149
|
+
lookup: groupLookup
|
|
150
|
+
})
|
|
151
|
+
}));
|
|
152
|
+
}, [apiRef, props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
|
|
153
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
3
|
+
import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
4
|
+
export declare const useGridColumnGroupingPreProcessors: (apiRef: React.MutableRefObject<GridApiCommunity>, props: DataGridProcessedProps) => void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
4
|
+
import { isDeepEqual } from '../../../utils/utils';
|
|
5
|
+
import { unwrapGroupingColumnModel, hasGroupPath } from './useGridColumnGrouping';
|
|
6
|
+
export const useGridColumnGroupingPreProcessors = (apiRef, props) => {
|
|
7
|
+
var _props$experimentalFe2;
|
|
8
|
+
|
|
9
|
+
const addHeaderGroups = React.useCallback(columnsState => {
|
|
10
|
+
var _props$experimentalFe;
|
|
11
|
+
|
|
12
|
+
if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
|
|
13
|
+
return columnsState;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel);
|
|
17
|
+
columnsState.all.forEach(field => {
|
|
18
|
+
var _unwrappedGroupingMod, _unwrappedGroupingMod2;
|
|
19
|
+
|
|
20
|
+
const newGroupPath = (_unwrappedGroupingMod = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod : [];
|
|
21
|
+
const lookupElement = columnsState.lookup[field];
|
|
22
|
+
|
|
23
|
+
if (hasGroupPath(lookupElement) && isDeepEqual(newGroupPath, lookupElement == null ? void 0 : lookupElement.groupPath)) {
|
|
24
|
+
// Avoid modifying the pointer to allow shadow comparison in https://github.com/mui/mui-x/blob/f90afbf10a1264ee8b453d7549dd7cdd6110a4ed/packages/grid/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts#L446:L453
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
columnsState.lookup[field] = _extends({}, columnsState.lookup[field], {
|
|
29
|
+
groupPath: (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod2 : []
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return columnsState;
|
|
33
|
+
}, [props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
|
|
34
|
+
useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', addHeaderGroups);
|
|
35
|
+
};
|
|
@@ -4,13 +4,15 @@ interface UseGridColumnHeadersProps {
|
|
|
4
4
|
innerRef?: React.Ref<HTMLDivElement>;
|
|
5
5
|
minColumnIndex?: number;
|
|
6
6
|
}
|
|
7
|
+
interface GetHeadersParams {
|
|
8
|
+
renderContext: GridRenderContext | null;
|
|
9
|
+
minFirstColumn?: number;
|
|
10
|
+
maxLastColumn?: number;
|
|
11
|
+
}
|
|
7
12
|
export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) => {
|
|
8
13
|
renderContext: GridRenderContext | null;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
minFirstColumn?: number | undefined;
|
|
12
|
-
maxLastColumn?: number | undefined;
|
|
13
|
-
} | undefined, other?: {}) => JSX.Element[] | null;
|
|
14
|
+
getColumnHeaders: (params?: GetHeadersParams, other?: {}) => JSX.Element | null;
|
|
15
|
+
getColumnGroupHeaders: (params?: GetHeadersParams) => JSX.Element[] | null;
|
|
14
16
|
isDragging: boolean;
|
|
15
17
|
getRootProps: (other?: {}) => {
|
|
16
18
|
style: {
|
|
@@ -21,7 +23,6 @@ export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) =>
|
|
|
21
23
|
};
|
|
22
24
|
getInnerProps: () => {
|
|
23
25
|
ref: React.Ref<HTMLDivElement>;
|
|
24
|
-
'aria-rowindex': number;
|
|
25
26
|
role: string;
|
|
26
27
|
};
|
|
27
28
|
};
|