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