@mui/x-data-grid 7.2.0 → 7.3.1
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 +204 -2
- package/DataGrid/DataGrid.js +20 -2
- package/colDef/gridDateOperators.js +7 -0
- package/components/GridFooter.js +1 -2
- package/components/GridHeader.js +1 -2
- package/components/GridHeaders.js +3 -2
- package/components/GridPagination.d.ts +4 -1
- package/components/GridPagination.js +60 -9
- package/components/GridRow.js +2 -2
- package/components/GridScrollArea.js +1 -1
- package/components/cell/GridActionsCell.js +1 -2
- package/components/cell/GridActionsCellItem.js +1 -2
- package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
- package/components/columnHeaders/GridColumnHeaderItem.d.ts +1 -0
- package/components/columnHeaders/GridColumnHeaderItem.js +6 -4
- package/components/columnHeaders/GridColumnHeaderSeparator.js +1 -1
- package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -2
- package/components/columnsManagement/GridColumnsManagement.js +1 -2
- package/components/containers/GridRoot.js +1 -2
- package/components/containers/GridRootStyles.js +3 -1
- package/components/index.d.ts +1 -1
- package/components/index.js +1 -1
- package/components/menu/columnMenu/menuItems/GridColumnMenuColumnsItem.js +1 -2
- package/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +1 -2
- package/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +1 -2
- package/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +1 -2
- package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -2
- package/components/panel/GridPanel.d.ts +1 -1
- package/components/panel/GridPanel.js +3 -1
- package/components/panel/filterPanel/GridFilterForm.js +1 -2
- package/components/panel/filterPanel/GridFilterInputBoolean.js +1 -2
- package/components/panel/filterPanel/GridFilterInputDate.js +4 -4
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -2
- package/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/components/toolbar/GridToolbar.js +1 -2
- package/components/toolbar/GridToolbarDensitySelector.js +1 -2
- package/components/toolbar/GridToolbarExportContainer.js +1 -2
- package/components/toolbar/GridToolbarFilterButton.js +1 -2
- package/components/virtualization/GridVirtualScroller.js +1 -2
- package/components/virtualization/GridVirtualScrollerFiller.js +1 -2
- package/constants/gridClasses.d.ts +6 -2
- package/constants/gridClasses.js +1 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -4
- package/hooks/features/columnResize/useGridColumnResize.js +91 -62
- package/hooks/features/columns/gridColumnsUtils.d.ts +5 -3
- package/hooks/features/columns/gridColumnsUtils.js +9 -7
- package/hooks/features/columns/useGridColumns.js +5 -4
- package/hooks/features/density/useGridDensity.d.ts +1 -1
- package/hooks/features/density/useGridDensity.js +30 -4
- package/hooks/features/dimensions/gridDimensionsApi.d.ts +5 -1
- package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
- package/hooks/features/dimensions/useGridDimensions.js +5 -2
- package/hooks/features/editing/useGridCellEditing.js +14 -1
- package/hooks/features/export/useGridPrintExport.d.ts +1 -1
- package/hooks/features/export/useGridPrintExport.js +2 -2
- package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +2 -2
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +2 -2
- package/hooks/features/pagination/gridPaginationInterfaces.d.ts +14 -2
- package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
- package/hooks/features/pagination/gridPaginationSelector.js +7 -1
- package/hooks/features/pagination/gridPaginationUtils.d.ts +1 -2
- package/hooks/features/pagination/gridPaginationUtils.js +5 -3
- package/hooks/features/pagination/useGridPagination.d.ts +1 -1
- package/hooks/features/pagination/useGridPagination.js +5 -1
- package/hooks/features/pagination/useGridPaginationMeta.d.ts +4 -0
- package/hooks/features/pagination/useGridPaginationMeta.js +77 -0
- package/hooks/features/pagination/useGridPaginationModel.js +2 -1
- package/hooks/features/pagination/useGridRowCount.d.ts +0 -4
- package/hooks/features/pagination/useGridRowCount.js +32 -18
- package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +3 -3
- package/hooks/utils/useGridApiEventHandler.d.ts +2 -2
- package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
- package/hooks/utils/useGridSelector.d.ts +2 -2
- package/index.js +1 -1
- package/internals/index.d.ts +1 -1
- package/internals/utils/propValidation.js +1 -1
- package/joy/icons.js +1 -2
- package/joy/joySlots.js +1 -2
- package/locales/daDK.js +3 -4
- package/models/api/gridApiCommon.d.ts +1 -1
- package/models/api/gridLocaleTextApi.d.ts +7 -3
- package/models/api/index.d.ts +1 -1
- package/models/api/index.js +0 -1
- package/models/events/gridEventLookup.d.ts +7 -1
- package/models/gridPaginationProps.d.ts +3 -0
- package/models/props/DataGridProps.d.ts +26 -8
- package/modern/DataGrid/DataGrid.js +20 -2
- package/modern/colDef/gridDateOperators.js +7 -0
- package/modern/components/GridFooter.js +1 -2
- package/modern/components/GridHeader.js +1 -2
- package/modern/components/GridHeaders.js +3 -2
- package/modern/components/GridPagination.js +60 -9
- package/modern/components/GridRow.js +2 -2
- package/modern/components/GridScrollArea.js +1 -1
- package/modern/components/cell/GridActionsCell.js +1 -2
- package/modern/components/cell/GridActionsCellItem.js +1 -2
- package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +6 -4
- package/modern/components/columnHeaders/GridColumnHeaderSeparator.js +1 -1
- package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -2
- package/modern/components/columnsManagement/GridColumnsManagement.js +1 -2
- package/modern/components/containers/GridRoot.js +1 -2
- package/modern/components/containers/GridRootStyles.js +3 -1
- package/modern/components/index.js +1 -1
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuColumnsItem.js +1 -2
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +1 -2
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +1 -2
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +1 -2
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -2
- package/modern/components/panel/GridPanel.js +3 -1
- package/modern/components/panel/filterPanel/GridFilterForm.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterInputDate.js +4 -4
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -2
- package/modern/components/toolbar/GridToolbar.js +1 -2
- package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -2
- package/modern/components/toolbar/GridToolbarExportContainer.js +1 -2
- package/modern/components/toolbar/GridToolbarFilterButton.js +1 -2
- package/modern/components/virtualization/GridVirtualScroller.js +1 -2
- package/modern/components/virtualization/GridVirtualScrollerFiller.js +1 -2
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -4
- package/modern/hooks/features/columnResize/useGridColumnResize.js +91 -62
- package/modern/hooks/features/columns/gridColumnsUtils.js +9 -7
- package/modern/hooks/features/columns/useGridColumns.js +5 -4
- package/modern/hooks/features/density/useGridDensity.js +30 -4
- package/modern/hooks/features/dimensions/useGridDimensions.js +5 -2
- package/modern/hooks/features/editing/useGridCellEditing.js +14 -1
- package/modern/hooks/features/export/useGridPrintExport.js +2 -2
- package/modern/hooks/features/pagination/gridPaginationSelector.js +7 -1
- package/modern/hooks/features/pagination/gridPaginationUtils.js +5 -3
- package/modern/hooks/features/pagination/useGridPagination.js +5 -1
- package/modern/hooks/features/pagination/useGridPaginationMeta.js +77 -0
- package/modern/hooks/features/pagination/useGridPaginationModel.js +2 -1
- package/modern/hooks/features/pagination/useGridRowCount.js +32 -18
- package/modern/index.js +1 -1
- package/modern/internals/utils/propValidation.js +1 -1
- package/modern/joy/icons.js +1 -2
- package/modern/joy/joySlots.js +1 -2
- package/modern/locales/daDK.js +3 -4
- package/modern/models/api/index.js +0 -1
- package/modern/utils/domUtils.js +4 -0
- package/node/DataGrid/DataGrid.js +20 -1
- package/node/DataGrid/useDataGridProps.js +1 -1
- package/node/colDef/gridCheckboxSelectionColDef.js +1 -1
- package/node/colDef/gridDateOperators.js +7 -0
- package/node/components/GridApiContext.js +1 -1
- package/node/components/GridColumnHeaders.js +1 -1
- package/node/components/GridFooter.js +1 -1
- package/node/components/GridHeader.js +1 -1
- package/node/components/GridHeaders.js +5 -3
- package/node/components/GridLoadingOverlay.js +1 -1
- package/node/components/GridNoResultsOverlay.js +1 -1
- package/node/components/GridNoRowsOverlay.js +1 -1
- package/node/components/GridPagination.js +60 -9
- package/node/components/GridRow.js +2 -1
- package/node/components/GridRowCount.js +1 -1
- package/node/components/GridScrollArea.js +2 -2
- package/node/components/GridScrollbarFillerCell.js +1 -1
- package/node/components/GridSelectedRowCount.js +1 -1
- package/node/components/base/GridFooterPlaceholder.js +1 -1
- package/node/components/base/GridOverlays.js +1 -1
- package/node/components/cell/GridActionsCell.js +1 -1
- package/node/components/cell/GridActionsCellItem.js +1 -1
- package/node/components/cell/GridBooleanCell.js +1 -1
- package/node/components/cell/GridCell.js +1 -1
- package/node/components/cell/GridEditBooleanCell.js +1 -1
- package/node/components/cell/GridEditDateCell.js +1 -1
- package/node/components/cell/GridEditInputCell.js +1 -1
- package/node/components/cell/GridEditSingleSelectCell.js +1 -1
- package/node/components/cell/GridSkeletonCell.js +1 -1
- package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +1 -1
- package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
- package/node/components/columnHeaders/GridColumnGroupHeader.js +1 -1
- package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -1
- package/node/components/columnHeaders/GridColumnHeaderItem.js +5 -2
- package/node/components/columnHeaders/GridColumnHeaderSeparator.js +2 -2
- package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -1
- package/node/components/columnHeaders/GridColumnHeaderTitle.js +1 -1
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -1
- package/node/components/columnHeaders/GridIconButtonContainer.js +1 -1
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
- package/node/components/columnSelection/GridHeaderCheckbox.js +1 -1
- package/node/components/columnsManagement/GridColumnsManagement.js +1 -1
- package/node/components/containers/GridFooterContainer.js +1 -1
- package/node/components/containers/GridOverlay.js +1 -1
- package/node/components/containers/GridRoot.js +1 -1
- package/node/components/containers/GridRootStyles.js +3 -1
- package/node/components/containers/GridToolbarContainer.js +1 -1
- package/node/components/index.js +27 -10
- package/node/components/menu/GridMenu.js +1 -1
- package/node/components/menu/columnMenu/GridColumnHeaderMenu.js +1 -1
- package/node/components/menu/columnMenu/GridColumnMenu.js +1 -1
- package/node/components/menu/columnMenu/GridColumnMenuContainer.js +1 -1
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuColumnsItem.js +1 -1
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +1 -1
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +1 -1
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +1 -1
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
- package/node/components/panel/GridColumnsPanel.js +1 -1
- package/node/components/panel/GridPanel.js +4 -2
- package/node/components/panel/GridPanelContent.js +1 -1
- package/node/components/panel/GridPanelFooter.js +1 -1
- package/node/components/panel/GridPanelHeader.js +1 -1
- package/node/components/panel/GridPanelWrapper.js +1 -1
- package/node/components/panel/GridPreferencesPanel.js +1 -1
- package/node/components/panel/filterPanel/GridFilterForm.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputDate.js +5 -5
- package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
- package/node/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/node/components/toolbar/GridToolbar.js +1 -1
- package/node/components/toolbar/GridToolbarColumnsButton.js +1 -1
- package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/node/components/toolbar/GridToolbarExport.js +1 -1
- package/node/components/toolbar/GridToolbarExportContainer.js +1 -1
- package/node/components/toolbar/GridToolbarFilterButton.js +1 -1
- package/node/components/toolbar/GridToolbarQuickFilter.js +1 -1
- package/node/components/virtualization/GridBottomContainer.js +1 -1
- package/node/components/virtualization/GridMainContainer.js +1 -1
- package/node/components/virtualization/GridTopContainer.js +1 -1
- package/node/components/virtualization/GridVirtualScrollbar.js +1 -1
- package/node/components/virtualization/GridVirtualScroller.js +1 -1
- package/node/components/virtualization/GridVirtualScrollerContent.js +1 -1
- package/node/components/virtualization/GridVirtualScrollerFiller.js +1 -1
- package/node/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/context/GridContextProvider.js +1 -1
- package/node/context/GridRootPropsContext.js +1 -1
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +1 -1
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +1 -1
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +1 -1
- package/node/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.js +1 -1
- package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +1 -1
- package/node/hooks/core/useGridApiInitialization.js +1 -1
- package/node/hooks/core/useGridLocaleText.js +1 -1
- package/node/hooks/core/useGridLoggerFactory.js +1 -1
- package/node/hooks/core/useGridRefs.js +1 -1
- package/node/hooks/core/useGridStateInitialization.js +1 -1
- package/node/hooks/core/useGridTheme.js +1 -1
- package/node/hooks/features/clipboard/useGridClipboard.js +1 -1
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +1 -1
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -3
- package/node/hooks/features/columnMenu/useGridColumnMenu.js +1 -1
- package/node/hooks/features/columnMenu/useGridColumnMenuSlots.js +1 -1
- package/node/hooks/features/columnResize/useGridColumnResize.js +92 -63
- package/node/hooks/features/columns/gridColumnsUtils.js +9 -7
- package/node/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/node/hooks/features/columns/useGridColumns.js +6 -5
- package/node/hooks/features/density/useGridDensity.js +31 -5
- package/node/hooks/features/dimensions/useGridDimensions.js +6 -3
- package/node/hooks/features/editing/useGridCellEditing.js +15 -2
- package/node/hooks/features/editing/useGridEditing.js +1 -1
- package/node/hooks/features/editing/useGridRowEditing.js +1 -1
- package/node/hooks/features/export/useGridCsvExport.js +1 -1
- package/node/hooks/features/export/useGridPrintExport.js +3 -3
- package/node/hooks/features/filter/useGridFilter.js +1 -1
- package/node/hooks/features/focus/useGridFocus.js +1 -1
- package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +1 -1
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -1
- package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/node/hooks/features/pagination/gridPaginationUtils.js +6 -4
- package/node/hooks/features/pagination/useGridPagination.js +5 -1
- package/node/hooks/features/pagination/useGridPaginationMeta.js +87 -0
- package/node/hooks/features/pagination/useGridPaginationModel.js +3 -2
- package/node/hooks/features/pagination/useGridRowCount.js +31 -16
- package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +1 -1
- package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/node/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js +1 -1
- package/node/hooks/features/rows/useGridParamsApi.js +1 -1
- package/node/hooks/features/rows/useGridRows.js +1 -1
- package/node/hooks/features/rows/useGridRowsMeta.js +1 -1
- package/node/hooks/features/scroll/useGridScroll.js +1 -1
- package/node/hooks/features/sorting/useGridSorting.js +1 -1
- package/node/hooks/features/statePersistence/useGridStatePersistence.js +1 -1
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/node/hooks/features/virtualization/useGridVirtualization.js +1 -1
- package/node/hooks/utils/useFirstRender.js +1 -1
- package/node/hooks/utils/useGridApiContext.js +1 -1
- package/node/hooks/utils/useGridApiEventHandler.js +1 -1
- package/node/hooks/utils/useGridApiMethod.js +1 -1
- package/node/hooks/utils/useGridApiRef.js +1 -1
- package/node/hooks/utils/useGridInitializeState.js +1 -1
- package/node/hooks/utils/useGridLogger.js +1 -1
- package/node/hooks/utils/useGridNativeEventListener.js +1 -1
- package/node/hooks/utils/useGridPrivateApiContext.js +1 -1
- package/node/hooks/utils/useGridRootProps.js +1 -1
- package/node/hooks/utils/useGridSelector.js +1 -1
- package/node/hooks/utils/useGridVisibleRows.js +1 -1
- package/node/hooks/utils/useResizeObserver.js +1 -1
- package/node/hooks/utils/useRunOnce.js +1 -1
- package/node/index.js +1 -1
- package/node/internals/utils/propValidation.js +1 -1
- package/node/internals/utils/useProps.js +1 -1
- package/node/joy/icons.js +1 -1
- package/node/joy/joySlots.js +1 -1
- package/node/locales/daDK.js +3 -4
- package/node/material/components/MUISelectOption.js +1 -1
- package/node/material/icons/GridColumnUnsortedIcon.js +1 -1
- package/node/material/icons/index.js +1 -1
- package/node/models/api/index.js +0 -11
- package/node/utils/domUtils.js +5 -0
- package/node/utils/fastMemo.js +1 -1
- package/package.json +3 -5
- package/utils/domUtils.d.ts +1 -0
- package/utils/domUtils.js +4 -0
- package/utils/getGridLocalization.d.ts +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { unstable_ownerDocument as ownerDocument, unstable_useEventCallback as useEventCallback } from '@mui/utils';
|
|
4
|
+
import useLazyRef from '@mui/utils/useLazyRef';
|
|
4
5
|
import { useTheme } from '@mui/material/styles';
|
|
5
|
-
import { findGridCellElementsFromCol, findGridElement, findLeftPinnedCellsAfterCol, findRightPinnedCellsBeforeCol, getFieldFromHeaderElem, findHeaderElementFromField, findGroupHeaderElementsFromField, findGridHeader, findGridCells, findParentElementFromClassName, findLeftPinnedHeadersAfterCol, findRightPinnedHeadersBeforeCol } from '../../../utils/domUtils';
|
|
6
|
+
import { findGridCellElementsFromCol, findGridElement, findLeftPinnedCellsAfterCol, findRightPinnedCellsBeforeCol, getFieldFromHeaderElem, findHeaderElementFromField, getFieldsFromGroupHeaderElem, findGroupHeaderElementsFromField, findGridHeader, findGridCells, findParentElementFromClassName, findLeftPinnedHeadersAfterCol, findRightPinnedHeadersBeforeCol } from '../../../utils/domUtils';
|
|
6
7
|
import { DEFAULT_GRID_AUTOSIZE_OPTIONS } from './gridColumnResizeApi';
|
|
7
8
|
import { gridClasses } from '../../../constants/gridClasses';
|
|
8
9
|
import { useGridApiEventHandler, useGridApiMethod, useGridApiOptionHandler, useGridLogger, useGridNativeEventListener, useGridSelector, useOnMount } from '../../utils';
|
|
@@ -173,6 +174,25 @@ export const columnResizeStateInitializer = state => _extends({}, state, {
|
|
|
173
174
|
resizingColumnField: ''
|
|
174
175
|
}
|
|
175
176
|
});
|
|
177
|
+
function createResizeRefs() {
|
|
178
|
+
return {
|
|
179
|
+
colDef: undefined,
|
|
180
|
+
initialColWidth: 0,
|
|
181
|
+
initialTotalWidth: 0,
|
|
182
|
+
previousMouseClickEvent: undefined,
|
|
183
|
+
columnHeaderElement: undefined,
|
|
184
|
+
headerFilterElement: undefined,
|
|
185
|
+
groupHeaderElements: [],
|
|
186
|
+
cellElements: [],
|
|
187
|
+
leftPinnedCellsAfter: [],
|
|
188
|
+
rightPinnedCellsBefore: [],
|
|
189
|
+
fillerLeft: undefined,
|
|
190
|
+
fillerRight: undefined,
|
|
191
|
+
leftPinnedHeadersAfter: [],
|
|
192
|
+
rightPinnedHeadersBefore: []
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
176
196
|
/**
|
|
177
197
|
* @requires useGridColumns (method, event)
|
|
178
198
|
* TODO: improve experience for last column
|
|
@@ -180,18 +200,7 @@ export const columnResizeStateInitializer = state => _extends({}, state, {
|
|
|
180
200
|
export const useGridColumnResize = (apiRef, props) => {
|
|
181
201
|
const theme = useTheme();
|
|
182
202
|
const logger = useGridLogger(apiRef, 'useGridColumnResize');
|
|
183
|
-
const
|
|
184
|
-
const previousMouseClickEvent = React.useRef();
|
|
185
|
-
const columnHeaderElementRef = React.useRef();
|
|
186
|
-
const headerFilterElementRef = React.useRef();
|
|
187
|
-
const groupHeaderElementsRef = React.useRef([]);
|
|
188
|
-
const cellElementsRef = React.useRef([]);
|
|
189
|
-
const leftPinnedCellsAfterRef = React.useRef([]);
|
|
190
|
-
const rightPinnedCellsBeforeRef = React.useRef([]);
|
|
191
|
-
const fillerLeftRef = React.useRef();
|
|
192
|
-
const fillerRightRef = React.useRef();
|
|
193
|
-
const leftPinnedHeadersAfterRef = React.useRef([]);
|
|
194
|
-
const rightPinnedHeadersBeforeRef = React.useRef([]);
|
|
203
|
+
const refs = useLazyRef(createResizeRefs).current;
|
|
195
204
|
|
|
196
205
|
// To improve accessibility, the separator has padding on both sides.
|
|
197
206
|
// Clicking inside the padding area should be treated as a click in the separator.
|
|
@@ -201,22 +210,25 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
201
210
|
const stopResizeEventTimeout = useTimeout();
|
|
202
211
|
const touchId = React.useRef();
|
|
203
212
|
const updateWidth = newWidth => {
|
|
204
|
-
logger.debug(`Updating width to ${newWidth} for col ${
|
|
205
|
-
const prevWidth =
|
|
213
|
+
logger.debug(`Updating width to ${newWidth} for col ${refs.colDef.field}`);
|
|
214
|
+
const prevWidth = refs.columnHeaderElement.offsetWidth;
|
|
206
215
|
const widthDiff = newWidth - prevWidth;
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
216
|
+
const columnWidthDiff = newWidth - refs.initialColWidth;
|
|
217
|
+
const newTotalWidth = refs.initialTotalWidth + columnWidthDiff;
|
|
218
|
+
apiRef.current.rootElementRef?.current?.style.setProperty('--DataGrid-rowWidth', `${newTotalWidth}px`);
|
|
219
|
+
refs.colDef.computedWidth = newWidth;
|
|
220
|
+
refs.colDef.width = newWidth;
|
|
221
|
+
refs.colDef.flex = 0;
|
|
222
|
+
refs.columnHeaderElement.style.width = `${newWidth}px`;
|
|
223
|
+
refs.columnHeaderElement.style.minWidth = `${newWidth}px`;
|
|
224
|
+
refs.columnHeaderElement.style.maxWidth = `${newWidth}px`;
|
|
225
|
+
const headerFilterElement = refs.headerFilterElement;
|
|
214
226
|
if (headerFilterElement) {
|
|
215
227
|
headerFilterElement.style.width = `${newWidth}px`;
|
|
216
228
|
headerFilterElement.style.minWidth = `${newWidth}px`;
|
|
217
229
|
headerFilterElement.style.maxWidth = `${newWidth}px`;
|
|
218
230
|
}
|
|
219
|
-
|
|
231
|
+
refs.groupHeaderElements.forEach(element => {
|
|
220
232
|
const div = element;
|
|
221
233
|
let finalWidth;
|
|
222
234
|
if (div.getAttribute('aria-colspan') === '1') {
|
|
@@ -230,7 +242,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
230
242
|
div.style.minWidth = finalWidth;
|
|
231
243
|
div.style.maxWidth = finalWidth;
|
|
232
244
|
});
|
|
233
|
-
|
|
245
|
+
refs.cellElements.forEach(element => {
|
|
234
246
|
const div = element;
|
|
235
247
|
let finalWidth;
|
|
236
248
|
if (div.getAttribute('aria-colspan') === '1') {
|
|
@@ -242,22 +254,22 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
242
254
|
}
|
|
243
255
|
div.style.setProperty('--width', finalWidth);
|
|
244
256
|
});
|
|
245
|
-
const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false,
|
|
257
|
+
const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false, refs.colDef.field);
|
|
246
258
|
if (pinnedPosition === GridPinnedColumnPosition.LEFT) {
|
|
247
|
-
updateProperty(
|
|
248
|
-
|
|
259
|
+
updateProperty(refs.fillerLeft, 'width', widthDiff);
|
|
260
|
+
refs.leftPinnedCellsAfter.forEach(cell => {
|
|
249
261
|
updateProperty(cell, 'left', widthDiff);
|
|
250
262
|
});
|
|
251
|
-
|
|
263
|
+
refs.leftPinnedHeadersAfter.forEach(header => {
|
|
252
264
|
updateProperty(header, 'left', widthDiff);
|
|
253
265
|
});
|
|
254
266
|
}
|
|
255
267
|
if (pinnedPosition === GridPinnedColumnPosition.RIGHT) {
|
|
256
|
-
updateProperty(
|
|
257
|
-
|
|
268
|
+
updateProperty(refs.fillerRight, 'width', widthDiff);
|
|
269
|
+
refs.rightPinnedCellsBefore.forEach(cell => {
|
|
258
270
|
updateProperty(cell, 'right', widthDiff);
|
|
259
271
|
});
|
|
260
|
-
|
|
272
|
+
refs.rightPinnedHeadersBefore.forEach(header => {
|
|
261
273
|
updateProperty(header, 'right', widthDiff);
|
|
262
274
|
});
|
|
263
275
|
}
|
|
@@ -267,21 +279,36 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
267
279
|
stopListening();
|
|
268
280
|
|
|
269
281
|
// Prevent double-clicks from being interpreted as two separate clicks
|
|
270
|
-
if (previousMouseClickEvent
|
|
271
|
-
const prevEvent = previousMouseClickEvent
|
|
282
|
+
if (refs.previousMouseClickEvent) {
|
|
283
|
+
const prevEvent = refs.previousMouseClickEvent;
|
|
272
284
|
const prevTimeStamp = prevEvent.timeStamp;
|
|
273
285
|
const prevClientX = prevEvent.clientX;
|
|
274
286
|
const prevClientY = prevEvent.clientY;
|
|
275
287
|
|
|
276
288
|
// Check if the current event is part of a double-click
|
|
277
289
|
if (nativeEvent.timeStamp - prevTimeStamp < 300 && nativeEvent.clientX === prevClientX && nativeEvent.clientY === prevClientY) {
|
|
278
|
-
previousMouseClickEvent
|
|
290
|
+
refs.previousMouseClickEvent = undefined;
|
|
279
291
|
return;
|
|
280
292
|
}
|
|
281
293
|
}
|
|
282
|
-
if (
|
|
283
|
-
apiRef.current.setColumnWidth(
|
|
284
|
-
logger.debug(`Updating col ${
|
|
294
|
+
if (refs.colDef) {
|
|
295
|
+
apiRef.current.setColumnWidth(refs.colDef.field, refs.colDef.width);
|
|
296
|
+
logger.debug(`Updating col ${refs.colDef.field} with new width: ${refs.colDef.width}`);
|
|
297
|
+
const columnsState = gridColumnsStateSelector(apiRef.current.state);
|
|
298
|
+
refs.groupHeaderElements.forEach(element => {
|
|
299
|
+
const fields = getFieldsFromGroupHeaderElem(element);
|
|
300
|
+
const div = element;
|
|
301
|
+
const newWidth = fields.reduce((acc, field) => {
|
|
302
|
+
if (columnsState.columnVisibilityModel[field] !== false) {
|
|
303
|
+
return acc + columnsState.lookup[field].computedWidth;
|
|
304
|
+
}
|
|
305
|
+
return acc;
|
|
306
|
+
}, 0);
|
|
307
|
+
const finalWidth = `${newWidth}px`;
|
|
308
|
+
div.style.width = finalWidth;
|
|
309
|
+
div.style.minWidth = finalWidth;
|
|
310
|
+
div.style.maxWidth = finalWidth;
|
|
311
|
+
});
|
|
285
312
|
}
|
|
286
313
|
stopResizeEventTimeout.start(0, () => {
|
|
287
314
|
apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);
|
|
@@ -289,23 +316,25 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
289
316
|
};
|
|
290
317
|
const storeReferences = (colDef, separator, xStart) => {
|
|
291
318
|
const root = apiRef.current.rootElementRef.current;
|
|
292
|
-
|
|
293
|
-
|
|
319
|
+
refs.initialColWidth = colDef.computedWidth;
|
|
320
|
+
refs.initialTotalWidth = apiRef.current.getRootDimensions().rowWidth;
|
|
321
|
+
refs.colDef = colDef;
|
|
322
|
+
refs.columnHeaderElement = findHeaderElementFromField(apiRef.current.columnHeadersContainerRef.current, colDef.field);
|
|
294
323
|
const headerFilterElement = root.querySelector(`.${gridClasses.headerFilterRow} [data-field="${colDef.field}"]`);
|
|
295
324
|
if (headerFilterElement) {
|
|
296
|
-
|
|
325
|
+
refs.headerFilterElement = headerFilterElement;
|
|
297
326
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false,
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
327
|
+
refs.groupHeaderElements = findGroupHeaderElementsFromField(apiRef.current.columnHeadersContainerRef?.current, colDef.field);
|
|
328
|
+
refs.cellElements = findGridCellElementsFromCol(refs.columnHeaderElement, apiRef.current);
|
|
329
|
+
refs.fillerLeft = findGridElement(apiRef.current, 'filler--pinnedLeft');
|
|
330
|
+
refs.fillerRight = findGridElement(apiRef.current, 'filler--pinnedRight');
|
|
331
|
+
const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false, refs.colDef.field);
|
|
332
|
+
refs.leftPinnedCellsAfter = pinnedPosition !== GridPinnedColumnPosition.LEFT ? [] : findLeftPinnedCellsAfterCol(apiRef.current, refs.columnHeaderElement);
|
|
333
|
+
refs.rightPinnedCellsBefore = pinnedPosition !== GridPinnedColumnPosition.RIGHT ? [] : findRightPinnedCellsBeforeCol(apiRef.current, refs.columnHeaderElement);
|
|
334
|
+
refs.leftPinnedHeadersAfter = pinnedPosition !== GridPinnedColumnPosition.LEFT ? [] : findLeftPinnedHeadersAfterCol(apiRef.current, refs.columnHeaderElement);
|
|
335
|
+
refs.rightPinnedHeadersBefore = pinnedPosition !== GridPinnedColumnPosition.RIGHT ? [] : findRightPinnedHeadersBeforeCol(apiRef.current, refs.columnHeaderElement);
|
|
307
336
|
resizeDirection.current = getResizeDirection(separator, theme.direction);
|
|
308
|
-
initialOffsetToSeparator.current = computeOffsetToSeparator(xStart,
|
|
337
|
+
initialOffsetToSeparator.current = computeOffsetToSeparator(xStart, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);
|
|
309
338
|
};
|
|
310
339
|
const handleResizeMouseUp = useEventCallback(finishResize);
|
|
311
340
|
const handleResizeMouseMove = useEventCallback(nativeEvent => {
|
|
@@ -314,12 +343,12 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
314
343
|
handleResizeMouseUp(nativeEvent);
|
|
315
344
|
return;
|
|
316
345
|
}
|
|
317
|
-
let newWidth = computeNewWidth(initialOffsetToSeparator.current, nativeEvent.clientX,
|
|
318
|
-
newWidth = clamp(newWidth,
|
|
346
|
+
let newWidth = computeNewWidth(initialOffsetToSeparator.current, nativeEvent.clientX, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);
|
|
347
|
+
newWidth = clamp(newWidth, refs.colDef.minWidth, refs.colDef.maxWidth);
|
|
319
348
|
updateWidth(newWidth);
|
|
320
349
|
const params = {
|
|
321
|
-
element:
|
|
322
|
-
colDef:
|
|
350
|
+
element: refs.columnHeaderElement,
|
|
351
|
+
colDef: refs.colDef,
|
|
323
352
|
width: newWidth
|
|
324
353
|
};
|
|
325
354
|
apiRef.current.publishEvent('columnResize', params, nativeEvent);
|
|
@@ -342,12 +371,12 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
342
371
|
handleTouchEnd(nativeEvent);
|
|
343
372
|
return;
|
|
344
373
|
}
|
|
345
|
-
let newWidth = computeNewWidth(initialOffsetToSeparator.current, finger.x,
|
|
346
|
-
newWidth = clamp(newWidth,
|
|
374
|
+
let newWidth = computeNewWidth(initialOffsetToSeparator.current, finger.x, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);
|
|
375
|
+
newWidth = clamp(newWidth, refs.colDef.minWidth, refs.colDef.maxWidth);
|
|
347
376
|
updateWidth(newWidth);
|
|
348
377
|
const params = {
|
|
349
|
-
element:
|
|
350
|
-
colDef:
|
|
378
|
+
element: refs.columnHeaderElement,
|
|
379
|
+
colDef: refs.colDef,
|
|
351
380
|
width: newWidth
|
|
352
381
|
};
|
|
353
382
|
apiRef.current.publishEvent('columnResize', params, nativeEvent);
|
|
@@ -391,10 +420,10 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
391
420
|
setTimeout(() => {
|
|
392
421
|
doc.removeEventListener('click', preventClick, true);
|
|
393
422
|
}, 100);
|
|
394
|
-
if (
|
|
395
|
-
|
|
423
|
+
if (refs.columnHeaderElement) {
|
|
424
|
+
refs.columnHeaderElement.style.pointerEvents = 'unset';
|
|
396
425
|
}
|
|
397
|
-
}, [apiRef,
|
|
426
|
+
}, [apiRef, refs, handleResizeMouseMove, handleResizeMouseUp, handleTouchMove, handleTouchEnd]);
|
|
398
427
|
const handleResizeStart = React.useCallback(({
|
|
399
428
|
field
|
|
400
429
|
}) => {
|
|
@@ -435,7 +464,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
435
464
|
storeReferences(colDef, event.currentTarget, event.clientX);
|
|
436
465
|
const doc = ownerDocument(apiRef.current.rootElementRef.current);
|
|
437
466
|
doc.body.style.cursor = 'col-resize';
|
|
438
|
-
previousMouseClickEvent
|
|
467
|
+
refs.previousMouseClickEvent = event.nativeEvent;
|
|
439
468
|
doc.addEventListener('mousemove', handleResizeMouseMove);
|
|
440
469
|
doc.addEventListener('mouseup', handleResizeMouseUp);
|
|
441
470
|
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { GridColumnsState, GridColumnsRawState, GridColumnVisibilityModel, GridColumnsInitialState } from './gridColumnsInterfaces';
|
|
3
|
+
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
3
4
|
import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
4
5
|
import { GridColDef } from '../../../models/colDef/gridColDef';
|
|
5
6
|
import { GridApiCommon } from '../../../models/api/gridApiCommon';
|
|
6
7
|
import { GridRowEntry } from '../../../models/gridRows';
|
|
8
|
+
import type { GridDimensions } from '../dimensions/gridDimensionsApi';
|
|
7
9
|
export declare const COLUMNS_DIMENSION_PROPERTIES: readonly ["maxWidth", "minWidth", "width", "flex"];
|
|
8
10
|
export type GridColumnDimensionProperties = (typeof COLUMNS_DIMENSION_PROPERTIES)[number];
|
|
9
11
|
/**
|
|
@@ -31,7 +33,7 @@ export declare function computeFlexColumnsWidth({ initialFreeSpace, totalFlexUni
|
|
|
31
33
|
* TODO: Unit test this function in depth and only keep basic cases for the whole grid testing.
|
|
32
34
|
* TODO: Improve the `GridColDef` typing to reflect the fact that `minWidth` / `maxWidth` and `width` can't be null after the merge with the `type` default values.
|
|
33
35
|
*/
|
|
34
|
-
export declare const hydrateColumnsWidth: (rawState: GridColumnsRawState,
|
|
36
|
+
export declare const hydrateColumnsWidth: (rawState: GridColumnsRawState, dimensions: GridDimensions | undefined) => GridColumnsState;
|
|
35
37
|
/**
|
|
36
38
|
* Apply the order and the dimensions of the initial state.
|
|
37
39
|
* The columns not registered in `orderedFields` will be placed after the imported columns.
|
|
@@ -40,7 +42,7 @@ export declare const applyInitialState: (columnsState: GridColumnsRawState, init
|
|
|
40
42
|
export declare const createColumnsState: ({ apiRef, columnsToUpsert, initialState, columnVisibilityModel, keepOnlyColumnsToUpsert, }: {
|
|
41
43
|
columnsToUpsert: readonly GridColDef[];
|
|
42
44
|
initialState: GridColumnsInitialState | undefined;
|
|
43
|
-
columnVisibilityModel?: GridColumnVisibilityModel
|
|
45
|
+
columnVisibilityModel?: GridColumnVisibilityModel;
|
|
44
46
|
keepOnlyColumnsToUpsert: boolean;
|
|
45
47
|
apiRef: React.MutableRefObject<GridApiCommunity>;
|
|
46
48
|
}) => GridColumnsState;
|
|
@@ -51,4 +53,4 @@ export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender,
|
|
|
51
53
|
lastRowToRender: number;
|
|
52
54
|
visibleRows: GridRowEntry[];
|
|
53
55
|
}): number;
|
|
54
|
-
export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>,
|
|
56
|
+
export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight'>): number;
|
|
@@ -110,7 +110,7 @@ export function computeFlexColumnsWidth({
|
|
|
110
110
|
* TODO: Unit test this function in depth and only keep basic cases for the whole grid testing.
|
|
111
111
|
* TODO: Improve the `GridColDef` typing to reflect the fact that `minWidth` / `maxWidth` and `width` can't be null after the merge with the `type` default values.
|
|
112
112
|
*/
|
|
113
|
-
export const hydrateColumnsWidth = (rawState,
|
|
113
|
+
export const hydrateColumnsWidth = (rawState, dimensions) => {
|
|
114
114
|
const columnsLookup = {};
|
|
115
115
|
let totalFlexUnits = 0;
|
|
116
116
|
let widthAllocatedBeforeFlex = 0;
|
|
@@ -136,10 +136,11 @@ export const hydrateColumnsWidth = (rawState, viewportInnerWidth) => {
|
|
|
136
136
|
}
|
|
137
137
|
columnsLookup[columnField] = newColumn;
|
|
138
138
|
});
|
|
139
|
-
const
|
|
139
|
+
const availableWidth = dimensions === undefined ? 0 : dimensions.viewportOuterSize.width - (dimensions.hasScrollY ? dimensions.scrollbarSize : 0);
|
|
140
|
+
const initialFreeSpace = Math.max(availableWidth - widthAllocatedBeforeFlex, 0);
|
|
140
141
|
|
|
141
142
|
// Allocate the remaining space to the flex columns
|
|
142
|
-
if (totalFlexUnits > 0 &&
|
|
143
|
+
if (totalFlexUnits > 0 && availableWidth > 0) {
|
|
143
144
|
const computedColumnWidths = computeFlexColumnsWidth({
|
|
144
145
|
initialFreeSpace,
|
|
145
146
|
totalFlexUnits,
|
|
@@ -282,7 +283,7 @@ export const createColumnsState = ({
|
|
|
282
283
|
}
|
|
283
284
|
const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
|
|
284
285
|
const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
|
|
285
|
-
return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.()
|
|
286
|
+
return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.() ?? undefined);
|
|
286
287
|
};
|
|
287
288
|
export function getFirstNonSpannedColumnToRender({
|
|
288
289
|
firstColumnToRender,
|
|
@@ -304,10 +305,11 @@ export function getFirstNonSpannedColumnToRender({
|
|
|
304
305
|
}
|
|
305
306
|
return firstNonSpannedColumnToRender;
|
|
306
307
|
}
|
|
307
|
-
export function getTotalHeaderHeight(apiRef,
|
|
308
|
+
export function getTotalHeaderHeight(apiRef, props) {
|
|
308
309
|
const densityFactor = gridDensityFactorSelector(apiRef);
|
|
309
310
|
const maxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);
|
|
310
311
|
const isHeaderFilteringEnabled = gridHeaderFilteringEnabledSelector(apiRef);
|
|
311
|
-
const
|
|
312
|
-
|
|
312
|
+
const columnHeadersHeight = Math.floor(props.columnHeaderHeight * densityFactor);
|
|
313
|
+
const filterHeadersHeight = isHeaderFilteringEnabled ? Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor) : 0;
|
|
314
|
+
return columnHeadersHeight * (1 + (maxDepth ?? 0)) + filterHeadersHeight;
|
|
313
315
|
}
|
|
@@ -133,7 +133,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
133
133
|
lookup: _extends({}, columnsState.lookup, {
|
|
134
134
|
[field]: newColumn
|
|
135
135
|
})
|
|
136
|
-
}), apiRef.current.getRootDimensions()
|
|
136
|
+
}), apiRef.current.getRootDimensions()));
|
|
137
137
|
apiRef.current.publishEvent('columnWidthChange', {
|
|
138
138
|
element: apiRef.current.getColumnHeaderElement(field),
|
|
139
139
|
colDef: newColumn,
|
|
@@ -237,14 +237,15 @@ export function useGridColumns(apiRef, props) {
|
|
|
237
237
|
useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
|
|
238
238
|
useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
/*
|
|
241
241
|
* EVENTS
|
|
242
242
|
*/
|
|
243
|
+
|
|
243
244
|
const prevInnerWidth = React.useRef(null);
|
|
244
245
|
const handleGridSizeChange = viewportInnerSize => {
|
|
245
246
|
if (prevInnerWidth.current !== viewportInnerSize.width) {
|
|
246
247
|
prevInnerWidth.current = viewportInnerSize.width;
|
|
247
|
-
setGridColumnsState(hydrateColumnsWidth(gridColumnsStateSelector(apiRef.current.state),
|
|
248
|
+
setGridColumnsState(hydrateColumnsWidth(gridColumnsStateSelector(apiRef.current.state), apiRef.current.getRootDimensions()));
|
|
248
249
|
}
|
|
249
250
|
};
|
|
250
251
|
useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleGridSizeChange);
|
|
@@ -264,7 +265,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
264
265
|
}, [apiRef, logger, setGridColumnsState]);
|
|
265
266
|
useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
|
|
266
267
|
|
|
267
|
-
|
|
268
|
+
/*
|
|
268
269
|
* EFFECTS
|
|
269
270
|
*/
|
|
270
271
|
// The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`
|
|
@@ -3,4 +3,4 @@ import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
|
3
3
|
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
4
|
import { GridStateInitializer } from '../../utils/useGridInitializeState';
|
|
5
5
|
export declare const densityStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'initialState' | 'density'>>;
|
|
6
|
-
export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density' | 'onDensityChange'>) => void;
|
|
6
|
+
export declare const useGridDensity: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'density' | 'onDensityChange' | 'initialState'>) => void;
|
|
@@ -4,6 +4,7 @@ import useEventCallback from '@mui/utils/useEventCallback';
|
|
|
4
4
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
5
5
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
6
6
|
import { gridDensitySelector } from './densitySelector';
|
|
7
|
+
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
7
8
|
export const densityStateInitializer = (state, props) => _extends({}, state, {
|
|
8
9
|
density: props.initialState?.density ?? props.density ?? 'standard'
|
|
9
10
|
});
|
|
@@ -26,13 +27,38 @@ export const useGridDensity = (apiRef, props) => {
|
|
|
26
27
|
density: newDensity
|
|
27
28
|
}));
|
|
28
29
|
});
|
|
30
|
+
const densityApi = {
|
|
31
|
+
setDensity
|
|
32
|
+
};
|
|
33
|
+
useGridApiMethod(apiRef, densityApi, 'public');
|
|
34
|
+
const stateExportPreProcessing = React.useCallback((prevState, context) => {
|
|
35
|
+
const exportedDensity = gridDensitySelector(apiRef.current.state);
|
|
36
|
+
const shouldExportRowCount =
|
|
37
|
+
// Always export if the `exportOnlyDirtyModels` property is not activated
|
|
38
|
+
!context.exportOnlyDirtyModels ||
|
|
39
|
+
// Always export if the `density` is controlled
|
|
40
|
+
props.density != null ||
|
|
41
|
+
// Always export if the `density` has been initialized
|
|
42
|
+
props.initialState?.density != null;
|
|
43
|
+
if (!shouldExportRowCount) {
|
|
44
|
+
return prevState;
|
|
45
|
+
}
|
|
46
|
+
return _extends({}, prevState, {
|
|
47
|
+
density: exportedDensity
|
|
48
|
+
});
|
|
49
|
+
}, [apiRef, props.density, props.initialState?.density]);
|
|
50
|
+
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
51
|
+
const restoredDensity = context.stateToRestore?.density ? context.stateToRestore.density : gridDensitySelector(apiRef.current.state);
|
|
52
|
+
apiRef.current.setState(state => _extends({}, state, {
|
|
53
|
+
density: restoredDensity
|
|
54
|
+
}));
|
|
55
|
+
return params;
|
|
56
|
+
}, [apiRef]);
|
|
57
|
+
useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
|
|
58
|
+
useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
|
|
29
59
|
React.useEffect(() => {
|
|
30
60
|
if (props.density) {
|
|
31
61
|
apiRef.current.setDensity(props.density);
|
|
32
62
|
}
|
|
33
63
|
}, [apiRef, props.density]);
|
|
34
|
-
const densityApi = {
|
|
35
|
-
setDensity
|
|
36
|
-
};
|
|
37
|
-
useGridApiMethod(apiRef, densityApi, 'public');
|
|
38
64
|
};
|
|
@@ -58,9 +58,13 @@ export interface GridDimensions {
|
|
|
58
58
|
*/
|
|
59
59
|
rightPinnedWidth: number;
|
|
60
60
|
/**
|
|
61
|
-
* Height of one
|
|
61
|
+
* Height of one column header.
|
|
62
62
|
*/
|
|
63
63
|
headerHeight: number;
|
|
64
|
+
/**
|
|
65
|
+
* Height of header filters.
|
|
66
|
+
*/
|
|
67
|
+
headerFilterHeight: number;
|
|
64
68
|
/**
|
|
65
69
|
* Height of all the column headers.
|
|
66
70
|
*/
|
|
@@ -3,7 +3,7 @@ import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
|
3
3
|
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
4
|
import { GridDimensions } from './gridDimensionsApi';
|
|
5
5
|
import { GridStateInitializer } from '../../utils/useGridInitializeState';
|
|
6
|
-
type RootProps = Pick<DataGridProcessedProps, 'onResize' | 'scrollbarSize' | 'pagination' | 'paginationMode' | 'autoHeight' | 'getRowHeight' | 'rowHeight' | 'resizeThrottleMs' | 'columnHeaderHeight'>;
|
|
6
|
+
type RootProps = Pick<DataGridProcessedProps, 'onResize' | 'scrollbarSize' | 'pagination' | 'paginationMode' | 'autoHeight' | 'getRowHeight' | 'rowHeight' | 'resizeThrottleMs' | 'columnHeaderHeight' | 'headerFilterHeight'>;
|
|
7
7
|
export type GridDimensionsState = GridDimensions;
|
|
8
8
|
export declare const dimensionsStateInitializer: GridStateInitializer<RootProps>;
|
|
9
9
|
export declare function useGridDimensions(apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: RootProps): void;
|
|
@@ -29,6 +29,7 @@ const EMPTY_DIMENSIONS = {
|
|
|
29
29
|
hasScrollY: false,
|
|
30
30
|
scrollbarSize: 0,
|
|
31
31
|
headerHeight: 0,
|
|
32
|
+
headerFilterHeight: 0,
|
|
32
33
|
rowWidth: 0,
|
|
33
34
|
rowHeight: 0,
|
|
34
35
|
columnsTotalWidth: 0,
|
|
@@ -53,8 +54,9 @@ export function useGridDimensions(apiRef, props) {
|
|
|
53
54
|
const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
|
|
54
55
|
const rowHeight = Math.floor(props.rowHeight * densityFactor);
|
|
55
56
|
const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
|
|
57
|
+
const headerFilterHeight = Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor);
|
|
56
58
|
const columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);
|
|
57
|
-
const headersTotalHeight = getTotalHeaderHeight(apiRef, props
|
|
59
|
+
const headersTotalHeight = getTotalHeaderHeight(apiRef, props);
|
|
58
60
|
const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
|
|
59
61
|
const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
|
|
60
62
|
const [savedSize, setSavedSize] = React.useState();
|
|
@@ -176,6 +178,7 @@ export function useGridDimensions(apiRef, props) {
|
|
|
176
178
|
hasScrollY,
|
|
177
179
|
scrollbarSize,
|
|
178
180
|
headerHeight,
|
|
181
|
+
headerFilterHeight,
|
|
179
182
|
rowWidth,
|
|
180
183
|
rowHeight,
|
|
181
184
|
columnsTotalWidth,
|
|
@@ -191,7 +194,7 @@ export function useGridDimensions(apiRef, props) {
|
|
|
191
194
|
apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
|
|
192
195
|
}
|
|
193
196
|
apiRef.current.updateRenderContext?.();
|
|
194
|
-
}, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
|
|
197
|
+
}, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, headerFilterHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
|
|
195
198
|
const apiPublic = {
|
|
196
199
|
resize,
|
|
197
200
|
getRootDimensions
|
|
@@ -153,13 +153,26 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
153
153
|
cellToFocusAfter
|
|
154
154
|
});
|
|
155
155
|
}, [apiRef]);
|
|
156
|
+
const runIfNoFieldErrors = callback => async (...args) => {
|
|
157
|
+
if (callback) {
|
|
158
|
+
const {
|
|
159
|
+
id,
|
|
160
|
+
field
|
|
161
|
+
} = args[0];
|
|
162
|
+
const editRowsState = apiRef.current.state.editRows;
|
|
163
|
+
const hasFieldErrors = editRowsState[id][field]?.error;
|
|
164
|
+
if (!hasFieldErrors) {
|
|
165
|
+
callback(...args);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
156
169
|
useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsCell(handleCellDoubleClick));
|
|
157
170
|
useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsCell(handleCellFocusOut));
|
|
158
171
|
useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsCell(handleCellKeyDown));
|
|
159
172
|
useGridApiEventHandler(apiRef, 'cellEditStart', runIfEditModeIsCell(handleCellEditStart));
|
|
160
173
|
useGridApiEventHandler(apiRef, 'cellEditStop', runIfEditModeIsCell(handleCellEditStop));
|
|
161
174
|
useGridApiOptionHandler(apiRef, 'cellEditStart', props.onCellEditStart);
|
|
162
|
-
useGridApiOptionHandler(apiRef, 'cellEditStop', props.onCellEditStop);
|
|
175
|
+
useGridApiOptionHandler(apiRef, 'cellEditStop', runIfNoFieldErrors(props.onCellEditStop));
|
|
163
176
|
const getCellMode = React.useCallback((id, field) => {
|
|
164
177
|
const editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
165
178
|
const isEditing = editingState[id] && editingState[id][field];
|
|
@@ -7,4 +7,4 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
|
7
7
|
* @requires useGridSorting (state)
|
|
8
8
|
* @requires useGridParamsApi (method)
|
|
9
9
|
*/
|
|
10
|
-
export declare const useGridPrintExport: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination' | 'columnHeaderHeight'>) => void;
|
|
10
|
+
export declare const useGridPrintExport: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination' | 'columnHeaderHeight' | 'headerFilterHeight'>) => void;
|
|
@@ -107,7 +107,7 @@ export const useGridPrintExport = (apiRef, props) => {
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
// Expand container height to accommodate all rows
|
|
110
|
-
const computedTotalHeight = rowsMeta.currentPageTotalHeight + getTotalHeaderHeight(apiRef, props
|
|
110
|
+
const computedTotalHeight = rowsMeta.currentPageTotalHeight + getTotalHeaderHeight(apiRef, props) + gridToolbarElementHeight + gridFooterElementHeight;
|
|
111
111
|
gridClone.style.height = `${computedTotalHeight}px`;
|
|
112
112
|
// The height above does not include grid border width, so we need to exclude it
|
|
113
113
|
gridClone.style.boxSizing = 'content-box';
|
|
@@ -181,7 +181,7 @@ export const useGridPrintExport = (apiRef, props) => {
|
|
|
181
181
|
printWindow.contentWindow.print();
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
|
-
}, [apiRef, doc, props
|
|
184
|
+
}, [apiRef, doc, props]);
|
|
185
185
|
const handlePrintWindowAfterPrint = React.useCallback(printWindow => {
|
|
186
186
|
// Remove the print iframe
|
|
187
187
|
doc.current.body.removeChild(printWindow);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
3
|
-
import {
|
|
3
|
+
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
4
|
import { GridStateInitializer } from '../../utils/useGridInitializeState';
|
|
5
5
|
export declare const headerFilteringStateInitializer: GridStateInitializer;
|
|
6
|
-
export declare const useGridHeaderFiltering: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<
|
|
6
|
+
export declare const useGridHeaderFiltering: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'signature' | 'headerFilters'>) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity';
|
|
3
|
-
import {
|
|
3
|
+
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
4
4
|
/**
|
|
5
5
|
* @requires useGridSorting (method) - can be after
|
|
6
6
|
* @requires useGridFilter (state) - can be after
|
|
@@ -10,4 +10,4 @@ import { DataGridProcessedPropsWithShared } from '../../../models/props/DataGrid
|
|
|
10
10
|
* @requires useGridScroll (method) - can be after
|
|
11
11
|
* @requires useGridColumnSpanning (method) - can be after
|
|
12
12
|
*/
|
|
13
|
-
export declare const useGridKeyboardNavigation: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<
|
|
13
|
+
export declare const useGridKeyboardNavigation: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode' | 'getRowId' | 'experimentalFeatures' | 'signature' | 'headerFilters'>) => void;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { GridPaginationModel } from '../../../models/gridPaginationProps';
|
|
1
|
+
import { GridPaginationMeta, GridPaginationModel } from '../../../models/gridPaginationProps';
|
|
2
2
|
export interface GridPaginationState {
|
|
3
3
|
paginationModel: GridPaginationModel;
|
|
4
4
|
rowCount: number;
|
|
5
|
+
meta: GridPaginationMeta;
|
|
5
6
|
}
|
|
6
7
|
export interface GridPaginationInitialState {
|
|
7
8
|
paginationModel?: Partial<GridPaginationModel>;
|
|
8
9
|
rowCount?: number;
|
|
10
|
+
meta?: GridPaginationMeta;
|
|
9
11
|
}
|
|
10
12
|
/**
|
|
11
13
|
* The pagination model API interface that is available in the grid `apiRef`.
|
|
@@ -37,8 +39,18 @@ export interface GridPaginationRowCountApi {
|
|
|
37
39
|
*/
|
|
38
40
|
setRowCount: (rowCount: number) => void;
|
|
39
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* The pagination meta API interface that is available in the grid `apiRef`.
|
|
44
|
+
*/
|
|
45
|
+
export interface GridPaginationMetaApi {
|
|
46
|
+
/**
|
|
47
|
+
* Sets the `paginationMeta` to a new value.
|
|
48
|
+
* @param {GridPaginationMeta} paginationMeta The new pagination meta value.
|
|
49
|
+
*/
|
|
50
|
+
setPaginationMeta: (paginationMeta: GridPaginationMeta) => void;
|
|
51
|
+
}
|
|
40
52
|
/**
|
|
41
53
|
* The pagination API interface that is available in the grid `apiRef`.
|
|
42
54
|
*/
|
|
43
|
-
export interface GridPaginationApi extends GridPaginationModelApi, GridPaginationRowCountApi {
|
|
55
|
+
export interface GridPaginationApi extends GridPaginationModelApi, GridPaginationRowCountApi, GridPaginationMetaApi {
|
|
44
56
|
}
|