@mui/x-data-grid 5.15.2 → 5.17.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 +177 -2
- package/DataGrid/DataGrid.js +3 -1
- package/DataGrid/useDataGridComponent.js +5 -0
- package/README.md +2 -1
- package/components/DataGridColumnHeaders.js +4 -3
- package/components/ErrorBoundary.d.ts +1 -0
- package/components/GridAutoSizer.js +7 -0
- package/components/GridRow.d.ts +2 -1
- package/components/GridRow.js +136 -85
- package/components/base/GridBody.js +8 -5
- package/components/base/GridOverlays.js +4 -7
- package/components/cell/GridActionsCellItem.d.ts +2 -2
- package/components/cell/GridBooleanCell.js +2 -1
- package/components/cell/GridEditBooleanCell.js +2 -1
- package/components/cell/GridEditDateCell.js +3 -2
- package/components/cell/GridEditInputCell.js +2 -1
- package/components/cell/GridEditSingleSelectCell.js +11 -2
- package/components/cell/GridSkeletonCell.d.ts +12 -0
- package/components/cell/GridSkeletonCell.js +60 -0
- package/components/cell/index.d.ts +1 -0
- package/components/cell/index.js +2 -1
- 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/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/components/containers/GridOverlay.js +7 -1
- package/components/containers/GridRoot.js +3 -3
- package/components/containers/GridRootStyles.js +16 -2
- package/components/menu/GridMenu.d.ts +3 -2
- package/components/menu/GridMenu.js +1 -0
- package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
- package/components/panel/GridColumnsPanel.d.ts +6 -1
- package/components/panel/GridColumnsPanel.js +38 -6
- package/components/panel/GridPanel.d.ts +1 -1
- package/components/panel/GridPanel.js +1 -0
- package/components/panel/filterPanel/GridFilterForm.d.ts +4 -0
- package/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterPanel.d.ts +4 -0
- package/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
- package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
- package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/constants/gridClasses.d.ts +24 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -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/filter/gridFilterUtils.d.ts +1 -1
- package/hooks/features/filter/gridFilterUtils.js +55 -54
- package/hooks/features/filter/useGridFilter.js +1 -1
- 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/rows/useGridParamsApi.js +1 -1
- package/hooks/features/rows/useGridRows.js +65 -8
- package/hooks/features/rows/useGridRowsMeta.js +36 -16
- 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 +2 -2
- package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
- package/hooks/utils/useGridNativeEventListener.js +2 -2
- 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 +3 -1
- package/legacy/DataGrid/useDataGridComponent.js +5 -0
- package/legacy/components/DataGridColumnHeaders.js +4 -3
- package/legacy/components/GridAutoSizer.js +7 -0
- package/legacy/components/GridRow.js +138 -85
- package/legacy/components/base/GridBody.js +8 -5
- package/legacy/components/base/GridOverlays.js +4 -7
- package/legacy/components/cell/GridBooleanCell.js +2 -1
- package/legacy/components/cell/GridEditBooleanCell.js +2 -1
- package/legacy/components/cell/GridEditDateCell.js +3 -2
- package/legacy/components/cell/GridEditInputCell.js +2 -1
- package/legacy/components/cell/GridEditSingleSelectCell.js +11 -2
- package/legacy/components/cell/GridSkeletonCell.js +57 -0
- package/legacy/components/cell/index.js +2 -1
- 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/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/legacy/components/containers/GridOverlay.js +7 -1
- package/legacy/components/containers/GridRoot.js +3 -3
- package/legacy/components/containers/GridRootStyles.js +14 -5
- package/legacy/components/menu/GridMenu.js +1 -0
- package/legacy/components/panel/GridColumnsPanel.js +41 -6
- package/legacy/components/panel/GridPanel.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/legacy/constants/defaultGridSlotsComponents.js +2 -1
- 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/filter/gridFilterUtils.js +61 -56
- package/legacy/hooks/features/filter/useGridFilter.js +1 -1
- package/legacy/hooks/features/index.js +1 -0
- package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
- package/legacy/hooks/features/rows/useGridRows.js +73 -8
- package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
- package/legacy/hooks/utils/useGridNativeEventListener.js +2 -2
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +2 -0
- package/legacy/models/api/gridColumnGroupingApi.js +1 -0
- package/legacy/models/events/gridEvents.js +2 -0
- package/legacy/models/gridColumnGrouping.js +6 -0
- package/legacy/models/index.js +2 -1
- package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/legacy/models/params/index.js +2 -1
- package/legacy/utils/utils.js +18 -0
- 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/api/gridParamsApi.d.ts +1 -1
- package/models/api/gridRowApi.d.ts +6 -0
- package/models/api/gridRowsMetaApi.d.ts +6 -1
- package/models/colDef/gridColDef.d.ts +15 -1
- package/models/events/gridEventLookup.d.ts +7 -1
- package/models/events/gridEvents.d.ts +3 -1
- package/models/events/gridEvents.js +2 -0
- package/models/gridColumnGrouping.d.ts +67 -0
- package/models/gridColumnGrouping.js +6 -0
- package/models/gridRows.d.ts +5 -5
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridStateCommunity.d.ts +2 -1
- package/models/index.d.ts +1 -0
- package/models/index.js +2 -1
- package/models/params/gridCellParams.d.ts +7 -2
- package/models/params/gridMenuParams.d.ts +1 -2
- package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
- package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/models/params/index.d.ts +1 -0
- package/models/params/index.js +2 -1
- package/models/props/DataGridProps.d.ts +7 -1
- package/modern/DataGrid/DataGrid.js +3 -1
- package/modern/DataGrid/useDataGridComponent.js +5 -0
- package/modern/components/DataGridColumnHeaders.js +4 -3
- package/modern/components/GridAutoSizer.js +7 -0
- package/modern/components/GridRow.js +133 -84
- package/modern/components/base/GridBody.js +8 -5
- package/modern/components/base/GridOverlays.js +4 -7
- package/modern/components/cell/GridBooleanCell.js +2 -1
- package/modern/components/cell/GridEditBooleanCell.js +2 -1
- package/modern/components/cell/GridEditDateCell.js +3 -2
- package/modern/components/cell/GridEditInputCell.js +2 -1
- package/modern/components/cell/GridEditSingleSelectCell.js +11 -2
- package/modern/components/cell/GridSkeletonCell.js +60 -0
- package/modern/components/cell/index.js +2 -1
- 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/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/modern/components/containers/GridOverlay.js +7 -1
- package/modern/components/containers/GridRoot.js +3 -3
- package/modern/components/containers/GridRootStyles.js +16 -2
- package/modern/components/menu/GridMenu.js +1 -0
- package/modern/components/panel/GridColumnsPanel.js +38 -6
- package/modern/components/panel/GridPanel.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- 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/filter/gridFilterUtils.js +54 -53
- package/modern/hooks/features/filter/useGridFilter.js +1 -1
- package/modern/hooks/features/index.js +1 -0
- package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
- package/modern/hooks/features/rows/useGridRows.js +65 -8
- package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/modern/hooks/utils/useGridNativeEventListener.js +2 -2
- package/modern/index.js +1 -1
- package/modern/internals/index.js +2 -0
- package/modern/models/api/gridColumnGroupingApi.js +1 -0
- package/modern/models/events/gridEvents.js +2 -0
- package/modern/models/gridColumnGrouping.js +6 -0
- package/modern/models/index.js +2 -1
- package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
- package/modern/models/params/index.js +2 -1
- package/modern/utils/utils.js +16 -0
- package/node/DataGrid/DataGrid.js +3 -1
- package/node/DataGrid/useDataGridComponent.js +7 -0
- package/node/components/DataGridColumnHeaders.js +4 -3
- package/node/components/GridAutoSizer.js +7 -0
- package/node/components/GridRow.js +136 -77
- package/node/components/base/GridBody.js +7 -4
- package/node/components/base/GridOverlays.js +3 -6
- package/node/components/cell/GridBooleanCell.js +2 -1
- package/node/components/cell/GridEditBooleanCell.js +2 -1
- package/node/components/cell/GridEditDateCell.js +3 -2
- package/node/components/cell/GridEditInputCell.js +2 -1
- package/node/components/cell/GridEditSingleSelectCell.js +11 -2
- package/node/components/cell/GridSkeletonCell.js +81 -0
- package/node/components/cell/index.js +13 -0
- 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/columnSelection/GridCellCheckboxRenderer.js +2 -1
- package/node/components/containers/GridOverlay.js +7 -1
- package/node/components/containers/GridRoot.js +4 -4
- package/node/components/containers/GridRootStyles.js +16 -2
- package/node/components/menu/GridMenu.js +1 -0
- package/node/components/panel/GridColumnsPanel.js +36 -5
- package/node/components/panel/GridPanel.js +1 -0
- package/node/components/panel/filterPanel/GridFilterForm.js +5 -0
- package/node/components/panel/filterPanel/GridFilterPanel.js +5 -0
- package/node/constants/defaultGridSlotsComponents.js +1 -0
- 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/filter/gridFilterUtils.js +55 -55
- package/node/hooks/features/filter/useGridFilter.js +1 -1
- package/node/hooks/features/index.js +13 -0
- package/node/hooks/features/rows/useGridParamsApi.js +1 -1
- package/node/hooks/features/rows/useGridRows.js +60 -7
- package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
- package/node/hooks/utils/useGridNativeEventListener.js +2 -2
- package/node/index.js +1 -1
- package/node/internals/index.js +22 -0
- package/node/models/api/gridColumnGroupingApi.js +5 -0
- package/node/models/events/gridEvents.js +2 -0
- package/node/models/gridColumnGrouping.js +13 -0
- package/node/models/index.js +13 -0
- package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
- package/node/models/params/index.js +13 -0
- package/node/utils/utils.js +18 -0
- package/package.json +3 -3
- package/utils/utils.d.ts +1 -0
- package/utils/utils.js +16 -0
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
2
4
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
5
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
|
+
var _excluded = ["sort"];
|
|
4
7
|
import * as React from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
5
9
|
import { unstable_composeClasses as composeClasses } from '@mui/material';
|
|
6
10
|
import IconButton from '@mui/material/IconButton';
|
|
7
11
|
import { switchClasses } from '@mui/material/Switch';
|
|
@@ -60,7 +64,9 @@ var GridColumnsPanelRowRoot = styled('div', {
|
|
|
60
64
|
var GridIconButtonRoot = styled(IconButton)({
|
|
61
65
|
justifyContent: 'flex-end'
|
|
62
66
|
});
|
|
63
|
-
|
|
67
|
+
var collator = new Intl.Collator();
|
|
68
|
+
|
|
69
|
+
function GridColumnsPanel(props) {
|
|
64
70
|
var _rootProps$components, _rootProps$components3, _rootProps$components4;
|
|
65
71
|
|
|
66
72
|
var apiRef = useGridApiContext();
|
|
@@ -79,6 +85,26 @@ export function GridColumnsPanel(props) {
|
|
|
79
85
|
};
|
|
80
86
|
var classes = useUtilityClasses(ownerState);
|
|
81
87
|
|
|
88
|
+
var sort = props.sort,
|
|
89
|
+
other = _objectWithoutProperties(props, _excluded);
|
|
90
|
+
|
|
91
|
+
var sortedColumns = React.useMemo(function () {
|
|
92
|
+
switch (sort) {
|
|
93
|
+
case 'asc':
|
|
94
|
+
return _toConsumableArray(columns).sort(function (a, b) {
|
|
95
|
+
return collator.compare(a.headerName || a.field, b.headerName || b.field);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
case 'desc':
|
|
99
|
+
return _toConsumableArray(columns).sort(function (a, b) {
|
|
100
|
+
return -collator.compare(a.headerName || a.field, b.headerName || b.field);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
default:
|
|
104
|
+
return columns;
|
|
105
|
+
}
|
|
106
|
+
}, [columns, sort]);
|
|
107
|
+
|
|
82
108
|
var toggleColumn = function toggleColumn(event) {
|
|
83
109
|
var _ref3 = event.target,
|
|
84
110
|
field = _ref3.name;
|
|
@@ -115,18 +141,18 @@ export function GridColumnsPanel(props) {
|
|
|
115
141
|
}, []);
|
|
116
142
|
var currentColumns = React.useMemo(function () {
|
|
117
143
|
if (!searchValue) {
|
|
118
|
-
return
|
|
144
|
+
return sortedColumns;
|
|
119
145
|
}
|
|
120
146
|
|
|
121
147
|
var searchValueToCheck = searchValue.toLowerCase();
|
|
122
|
-
return
|
|
148
|
+
return sortedColumns.filter(function (column) {
|
|
123
149
|
return (column.headerName || column.field).toLowerCase().indexOf(searchValueToCheck) > -1;
|
|
124
150
|
});
|
|
125
|
-
}, [
|
|
151
|
+
}, [sortedColumns, searchValue]);
|
|
126
152
|
React.useEffect(function () {
|
|
127
153
|
searchInputRef.current.focus();
|
|
128
154
|
}, []);
|
|
129
|
-
return /*#__PURE__*/_jsxs(GridPanelWrapper, _extends({},
|
|
155
|
+
return /*#__PURE__*/_jsxs(GridPanelWrapper, _extends({}, other, {
|
|
130
156
|
children: [/*#__PURE__*/_jsx(GridPanelHeader, {
|
|
131
157
|
children: /*#__PURE__*/_jsx(rootProps.components.BaseTextField, _extends({
|
|
132
158
|
label: apiRef.current.getLocaleText('columnsPanelTextFieldLabel'),
|
|
@@ -181,4 +207,13 @@ export function GridColumnsPanel(props) {
|
|
|
181
207
|
}))]
|
|
182
208
|
})]
|
|
183
209
|
}));
|
|
184
|
-
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
process.env.NODE_ENV !== "production" ? GridColumnsPanel.propTypes = {
|
|
213
|
+
// ----------------------------- Warning --------------------------------
|
|
214
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
215
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
216
|
+
// ----------------------------------------------------------------------
|
|
217
|
+
sort: PropTypes.oneOf(['asc', 'desc'])
|
|
218
|
+
} : void 0;
|
|
219
|
+
export { GridColumnsPanel };
|
|
@@ -113,6 +113,7 @@ process.env.NODE_ENV !== "production" ? GridPanel.propTypes = {
|
|
|
113
113
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
114
114
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
115
115
|
// ----------------------------------------------------------------------
|
|
116
|
+
children: PropTypes.node,
|
|
116
117
|
|
|
117
118
|
/**
|
|
118
119
|
* Override or extend the styles applied to the component.
|
|
@@ -386,6 +386,11 @@ process.env.NODE_ENV !== "production" ? GridFilterForm.propTypes = {
|
|
|
386
386
|
*/
|
|
387
387
|
applyMultiFilterOperatorChanges: PropTypes.func.isRequired,
|
|
388
388
|
|
|
389
|
+
/**
|
|
390
|
+
* @ignore - do not document.
|
|
391
|
+
*/
|
|
392
|
+
children: PropTypes.node,
|
|
393
|
+
|
|
389
394
|
/**
|
|
390
395
|
* Props passed to the column input component.
|
|
391
396
|
* @default {}
|
|
@@ -129,6 +129,11 @@ process.env.NODE_ENV !== "production" ? GridFilterPanel.propTypes = {
|
|
|
129
129
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
130
130
|
// ----------------------------------------------------------------------
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* @ignore - do not document.
|
|
134
|
+
*/
|
|
135
|
+
children: PropTypes.node,
|
|
136
|
+
|
|
132
137
|
/**
|
|
133
138
|
* Changes how the options in the columns selector should be ordered.
|
|
134
139
|
* If not specified, the order is derived from the `columns` prop.
|
|
@@ -7,7 +7,7 @@ import MUISwitch from '@mui/material/Switch';
|
|
|
7
7
|
import MUIButton from '@mui/material/Button';
|
|
8
8
|
import MUITooltip from '@mui/material/Tooltip';
|
|
9
9
|
import MUIPopper from '@mui/material/Popper';
|
|
10
|
-
import { GridArrowDownwardIcon, GridArrowUpwardIcon, GridCell, GridCheckIcon, GridCloseIcon, GridColumnIcon, GridColumnMenu, GridColumnsPanel, GridFilterAltIcon, GridFilterListIcon, GridFilterPanel, GridFooter, GridHeader, GridLoadingOverlay, GridNoRowsOverlay, GridPagination, GridPanel, GridPreferencesPanel, GridRow, GridSaveAltIcon, GridSeparatorIcon, GridTableRowsIcon, GridTripleDotsVerticalIcon, GridViewHeadlineIcon, GridViewStreamIcon, GridMoreVertIcon, GridExpandMoreIcon, GridKeyboardArrowRight, GridAddIcon, GridRemoveIcon, GridDragIcon, GridColumnHeaderFilterIconButton, GridSearchIcon } from '../components';
|
|
10
|
+
import { GridArrowDownwardIcon, GridArrowUpwardIcon, GridCell, GridSkeletonCell, GridCheckIcon, GridCloseIcon, GridColumnIcon, GridColumnMenu, GridColumnsPanel, GridFilterAltIcon, GridFilterListIcon, GridFilterPanel, GridFooter, GridHeader, GridLoadingOverlay, GridNoRowsOverlay, GridPagination, GridPanel, GridPreferencesPanel, GridRow, GridSaveAltIcon, GridSeparatorIcon, GridTableRowsIcon, GridTripleDotsVerticalIcon, GridViewHeadlineIcon, GridViewStreamIcon, GridMoreVertIcon, GridExpandMoreIcon, GridKeyboardArrowRight, GridAddIcon, GridRemoveIcon, GridDragIcon, GridColumnHeaderFilterIconButton, GridSearchIcon } from '../components';
|
|
11
11
|
import { GridColumnUnsortedIcon } from '../components/columnHeaders/GridColumnUnsortedIcon';
|
|
12
12
|
import { ErrorOverlay } from '../components/ErrorOverlay';
|
|
13
13
|
import { GridNoResultsOverlay } from '../components/GridNoResultsOverlay';
|
|
@@ -52,6 +52,7 @@ export var DATA_GRID_DEFAULT_SLOTS_COMPONENTS = _extends({}, DEFAULT_GRID_ICON_S
|
|
|
52
52
|
BaseTooltip: MUITooltip,
|
|
53
53
|
BasePopper: MUIPopper,
|
|
54
54
|
Cell: GridCell,
|
|
55
|
+
SkeletonCell: GridSkeletonCell,
|
|
55
56
|
ColumnHeaderFilterIconButton: GridColumnHeaderFilterIconButton,
|
|
56
57
|
ColumnMenu: GridColumnMenu,
|
|
57
58
|
ErrorOverlay: ErrorOverlay,
|
|
@@ -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 var 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 var 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', 'cellSkeleton', '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', 'row--detailPanelExpanded', '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,12 @@
|
|
|
1
|
+
import { createSelector } from '../../../utils/createSelector';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @category ColumnGrouping
|
|
5
|
+
* @ignore - do not document.
|
|
6
|
+
*/
|
|
7
|
+
export var gridColumnGroupingSelector = function gridColumnGroupingSelector(state) {
|
|
8
|
+
return state.columnGrouping;
|
|
9
|
+
};
|
|
10
|
+
export var gridColumnGroupsLookupSelector = createSelector(gridColumnGroupingSelector, function (columnGrouping) {
|
|
11
|
+
return columnGrouping.lookup;
|
|
12
|
+
});
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
5
|
+
var _excluded = ["groupId", "children"];
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import { isLeaf } from '../../../models/gridColumnGrouping';
|
|
8
|
+
import { gridColumnGroupsLookupSelector } from './gridColumnGroupsSelector';
|
|
9
|
+
import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
|
|
10
|
+
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
11
|
+
export function hasGroupPath(lookupElement) {
|
|
12
|
+
return lookupElement.groupPath !== undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// This is the recurrence function that help writing `unwrapGroupingColumnModel()`
|
|
16
|
+
var recurrentUnwrapGroupingColumnModel = function recurrentUnwrapGroupingColumnModel(columnGroupNode, parents, unwrappedGroupingModelToComplet) {
|
|
17
|
+
if (isLeaf(columnGroupNode)) {
|
|
18
|
+
if (unwrappedGroupingModelToComplet[columnGroupNode.field] !== undefined) {
|
|
19
|
+
throw new Error(["MUI: columnGroupingModel contains duplicated field", "column field ".concat(columnGroupNode.field, " occurrs two times in the grouping model:"), "- ".concat(unwrappedGroupingModelToComplet[columnGroupNode.field].join(' > ')), "- ".concat(parents.join(' > '))].join('\n'));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
unwrappedGroupingModelToComplet[columnGroupNode.field] = parents;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var groupId = columnGroupNode.groupId,
|
|
27
|
+
children = columnGroupNode.children;
|
|
28
|
+
children.forEach(function (child) {
|
|
29
|
+
recurrentUnwrapGroupingColumnModel(child, [].concat(_toConsumableArray(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 var unwrapGroupingColumnModel = function unwrapGroupingColumnModel(columnGroupingModel) {
|
|
41
|
+
if (!columnGroupingModel) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var unwrappedSubTree = {};
|
|
46
|
+
columnGroupingModel.forEach(function (columnGroupNode) {
|
|
47
|
+
recurrentUnwrapGroupingColumnModel(columnGroupNode, [], unwrappedSubTree);
|
|
48
|
+
});
|
|
49
|
+
return unwrappedSubTree;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
var createGroupLookup = function createGroupLookup(columnGroupingModel) {
|
|
53
|
+
var groupLookup = {};
|
|
54
|
+
columnGroupingModel.forEach(function (node) {
|
|
55
|
+
if (isLeaf(node)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var groupId = node.groupId,
|
|
60
|
+
children = node.children,
|
|
61
|
+
other = _objectWithoutProperties(node, _excluded);
|
|
62
|
+
|
|
63
|
+
if (!groupId) {
|
|
64
|
+
throw new Error('MUI: An element of the columnGroupingModel does not have either `field` or `groupId`.');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!children) {
|
|
68
|
+
console.warn("MUI: group groupId=".concat(groupId, " has no children."));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var groupParam = _extends({}, other, {
|
|
72
|
+
groupId: groupId
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
var subTreeLookup = createGroupLookup(children);
|
|
76
|
+
|
|
77
|
+
if (subTreeLookup[groupId] !== undefined || groupLookup[groupId] !== undefined) {
|
|
78
|
+
throw new Error("MUI: The groupId ".concat(groupId, " is used multiple times in the columnGroupingModel."));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
groupLookup = _extends({}, groupLookup, subTreeLookup, _defineProperty({}, groupId, groupParam));
|
|
82
|
+
});
|
|
83
|
+
return _extends({}, groupLookup);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export var columnGroupsStateInitializer = function columnGroupsStateInitializer(state, props) {
|
|
87
|
+
var _props$columnGrouping;
|
|
88
|
+
|
|
89
|
+
var groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
|
|
90
|
+
return _extends({}, state, {
|
|
91
|
+
columnGrouping: {
|
|
92
|
+
lookup: groupLookup,
|
|
93
|
+
groupCollapsedModel: {}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* @requires useGridColumns (method, event)
|
|
99
|
+
* @requires useGridParamsApi (method)
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
export var useGridColumnGrouping = function useGridColumnGrouping(apiRef, props) {
|
|
103
|
+
var _props$experimentalFe2;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* API METHODS
|
|
107
|
+
*/
|
|
108
|
+
var getColumnGroupPath = React.useCallback(function (field) {
|
|
109
|
+
var _columnLookup$field$g, _columnLookup$field;
|
|
110
|
+
|
|
111
|
+
var columnLookup = gridColumnLookupSelector(apiRef);
|
|
112
|
+
return (_columnLookup$field$g = (_columnLookup$field = columnLookup[field]) == null ? void 0 : _columnLookup$field.groupPath) != null ? _columnLookup$field$g : [];
|
|
113
|
+
}, [apiRef]);
|
|
114
|
+
var getAllGroupDetails = React.useCallback(function () {
|
|
115
|
+
var columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);
|
|
116
|
+
return columnGroupLookup;
|
|
117
|
+
}, [apiRef]);
|
|
118
|
+
var columnGroupingApi = {
|
|
119
|
+
unstable_getColumnGroupPath: getColumnGroupPath,
|
|
120
|
+
unstable_getAllGroupDetails: getAllGroupDetails
|
|
121
|
+
};
|
|
122
|
+
useGridApiMethod(apiRef, columnGroupingApi, 'GridColumnGroupingApi');
|
|
123
|
+
/**
|
|
124
|
+
* EFFECTS
|
|
125
|
+
*/
|
|
126
|
+
// The effect does not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`
|
|
127
|
+
// As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
|
|
128
|
+
|
|
129
|
+
var isFirstRender = React.useRef(true);
|
|
130
|
+
React.useEffect(function () {
|
|
131
|
+
var _props$experimentalFe, _props$columnGrouping2;
|
|
132
|
+
|
|
133
|
+
if (isFirstRender.current) {
|
|
134
|
+
isFirstRender.current = false;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var groupLookup = createGroupLookup((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
|
|
143
|
+
apiRef.current.setState(function (state) {
|
|
144
|
+
return _extends({}, state, {
|
|
145
|
+
columnGrouping: _extends({}, state.columnGrouping, {
|
|
146
|
+
lookup: groupLookup
|
|
147
|
+
})
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}, [apiRef, props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
|
|
151
|
+
};
|
|
@@ -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 var useGridColumnGroupingPreProcessors = function useGridColumnGroupingPreProcessors(apiRef, props) {
|
|
7
|
+
var _props$experimentalFe2;
|
|
8
|
+
|
|
9
|
+
var addHeaderGroups = React.useCallback(function (columnsState) {
|
|
10
|
+
var _props$experimentalFe;
|
|
11
|
+
|
|
12
|
+
if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
|
|
13
|
+
return columnsState;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel);
|
|
17
|
+
columnsState.all.forEach(function (field) {
|
|
18
|
+
var _unwrappedGroupingMod, _unwrappedGroupingMod2;
|
|
19
|
+
|
|
20
|
+
var newGroupPath = (_unwrappedGroupingMod = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod : [];
|
|
21
|
+
var 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
|
+
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
4
|
import * as React from 'react';
|
|
4
5
|
import * as ReactDOM from 'react-dom';
|
|
5
6
|
import { useForkRef } from '@mui/material/utils';
|
|
7
|
+
import { styled } from '@mui/material/styles';
|
|
6
8
|
import { defaultMemoize } from 'reselect';
|
|
7
9
|
import { useGridApiContext } from '../../utils/useGridApiContext';
|
|
8
10
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
9
11
|
import { gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';
|
|
10
12
|
import { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector } from '../focus/gridFocusStateSelector';
|
|
11
|
-
import { gridDensityHeaderHeightSelector } from '../density/densitySelector';
|
|
13
|
+
import { gridDensityHeaderHeightSelector, gridDensityHeaderGroupingMaxDepthSelector, gridDensityTotalHeaderHeightSelector } from '../density/densitySelector';
|
|
12
14
|
import { gridFilterActiveItemsLookupSelector } from '../filter/gridFilterSelector';
|
|
13
15
|
import { gridSortColumnLookupSelector } from '../sorting/gridSortingSelector';
|
|
14
16
|
import { gridColumnMenuSelector } from '../columnMenu/columnMenuSelector';
|
|
@@ -18,7 +20,22 @@ import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColu
|
|
|
18
20
|
import { getFirstColumnIndexToRender } from '../columns/gridColumnsUtils';
|
|
19
21
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
20
22
|
import { getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
|
|
23
|
+
import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
|
|
24
|
+
import { isDeepEqual } from '../../../utils/utils'; // TODO: add the possibility to switch this value if needed for customization
|
|
25
|
+
|
|
21
26
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
27
|
+
var MERGE_EMPTY_CELLS = true;
|
|
28
|
+
var GridColumnHeaderRow = styled('div', {
|
|
29
|
+
name: 'MuiDataGrid',
|
|
30
|
+
slot: 'ColumnHeaderRow',
|
|
31
|
+
overridesResolver: function overridesResolver(props, styles) {
|
|
32
|
+
return styles.columnHeaderRow;
|
|
33
|
+
}
|
|
34
|
+
})(function () {
|
|
35
|
+
return {
|
|
36
|
+
display: 'flex'
|
|
37
|
+
};
|
|
38
|
+
});
|
|
22
39
|
|
|
23
40
|
function isUIEvent(event) {
|
|
24
41
|
return !!event.target;
|
|
@@ -46,6 +63,8 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
46
63
|
var cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);
|
|
47
64
|
var columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
|
|
48
65
|
var headerHeight = useGridSelector(apiRef, gridDensityHeaderHeightSelector);
|
|
66
|
+
var headerGroupingMaxDepth = useGridSelector(apiRef, gridDensityHeaderGroupingMaxDepthSelector);
|
|
67
|
+
var totalHeaderHeight = useGridSelector(apiRef, gridDensityTotalHeaderHeightSelector);
|
|
49
68
|
var filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
|
|
50
69
|
var sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
|
|
51
70
|
var columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
|
|
@@ -163,11 +182,9 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
163
182
|
useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
|
|
164
183
|
useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
|
|
165
184
|
useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
|
|
166
|
-
useGridApiEventHandler(apiRef, 'rowsScroll', handleScroll);
|
|
167
|
-
|
|
168
|
-
var getColumns = function getColumns(params) {
|
|
169
|
-
var other = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
185
|
+
useGridApiEventHandler(apiRef, 'rowsScroll', handleScroll); // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
|
|
170
186
|
|
|
187
|
+
var getColumnsToRender = function getColumnsToRender(params) {
|
|
171
188
|
var _ref2 = params || {},
|
|
172
189
|
_ref2$renderContext = _ref2.renderContext,
|
|
173
190
|
nextRenderContext = _ref2$renderContext === void 0 ? renderContext : _ref2$renderContext,
|
|
@@ -180,8 +197,6 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
180
197
|
return null;
|
|
181
198
|
}
|
|
182
199
|
|
|
183
|
-
var columns = [];
|
|
184
|
-
|
|
185
200
|
var _getRenderableIndexes3 = getRenderableIndexes({
|
|
186
201
|
firstIndex: nextRenderContext.firstRowIndex,
|
|
187
202
|
lastIndex: nextRenderContext.lastRowIndex,
|
|
@@ -204,6 +219,26 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
204
219
|
});
|
|
205
220
|
var lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
|
|
206
221
|
var renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
|
|
222
|
+
return {
|
|
223
|
+
renderedColumns: renderedColumns,
|
|
224
|
+
firstColumnToRender: firstColumnToRender,
|
|
225
|
+
lastColumnToRender: lastColumnToRender,
|
|
226
|
+
minFirstColumn: minFirstColumn,
|
|
227
|
+
maxLastColumn: maxLastColumn
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
var getColumnHeaders = function getColumnHeaders(params) {
|
|
232
|
+
var other = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
233
|
+
var columnsToRender = getColumnsToRender(params);
|
|
234
|
+
|
|
235
|
+
if (columnsToRender == null) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
var renderedColumns = columnsToRender.renderedColumns,
|
|
240
|
+
firstColumnToRender = columnsToRender.firstColumnToRender;
|
|
241
|
+
var columns = [];
|
|
207
242
|
|
|
208
243
|
for (var i = 0; i < renderedColumns.length; i += 1) {
|
|
209
244
|
var column = renderedColumns[i];
|
|
@@ -228,17 +263,184 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
228
263
|
}, other), column.field));
|
|
229
264
|
}
|
|
230
265
|
|
|
266
|
+
return /*#__PURE__*/_jsx(GridColumnHeaderRow, {
|
|
267
|
+
role: "row",
|
|
268
|
+
"aria-rowindex": headerGroupingMaxDepth + 1,
|
|
269
|
+
children: columns
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
var getParents = function getParents() {
|
|
274
|
+
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
275
|
+
var depth = arguments.length > 1 ? arguments[1] : undefined;
|
|
276
|
+
return path.slice(0, depth + 1);
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
var getColumnGroupHeaders = function getColumnGroupHeaders(params) {
|
|
280
|
+
if (headerGroupingMaxDepth === 0) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
var columnsToRender = getColumnsToRender(params);
|
|
285
|
+
|
|
286
|
+
if (columnsToRender == null) {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
var renderedColumns = columnsToRender.renderedColumns,
|
|
291
|
+
firstColumnToRender = columnsToRender.firstColumnToRender,
|
|
292
|
+
lastColumnToRender = columnsToRender.lastColumnToRender,
|
|
293
|
+
maxLastColumn = columnsToRender.maxLastColumn;
|
|
294
|
+
var columns = [];
|
|
295
|
+
var headerToRender = [];
|
|
296
|
+
|
|
297
|
+
var _loop = function _loop(depth) {
|
|
298
|
+
var _visibleColumns$first, _visibleColumns$first2, _visibleColumns$first3;
|
|
299
|
+
|
|
300
|
+
// Initialize the header line with a grouping item containing all the columns on the left of the virtualization which are in the same group as the first group to render
|
|
301
|
+
var initialHeader = [];
|
|
302
|
+
var leftOverflow = 0;
|
|
303
|
+
var columnIndex = firstColumnToRender - 1;
|
|
304
|
+
var firstColumnToRenderGroup = (_visibleColumns$first = visibleColumns[firstColumnToRender]) == null ? void 0 : (_visibleColumns$first2 = _visibleColumns$first.groupPath) == null ? void 0 : _visibleColumns$first2[depth]; // The array of parent is used to manage empty grouping cell
|
|
305
|
+
// When two empty grouping cell are next to each other, we merge them if the belong to the same group.
|
|
306
|
+
|
|
307
|
+
var firstColumnToRenderGroupParents = getParents((_visibleColumns$first3 = visibleColumns[firstColumnToRender]) == null ? void 0 : _visibleColumns$first3.groupPath, depth);
|
|
308
|
+
|
|
309
|
+
while (firstColumnToRenderGroup !== null && columnIndex >= minColumnIndex && (_visibleColumns$colum = visibleColumns[columnIndex]) != null && _visibleColumns$colum.groupPath && isDeepEqual(getParents((_visibleColumns$colum2 = visibleColumns[columnIndex]) == null ? void 0 : _visibleColumns$colum2.groupPath, depth), firstColumnToRenderGroupParents)) {
|
|
310
|
+
var _visibleColumns$colum, _visibleColumns$colum2, _column$computedWidth;
|
|
311
|
+
|
|
312
|
+
var column = visibleColumns[columnIndex];
|
|
313
|
+
leftOverflow += (_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0;
|
|
314
|
+
|
|
315
|
+
if (initialHeader.length === 0) {
|
|
316
|
+
var _column$computedWidth2;
|
|
317
|
+
|
|
318
|
+
initialHeader.push({
|
|
319
|
+
width: (_column$computedWidth2 = column.computedWidth) != null ? _column$computedWidth2 : 0,
|
|
320
|
+
fields: [column.field],
|
|
321
|
+
groupId: firstColumnToRenderGroup,
|
|
322
|
+
groupParents: firstColumnToRenderGroupParents,
|
|
323
|
+
colIndex: columnIndex
|
|
324
|
+
});
|
|
325
|
+
} else {
|
|
326
|
+
var _column$computedWidth3;
|
|
327
|
+
|
|
328
|
+
initialHeader[0].width += (_column$computedWidth3 = column.computedWidth) != null ? _column$computedWidth3 : 0;
|
|
329
|
+
initialHeader[0].fields.push(column.field);
|
|
330
|
+
initialHeader[0].colIndex = columnIndex;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
columnIndex -= 1;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
var depthInfo = renderedColumns.reduce(function (aggregated, column, i) {
|
|
337
|
+
var _column$computedWidth7;
|
|
338
|
+
|
|
339
|
+
var lastItem = aggregated[aggregated.length - 1];
|
|
340
|
+
|
|
341
|
+
if (column.groupPath && column.groupPath.length > depth) {
|
|
342
|
+
var _column$computedWidth5;
|
|
343
|
+
|
|
344
|
+
if (lastItem && lastItem.groupId === column.groupPath[depth]) {
|
|
345
|
+
var _column$computedWidth4;
|
|
346
|
+
|
|
347
|
+
// Merge with the previous columns
|
|
348
|
+
return [].concat(_toConsumableArray(aggregated.slice(0, aggregated.length - 1)), [_extends({}, lastItem, {
|
|
349
|
+
width: lastItem.width + ((_column$computedWidth4 = column.computedWidth) != null ? _column$computedWidth4 : 0),
|
|
350
|
+
fields: [].concat(_toConsumableArray(lastItem.fields), [column.field])
|
|
351
|
+
})]);
|
|
352
|
+
} // Create a new grouping
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
return [].concat(_toConsumableArray(aggregated), [{
|
|
356
|
+
groupId: column.groupPath[depth],
|
|
357
|
+
groupParents: getParents(column.groupPath, depth),
|
|
358
|
+
width: (_column$computedWidth5 = column.computedWidth) != null ? _column$computedWidth5 : 0,
|
|
359
|
+
fields: [column.field],
|
|
360
|
+
colIndex: firstColumnToRender + i
|
|
361
|
+
}]);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (MERGE_EMPTY_CELLS && lastItem && lastItem.groupId === null && isDeepEqual(getParents(column.groupPath, depth), lastItem.groupParents)) {
|
|
365
|
+
var _column$computedWidth6;
|
|
366
|
+
|
|
367
|
+
// We merge with previous column
|
|
368
|
+
return [].concat(_toConsumableArray(aggregated.slice(0, aggregated.length - 1)), [_extends({}, lastItem, {
|
|
369
|
+
width: lastItem.width + ((_column$computedWidth6 = column.computedWidth) != null ? _column$computedWidth6 : 0),
|
|
370
|
+
fields: [].concat(_toConsumableArray(lastItem.fields), [column.field])
|
|
371
|
+
})]);
|
|
372
|
+
} // We create new empty cell
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
return [].concat(_toConsumableArray(aggregated), [{
|
|
376
|
+
groupId: null,
|
|
377
|
+
groupParents: getParents(column.groupPath, depth),
|
|
378
|
+
width: (_column$computedWidth7 = column.computedWidth) != null ? _column$computedWidth7 : 0,
|
|
379
|
+
fields: [column.field],
|
|
380
|
+
colIndex: firstColumnToRender + i
|
|
381
|
+
}]);
|
|
382
|
+
}, initialHeader);
|
|
383
|
+
columnIndex = lastColumnToRender;
|
|
384
|
+
var lastColumnToRenderGroup = depthInfo[depthInfo.length - 1].groupId;
|
|
385
|
+
|
|
386
|
+
while (lastColumnToRenderGroup !== null && columnIndex < maxLastColumn && (_visibleColumns$colum3 = visibleColumns[columnIndex]) != null && _visibleColumns$colum3.groupPath && ((_visibleColumns$colum4 = visibleColumns[columnIndex]) == null ? void 0 : (_visibleColumns$colum5 = _visibleColumns$colum4.groupPath) == null ? void 0 : _visibleColumns$colum5[depth]) === lastColumnToRenderGroup) {
|
|
387
|
+
var _visibleColumns$colum3, _visibleColumns$colum4, _visibleColumns$colum5, _column$computedWidth8;
|
|
388
|
+
|
|
389
|
+
var _column = visibleColumns[columnIndex];
|
|
390
|
+
depthInfo[depthInfo.length - 1].width += (_column$computedWidth8 = _column.computedWidth) != null ? _column$computedWidth8 : 0;
|
|
391
|
+
depthInfo[depthInfo.length - 1].fields.push(_column.field);
|
|
392
|
+
columnIndex += 1;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
headerToRender.push({
|
|
396
|
+
leftOverflow: leftOverflow,
|
|
397
|
+
elements: _toConsumableArray(depthInfo)
|
|
398
|
+
});
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
for (var depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
|
|
402
|
+
_loop(depth);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
headerToRender.forEach(function (depthInfo, depthIndex) {
|
|
406
|
+
columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
|
|
407
|
+
style: {
|
|
408
|
+
height: "".concat(headerHeight, "px"),
|
|
409
|
+
transform: "translateX(-".concat(depthInfo.leftOverflow, "px)")
|
|
410
|
+
},
|
|
411
|
+
role: "row",
|
|
412
|
+
"aria-rowindex": depthIndex + 1,
|
|
413
|
+
children: depthInfo.elements.map(function (_ref3, groupIndex) {
|
|
414
|
+
var groupId = _ref3.groupId,
|
|
415
|
+
width = _ref3.width,
|
|
416
|
+
fields = _ref3.fields,
|
|
417
|
+
colIndex = _ref3.colIndex;
|
|
418
|
+
return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
|
|
419
|
+
groupId: groupId,
|
|
420
|
+
width: width,
|
|
421
|
+
fields: fields,
|
|
422
|
+
colIndex: colIndex,
|
|
423
|
+
depth: depthIndex,
|
|
424
|
+
isLastColumn: colIndex === visibleColumns.length - fields.length,
|
|
425
|
+
extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
|
|
426
|
+
maxDepth: headerToRender.length,
|
|
427
|
+
height: headerHeight
|
|
428
|
+
}, groupIndex);
|
|
429
|
+
})
|
|
430
|
+
}, depthIndex));
|
|
431
|
+
});
|
|
231
432
|
return columns;
|
|
232
433
|
};
|
|
233
434
|
|
|
234
435
|
var rootStyle = {
|
|
235
|
-
minHeight:
|
|
236
|
-
maxHeight:
|
|
436
|
+
minHeight: totalHeaderHeight,
|
|
437
|
+
maxHeight: totalHeaderHeight,
|
|
237
438
|
lineHeight: "".concat(headerHeight, "px")
|
|
238
439
|
};
|
|
239
440
|
return {
|
|
240
441
|
renderContext: renderContext,
|
|
241
|
-
|
|
442
|
+
getColumnHeaders: getColumnHeaders,
|
|
443
|
+
getColumnGroupHeaders: getColumnGroupHeaders,
|
|
242
444
|
isDragging: !!dragCol,
|
|
243
445
|
getRootProps: function getRootProps() {
|
|
244
446
|
var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
@@ -249,8 +451,7 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
249
451
|
getInnerProps: function getInnerProps() {
|
|
250
452
|
return {
|
|
251
453
|
ref: handleInnerRef,
|
|
252
|
-
'
|
|
253
|
-
role: 'row'
|
|
454
|
+
role: 'rowgroup'
|
|
254
455
|
};
|
|
255
456
|
}
|
|
256
457
|
};
|