@mui/x-data-grid 7.0.0-alpha.7 → 7.0.0-alpha.9
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 +554 -51
- package/DataGrid/DataGrid.js +15 -27
- package/DataGrid/useDataGridComponent.js +2 -1
- package/DataGrid/useDataGridProps.js +1 -0
- package/README.md +1 -1
- package/colDef/gridDateColDef.js +1 -1
- package/components/GridColumnHeaders.d.ts +3 -2
- package/components/GridColumnHeaders.js +3 -11
- package/components/GridDetailPanels.d.ts +5 -0
- package/components/GridDetailPanels.js +4 -0
- package/components/GridHeaders.d.ts +4 -0
- package/components/GridHeaders.js +53 -0
- package/components/GridPagination.d.ts +4 -4
- package/components/GridPagination.js +1 -1
- package/components/GridPinnedRows.d.ts +7 -0
- package/components/GridPinnedRows.js +4 -0
- package/components/GridRow.d.ts +7 -4
- package/components/GridRow.js +260 -97
- package/components/GridScrollbarFillerCell.d.ts +7 -0
- package/components/GridScrollbarFillerCell.js +39 -0
- package/components/base/GridBody.d.ts +2 -13
- package/components/base/GridBody.js +2 -116
- package/components/base/GridOverlays.js +10 -21
- package/components/cell/GridActionsCell.js +1 -1
- package/components/cell/GridActionsCellItem.d.ts +6 -6
- package/components/cell/GridCell.d.ts +15 -21
- package/components/cell/GridCell.js +68 -373
- package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
- package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
- package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
- package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
- package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
- package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
- package/components/containers/GridRoot.js +18 -15
- package/components/containers/GridRootStyles.js +307 -204
- package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
- package/components/panel/GridPanel.d.ts +3 -3
- package/components/panel/GridPanel.js +3 -4
- package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
- package/components/panel/filterPanel/GridFilterForm.js +32 -15
- package/components/panel/filterPanel/GridFilterPanel.js +46 -20
- package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
- package/components/toolbar/GridToolbarColumnsButton.js +40 -22
- package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
- package/components/toolbar/GridToolbarDensitySelector.js +40 -22
- package/components/toolbar/GridToolbarExport.d.ts +10 -1
- package/components/toolbar/GridToolbarExport.js +6 -1
- package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
- package/components/toolbar/GridToolbarExportContainer.js +41 -23
- package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
- package/components/toolbar/GridToolbarFilterButton.js +6 -10
- package/components/toolbar/GridToolbarQuickFilter.d.ts +4 -0
- package/components/toolbar/GridToolbarQuickFilter.js +4 -0
- package/components/virtualization/GridBottomContainer.d.ts +2 -0
- package/components/virtualization/GridBottomContainer.js +25 -0
- package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
- package/components/virtualization/GridMainContainer.js +20 -0
- package/components/virtualization/GridTopContainer.d.ts +2 -0
- package/components/virtualization/GridTopContainer.js +35 -0
- package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
- package/components/virtualization/GridVirtualScrollbar.js +131 -0
- package/components/virtualization/GridVirtualScroller.d.ts +4 -4
- package/components/virtualization/GridVirtualScroller.js +69 -16
- package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
- package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
- package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
- package/constants/defaultGridSlotsComponents.js +6 -2
- package/constants/gridClasses.d.ts +60 -8
- package/constants/gridClasses.js +1 -1
- package/hooks/core/gridCoreSelector.d.ts +6 -0
- package/hooks/core/gridCoreSelector.js +5 -0
- package/hooks/core/useGridInitialization.js +4 -0
- package/hooks/core/useGridLoggerFactory.js +2 -2
- package/hooks/core/useGridRefs.d.ts +3 -0
- package/hooks/core/useGridRefs.js +13 -0
- package/hooks/core/useGridTheme.d.ts +3 -0
- package/hooks/core/useGridTheme.js +19 -0
- package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
- package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
- package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
- package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
- package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
- package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
- package/hooks/features/columns/gridColumnsSelector.js +52 -0
- package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
- package/hooks/features/columns/gridColumnsUtils.js +10 -12
- package/hooks/features/columns/index.d.ts +2 -2
- package/hooks/features/columns/index.js +2 -1
- package/hooks/features/columns/useGridColumnSpanning.js +62 -61
- package/hooks/features/columns/useGridColumns.js +20 -23
- package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
- package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
- package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
- package/hooks/features/dimensions/index.d.ts +2 -0
- package/hooks/features/dimensions/index.js +1 -0
- package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
- package/hooks/features/dimensions/useGridDimensions.js +216 -148
- package/hooks/features/editing/useGridCellEditing.js +4 -4
- package/hooks/features/editing/useGridRowEditing.js +4 -4
- package/hooks/features/export/serializers/csvSerializer.js +3 -3
- package/hooks/features/export/useGridPrintExport.js +1 -1
- package/hooks/features/filter/gridFilterUtils.js +5 -5
- package/hooks/features/filter/useGridFilter.js +3 -3
- package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
- package/hooks/features/focus/gridFocusStateSelector.js +2 -6
- package/hooks/features/focus/useGridFocus.js +3 -3
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
- package/hooks/features/pagination/gridPaginationUtils.js +2 -2
- package/hooks/features/pagination/useGridPagination.js +3 -5
- package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
- package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
- package/hooks/features/rows/gridRowsSelector.js +5 -5
- package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
- package/hooks/features/rows/gridRowsUtils.js +6 -6
- package/hooks/features/rows/useGridRows.js +7 -7
- package/hooks/features/rows/useGridRowsMeta.js +9 -6
- package/hooks/features/scroll/useGridScroll.js +8 -10
- package/hooks/features/sorting/gridSortingUtils.js +5 -3
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/features/sorting/useGridSorting.js +15 -10
- package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
- package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
- package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
- package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
- package/hooks/features/virtualization/useGridVirtualization.js +8 -1
- package/hooks/utils/index.d.ts +3 -0
- package/hooks/utils/index.js +4 -1
- package/hooks/utils/useGridApiContext.js +1 -1
- package/hooks/utils/useGridAriaAttributes.js +1 -2
- package/hooks/utils/useGridNativeEventListener.js +4 -9
- package/hooks/utils/useGridPrivateApiContext.js +1 -1
- package/hooks/utils/useGridRootProps.js +1 -1
- package/hooks/utils/useGridSelector.js +1 -1
- package/hooks/utils/useResizeObserver.d.ts +2 -0
- package/hooks/utils/useResizeObserver.js +36 -0
- package/hooks/utils/useRunOnce.d.ts +5 -0
- package/hooks/utils/useRunOnce.js +18 -0
- package/index.d.ts +0 -1
- package/index.js +1 -2
- package/internals/index.d.ts +13 -9
- package/internals/index.js +9 -7
- package/internals/utils/index.d.ts +1 -0
- package/internals/utils/index.js +2 -1
- package/internals/utils/propValidation.d.ts +4 -0
- package/internals/utils/propValidation.js +19 -0
- package/legacy/DataGrid/DataGrid.js +20 -29
- package/legacy/DataGrid/useDataGridComponent.js +2 -1
- package/legacy/DataGrid/useDataGridProps.js +1 -0
- package/legacy/colDef/gridDateColDef.js +1 -1
- package/legacy/components/GridColumnHeaders.js +3 -11
- package/legacy/components/GridDetailPanels.js +4 -0
- package/legacy/components/GridHeaders.js +53 -0
- package/legacy/components/GridPagination.js +1 -1
- package/legacy/components/GridPinnedRows.js +4 -0
- package/legacy/components/GridRow.js +258 -98
- package/legacy/components/GridScrollbarFillerCell.js +36 -0
- package/legacy/components/base/GridBody.js +2 -114
- package/legacy/components/base/GridOverlays.js +10 -25
- package/legacy/components/cell/GridActionsCell.js +1 -1
- package/legacy/components/cell/GridCell.js +70 -378
- package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
- package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
- package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
- package/legacy/components/containers/GridRoot.js +18 -15
- package/legacy/components/containers/GridRootStyles.js +215 -137
- package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
- package/legacy/components/panel/GridPanel.js +3 -4
- package/legacy/components/panel/filterPanel/GridFilterForm.js +31 -14
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
- package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
- package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
- package/legacy/components/toolbar/GridToolbarExport.js +6 -1
- package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
- package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
- package/legacy/components/toolbar/GridToolbarQuickFilter.js +4 -0
- package/legacy/components/virtualization/GridBottomContainer.js +25 -0
- package/legacy/components/virtualization/GridMainContainer.js +20 -0
- package/legacy/components/virtualization/GridTopContainer.js +35 -0
- package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
- package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
- package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
- package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
- package/legacy/constants/defaultGridSlotsComponents.js +6 -2
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/hooks/core/gridCoreSelector.js +7 -0
- package/legacy/hooks/core/useGridInitialization.js +4 -0
- package/legacy/hooks/core/useGridLoggerFactory.js +2 -2
- package/legacy/hooks/core/useGridRefs.js +13 -0
- package/legacy/hooks/core/useGridTheme.js +21 -0
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
- package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
- package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
- package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
- package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
- package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
- package/legacy/hooks/features/columns/index.js +2 -1
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
- package/legacy/hooks/features/columns/useGridColumns.js +22 -23
- package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
- package/legacy/hooks/features/dimensions/index.js +1 -0
- package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
- package/legacy/hooks/features/editing/useGridCellEditing.js +4 -4
- package/legacy/hooks/features/editing/useGridRowEditing.js +4 -4
- package/legacy/hooks/features/export/serializers/csvSerializer.js +3 -3
- package/legacy/hooks/features/export/useGridPrintExport.js +1 -1
- package/legacy/hooks/features/filter/gridFilterUtils.js +5 -5
- package/legacy/hooks/features/filter/useGridFilter.js +3 -3
- package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
- package/legacy/hooks/features/focus/useGridFocus.js +3 -3
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
- package/legacy/hooks/features/pagination/gridPaginationUtils.js +2 -2
- package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
- package/legacy/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
- package/legacy/hooks/features/rows/gridRowsUtils.js +6 -6
- package/legacy/hooks/features/rows/useGridParamsApi.js +4 -5
- package/legacy/hooks/features/rows/useGridRows.js +7 -7
- package/legacy/hooks/features/rows/useGridRowsMeta.js +9 -6
- package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
- package/legacy/hooks/features/sorting/gridSortingUtils.js +5 -3
- package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
- package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
- package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
- package/legacy/hooks/utils/index.js +4 -1
- package/legacy/hooks/utils/useGridApiContext.js +1 -1
- package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
- package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
- package/legacy/hooks/utils/useGridPrivateApiContext.js +1 -1
- package/legacy/hooks/utils/useGridRootProps.js +1 -1
- package/legacy/hooks/utils/useGridSelector.js +1 -1
- package/legacy/hooks/utils/useResizeObserver.js +36 -0
- package/legacy/hooks/utils/useRunOnce.js +18 -0
- package/legacy/index.js +1 -2
- package/legacy/internals/index.js +9 -7
- package/legacy/internals/utils/index.js +2 -1
- package/legacy/internals/utils/propValidation.js +21 -0
- package/legacy/locales/hrHR.js +161 -0
- package/legacy/locales/index.js +4 -1
- package/legacy/locales/ptPT.js +161 -0
- package/legacy/locales/zhHK.js +161 -0
- package/legacy/models/index.js +0 -1
- package/legacy/models/params/index.js +1 -2
- package/legacy/utils/createSelector.js +1 -1
- package/legacy/utils/exportAs.js +1 -1
- package/legacy/utils/utils.js +10 -1
- package/locales/hrHR.d.ts +1 -0
- package/locales/hrHR.js +149 -0
- package/locales/index.d.ts +3 -0
- package/locales/index.js +4 -1
- package/locales/ptPT.d.ts +1 -0
- package/locales/ptPT.js +149 -0
- package/locales/zhHK.d.ts +1 -0
- package/locales/zhHK.js +149 -0
- package/models/api/gridColumnGroupingApi.d.ts +2 -2
- package/models/api/gridCoreApi.d.ts +16 -16
- package/models/api/gridRowsMetaApi.d.ts +1 -1
- package/models/api/gridVirtualizationApi.d.ts +2 -3
- package/models/events/gridEventLookup.d.ts +3 -3
- package/models/gridFilterModel.d.ts +1 -1
- package/models/gridSlotsComponent.d.ts +16 -2
- package/models/gridStateCommunity.d.ts +5 -1
- package/models/index.d.ts +0 -1
- package/models/index.js +0 -1
- package/models/params/index.d.ts +0 -1
- package/models/params/index.js +1 -2
- package/models/props/DataGridProps.d.ts +7 -12
- package/modern/DataGrid/DataGrid.js +15 -27
- package/modern/DataGrid/useDataGridComponent.js +2 -1
- package/modern/DataGrid/useDataGridProps.js +1 -0
- package/modern/colDef/gridDateColDef.js +1 -1
- package/modern/components/GridColumnHeaders.js +3 -11
- package/modern/components/GridDetailPanels.js +4 -0
- package/modern/components/GridHeaders.js +53 -0
- package/modern/components/GridPagination.js +1 -1
- package/modern/components/GridPinnedRows.js +4 -0
- package/modern/components/GridRow.js +258 -96
- package/modern/components/GridScrollbarFillerCell.js +39 -0
- package/modern/components/base/GridBody.js +2 -116
- package/modern/components/base/GridOverlays.js +10 -16
- package/modern/components/cell/GridActionsCell.js +1 -1
- package/modern/components/cell/GridCell.js +66 -370
- package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
- package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
- package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
- package/modern/components/containers/GridRoot.js +18 -14
- package/modern/components/containers/GridRootStyles.js +307 -204
- package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
- package/modern/components/panel/GridPanel.js +3 -4
- package/modern/components/panel/filterPanel/GridFilterForm.js +31 -14
- package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
- package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
- package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
- package/modern/components/toolbar/GridToolbarExport.js +6 -1
- package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
- package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
- package/modern/components/toolbar/GridToolbarQuickFilter.js +4 -0
- package/modern/components/virtualization/GridBottomContainer.js +25 -0
- package/modern/components/virtualization/GridMainContainer.js +20 -0
- package/modern/components/virtualization/GridTopContainer.js +35 -0
- package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
- package/modern/components/virtualization/GridVirtualScroller.js +69 -16
- package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
- package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
- package/modern/constants/defaultGridSlotsComponents.js +6 -2
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/core/gridCoreSelector.js +5 -0
- package/modern/hooks/core/useGridInitialization.js +4 -0
- package/modern/hooks/core/useGridLoggerFactory.js +2 -2
- package/modern/hooks/core/useGridRefs.js +13 -0
- package/modern/hooks/core/useGridTheme.js +19 -0
- package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
- package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
- package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
- package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
- package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
- package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
- package/modern/hooks/features/columns/index.js +2 -1
- package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
- package/modern/hooks/features/columns/useGridColumns.js +19 -21
- package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
- package/modern/hooks/features/dimensions/index.js +1 -0
- package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
- package/modern/hooks/features/editing/useGridCellEditing.js +4 -4
- package/modern/hooks/features/editing/useGridRowEditing.js +4 -4
- package/modern/hooks/features/export/serializers/csvSerializer.js +3 -3
- package/modern/hooks/features/export/useGridPrintExport.js +1 -1
- package/modern/hooks/features/filter/gridFilterUtils.js +5 -5
- package/modern/hooks/features/filter/useGridFilter.js +3 -3
- package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
- package/modern/hooks/features/focus/useGridFocus.js +3 -3
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
- package/modern/hooks/features/pagination/gridPaginationUtils.js +2 -2
- package/modern/hooks/features/pagination/useGridPagination.js +3 -5
- package/modern/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
- package/modern/hooks/features/rows/gridRowsUtils.js +6 -6
- package/modern/hooks/features/rows/useGridRows.js +7 -7
- package/modern/hooks/features/rows/useGridRowsMeta.js +9 -6
- package/modern/hooks/features/scroll/useGridScroll.js +8 -9
- package/modern/hooks/features/sorting/gridSortingUtils.js +5 -3
- package/modern/hooks/features/sorting/useGridSorting.js +15 -10
- package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
- package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
- package/modern/hooks/utils/index.js +4 -1
- package/modern/hooks/utils/useGridApiContext.js +1 -1
- package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
- package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
- package/modern/hooks/utils/useGridPrivateApiContext.js +1 -1
- package/modern/hooks/utils/useGridRootProps.js +1 -1
- package/modern/hooks/utils/useGridSelector.js +1 -1
- package/modern/hooks/utils/useResizeObserver.js +36 -0
- package/modern/hooks/utils/useRunOnce.js +18 -0
- package/modern/index.js +1 -2
- package/modern/internals/index.js +9 -7
- package/modern/internals/utils/index.js +2 -1
- package/modern/internals/utils/propValidation.js +19 -0
- package/modern/locales/hrHR.js +149 -0
- package/modern/locales/index.js +4 -1
- package/modern/locales/ptPT.js +149 -0
- package/modern/locales/zhHK.js +149 -0
- package/modern/models/index.js +0 -1
- package/modern/models/params/index.js +1 -2
- package/modern/utils/createSelector.js +1 -1
- package/modern/utils/exportAs.js +1 -1
- package/modern/utils/utils.js +10 -1
- package/node/DataGrid/DataGrid.js +15 -27
- package/node/DataGrid/useDataGridComponent.js +1 -0
- package/node/DataGrid/useDataGridProps.js +1 -0
- package/node/colDef/gridDateColDef.js +1 -1
- package/node/components/GridColumnHeaders.js +3 -11
- package/node/components/GridDetailPanels.js +10 -0
- package/node/components/GridHeaders.js +60 -0
- package/node/components/GridPagination.js +1 -1
- package/node/components/GridPinnedRows.js +10 -0
- package/node/components/GridRow.js +256 -94
- package/node/components/GridScrollbarFillerCell.js +47 -0
- package/node/components/base/GridBody.js +7 -118
- package/node/components/base/GridOverlays.js +9 -15
- package/node/components/cell/GridActionsCell.js +1 -1
- package/node/components/cell/GridCell.js +67 -370
- package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
- package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
- package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
- package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
- package/node/components/containers/GridRoot.js +17 -14
- package/node/components/containers/GridRootStyles.js +175 -72
- package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
- package/node/components/panel/GridPanel.js +3 -4
- package/node/components/panel/filterPanel/GridFilterForm.js +30 -13
- package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
- package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
- package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
- package/node/components/toolbar/GridToolbarExport.js +6 -1
- package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
- package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
- package/node/components/toolbar/GridToolbarQuickFilter.js +4 -0
- package/node/components/virtualization/GridBottomContainer.js +34 -0
- package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
- package/node/components/virtualization/GridTopContainer.js +44 -0
- package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
- package/node/components/virtualization/GridVirtualScroller.js +69 -17
- package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
- package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
- package/node/constants/defaultGridSlotsComponents.js +5 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/core/gridCoreSelector.js +12 -0
- package/node/hooks/core/useGridInitialization.js +4 -0
- package/node/hooks/core/useGridLoggerFactory.js +2 -2
- package/node/hooks/core/useGridRefs.js +22 -0
- package/node/hooks/core/useGridTheme.js +29 -0
- package/node/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
- package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
- package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
- package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
- package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
- package/node/hooks/features/columns/index.js +22 -61
- package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
- package/node/hooks/features/columns/useGridColumns.js +20 -22
- package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
- package/node/hooks/features/dimensions/index.js +11 -0
- package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
- package/node/hooks/features/editing/useGridCellEditing.js +4 -4
- package/node/hooks/features/editing/useGridRowEditing.js +4 -4
- package/node/hooks/features/export/serializers/csvSerializer.js +3 -3
- package/node/hooks/features/export/useGridPrintExport.js +1 -1
- package/node/hooks/features/filter/gridFilterUtils.js +5 -5
- package/node/hooks/features/filter/useGridFilter.js +2 -2
- package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
- package/node/hooks/features/focus/useGridFocus.js +2 -2
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
- package/node/hooks/features/pagination/gridPaginationUtils.js +2 -2
- package/node/hooks/features/pagination/useGridPagination.js +3 -5
- package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/node/hooks/features/rows/gridRowsSelector.js +2 -2
- package/node/hooks/features/rows/gridRowsUtils.js +6 -6
- package/node/hooks/features/rows/useGridRows.js +7 -7
- package/node/hooks/features/rows/useGridRowsMeta.js +7 -5
- package/node/hooks/features/scroll/useGridScroll.js +8 -9
- package/node/hooks/features/sorting/gridSortingUtils.js +5 -3
- package/node/hooks/features/sorting/useGridSorting.js +15 -10
- package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
- package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
- package/node/hooks/utils/index.js +36 -0
- package/node/hooks/utils/useGridApiContext.js +1 -1
- package/node/hooks/utils/useGridAriaAttributes.js +1 -1
- package/node/hooks/utils/useGridNativeEventListener.js +3 -9
- 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/useResizeObserver.js +44 -0
- package/node/hooks/utils/useRunOnce.js +27 -0
- package/node/index.js +1 -13
- package/node/internals/index.js +86 -71
- package/node/internals/utils/index.js +11 -0
- package/node/internals/utils/propValidation.js +26 -0
- package/node/locales/hrHR.js +155 -0
- package/node/locales/index.js +33 -0
- package/node/locales/ptPT.js +155 -0
- package/node/locales/zhHK.js +155 -0
- package/node/models/index.js +0 -11
- package/node/models/params/index.js +0 -11
- package/node/utils/createSelector.js +1 -1
- package/node/utils/exportAs.js +1 -1
- package/node/utils/utils.js +11 -1
- package/package.json +6 -6
- package/utils/createSelector.js +1 -1
- package/utils/exportAs.js +1 -1
- package/utils/utils.d.ts +6 -0
- package/utils/utils.js +10 -1
- package/components/DataGridVirtualScroller.d.ts +0 -3
- package/components/DataGridVirtualScroller.js +0 -35
- package/components/containers/GridMainContainer.js +0 -43
- package/legacy/components/DataGridVirtualScroller.js +0 -32
- package/legacy/components/containers/GridMainContainer.js +0 -45
- package/legacy/models/gridRootContainerRef.js +0 -1
- package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
- package/models/gridRootContainerRef.d.ts +0 -5
- package/models/gridRootContainerRef.js +0 -1
- package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
- package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
- package/modern/components/DataGridVirtualScroller.js +0 -35
- package/modern/components/containers/GridMainContainer.js +0 -42
- package/modern/models/gridRootContainerRef.js +0 -1
- package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
- package/node/components/DataGridVirtualScroller.js +0 -42
- package/node/models/gridRootContainerRef.js +0 -5
- package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
|
@@ -1,136 +1,94 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
1
2
|
import * as React from 'react';
|
|
2
|
-
import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_ownerWindow as ownerWindow } from '@mui/utils';
|
|
3
|
+
import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback, unstable_ownerWindow as ownerWindow } from '@mui/utils';
|
|
3
4
|
import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
|
|
4
5
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
5
6
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
6
|
-
import { gridColumnsTotalWidthSelector } from '../columns';
|
|
7
|
+
import { gridColumnsTotalWidthSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
|
|
8
|
+
import { gridDimensionsSelector } from './gridDimensionsSelectors';
|
|
7
9
|
import { gridDensityFactorSelector } from '../density';
|
|
10
|
+
import { gridRenderContextSelector } from '../virtualization';
|
|
8
11
|
import { useGridSelector } from '../../utils';
|
|
9
12
|
import { getVisibleRows } from '../../utils/useGridVisibleRows';
|
|
10
13
|
import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
11
14
|
import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
|
|
12
15
|
import { getTotalHeaderHeight } from '../columns/gridColumnsUtils';
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
16
|
+
const EMPTY_SIZE = {
|
|
17
|
+
width: 0,
|
|
18
|
+
height: 0
|
|
19
|
+
};
|
|
20
|
+
const EMPTY_DIMENSIONS = {
|
|
21
|
+
isReady: false,
|
|
22
|
+
root: EMPTY_SIZE,
|
|
23
|
+
viewportOuterSize: EMPTY_SIZE,
|
|
24
|
+
viewportInnerSize: EMPTY_SIZE,
|
|
25
|
+
contentSize: EMPTY_SIZE,
|
|
26
|
+
minimumSize: EMPTY_SIZE,
|
|
27
|
+
hasScrollX: false,
|
|
28
|
+
hasScrollY: false,
|
|
29
|
+
scrollbarSize: 0,
|
|
30
|
+
headerHeight: 0,
|
|
31
|
+
rowWidth: 0,
|
|
32
|
+
rowHeight: 0,
|
|
33
|
+
columnsTotalWidth: 0,
|
|
34
|
+
leftPinnedWidth: 0,
|
|
35
|
+
rightPinnedWidth: 0,
|
|
36
|
+
headersTotalHeight: 0,
|
|
37
|
+
topContainerHeight: 0,
|
|
38
|
+
bottomContainerHeight: 0
|
|
39
|
+
};
|
|
40
|
+
export const dimensionsStateInitializer = state => {
|
|
41
|
+
const dimensions = EMPTY_DIMENSIONS;
|
|
42
|
+
return _extends({}, state, {
|
|
43
|
+
dimensions
|
|
44
|
+
});
|
|
36
45
|
};
|
|
37
46
|
export function useGridDimensions(apiRef, props) {
|
|
38
47
|
const logger = useGridLogger(apiRef, 'useResizeContainer');
|
|
39
48
|
const errorShown = React.useRef(false);
|
|
40
|
-
const rootDimensionsRef = React.useRef(
|
|
41
|
-
const fullDimensionsRef = React.useRef(null);
|
|
49
|
+
const rootDimensionsRef = React.useRef(EMPTY_SIZE);
|
|
42
50
|
const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
|
|
51
|
+
const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
|
|
43
52
|
const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
|
|
44
53
|
const rowHeight = Math.floor(props.rowHeight * densityFactor);
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
let scrollBarSize;
|
|
54
|
-
if (props.scrollbarSize != null) {
|
|
55
|
-
scrollBarSize = props.scrollbarSize;
|
|
56
|
-
} else if (!columnsTotalWidth || !rootElement) {
|
|
57
|
-
scrollBarSize = 0;
|
|
58
|
-
} else {
|
|
59
|
-
const doc = ownerDocument(rootElement);
|
|
60
|
-
const scrollDiv = doc.createElement('div');
|
|
61
|
-
scrollDiv.style.width = '99px';
|
|
62
|
-
scrollDiv.style.height = '99px';
|
|
63
|
-
scrollDiv.style.position = 'absolute';
|
|
64
|
-
scrollDiv.style.overflow = 'scroll';
|
|
65
|
-
scrollDiv.className = 'scrollDiv';
|
|
66
|
-
rootElement.appendChild(scrollDiv);
|
|
67
|
-
scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
|
68
|
-
rootElement.removeChild(scrollDiv);
|
|
69
|
-
}
|
|
70
|
-
let viewportOuterSize;
|
|
71
|
-
let hasScrollX;
|
|
72
|
-
let hasScrollY;
|
|
73
|
-
if (props.autoHeight) {
|
|
74
|
-
hasScrollY = false;
|
|
75
|
-
hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
|
|
76
|
-
viewportOuterSize = {
|
|
77
|
-
width: rootDimensionsRef.current.width,
|
|
78
|
-
height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
|
|
79
|
-
};
|
|
80
|
-
} else {
|
|
81
|
-
viewportOuterSize = {
|
|
82
|
-
width: rootDimensionsRef.current.width,
|
|
83
|
-
height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
|
|
84
|
-
};
|
|
85
|
-
const scrollInformation = hasScroll({
|
|
86
|
-
content: {
|
|
87
|
-
width: Math.round(columnsTotalWidth),
|
|
88
|
-
height: rowsMeta.currentPageTotalHeight
|
|
89
|
-
},
|
|
90
|
-
container: {
|
|
91
|
-
width: Math.round(viewportOuterSize.width),
|
|
92
|
-
height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
|
|
93
|
-
},
|
|
94
|
-
scrollBarSize
|
|
95
|
-
});
|
|
96
|
-
hasScrollY = scrollInformation.hasScrollY;
|
|
97
|
-
hasScrollX = scrollInformation.hasScrollX;
|
|
98
|
-
}
|
|
99
|
-
const viewportInnerSize = {
|
|
100
|
-
width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
|
|
101
|
-
height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
|
|
102
|
-
};
|
|
103
|
-
const newFullDimensions = {
|
|
104
|
-
viewportOuterSize,
|
|
105
|
-
viewportInnerSize,
|
|
106
|
-
hasScrollX,
|
|
107
|
-
hasScrollY,
|
|
108
|
-
scrollBarSize
|
|
109
|
-
};
|
|
110
|
-
const prevDimensions = fullDimensionsRef.current;
|
|
111
|
-
fullDimensionsRef.current = newFullDimensions;
|
|
112
|
-
if (newFullDimensions.viewportInnerSize.width !== prevDimensions?.viewportInnerSize.width || newFullDimensions.viewportInnerSize.height !== prevDimensions?.viewportInnerSize.height) {
|
|
113
|
-
apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
|
|
114
|
-
}
|
|
115
|
-
}, [apiRef, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, totalHeaderHeight]);
|
|
54
|
+
const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
|
|
55
|
+
const columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);
|
|
56
|
+
// XXX: The `props as any` below is not resilient to change.
|
|
57
|
+
const hasHeaderFilters = Boolean(props.headerFilters);
|
|
58
|
+
const headersTotalHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight) + Number(hasHeaderFilters) * headerHeight;
|
|
59
|
+
const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
|
|
60
|
+
const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
|
|
116
61
|
const [savedSize, setSavedSize] = React.useState();
|
|
117
62
|
const debouncedSetSavedSize = React.useMemo(() => debounce(setSavedSize, 60), []);
|
|
118
63
|
const previousSize = React.useRef();
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// This is the function called by apiRef.current.resize()
|
|
64
|
+
const getRootDimensions = () => apiRef.current.state.dimensions;
|
|
65
|
+
const setDimensions = useEventCallback(dimensions => {
|
|
66
|
+
apiRef.current.setState(state => _extends({}, state, {
|
|
67
|
+
dimensions
|
|
68
|
+
}));
|
|
69
|
+
});
|
|
127
70
|
const resize = React.useCallback(() => {
|
|
128
|
-
apiRef.current.
|
|
71
|
+
const element = apiRef.current.mainElementRef.current;
|
|
72
|
+
if (!element) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const computedStyle = ownerWindow(element).getComputedStyle(element);
|
|
76
|
+
const height = parseFloat(computedStyle.height) || 0;
|
|
77
|
+
const width = parseFloat(computedStyle.width) || 0;
|
|
78
|
+
const hasHeightChanged = height !== previousSize.current?.height;
|
|
79
|
+
const hasWidthChanged = width !== previousSize.current?.width;
|
|
80
|
+
if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
|
|
81
|
+
const size = {
|
|
82
|
+
width,
|
|
83
|
+
height
|
|
84
|
+
};
|
|
85
|
+
apiRef.current.publishEvent('resize', size);
|
|
86
|
+
previousSize.current = size;
|
|
87
|
+
}
|
|
129
88
|
}, [apiRef]);
|
|
130
|
-
const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
|
|
131
89
|
const getViewportPageSize = React.useCallback(() => {
|
|
132
|
-
const dimensions = apiRef.current.
|
|
133
|
-
if (!dimensions) {
|
|
90
|
+
const dimensions = gridDimensionsSelector(apiRef.current.state);
|
|
91
|
+
if (!dimensions.isReady) {
|
|
134
92
|
return 0;
|
|
135
93
|
}
|
|
136
94
|
const currentPage = getVisibleRows(apiRef, {
|
|
@@ -141,44 +99,135 @@ export function useGridDimensions(apiRef, props) {
|
|
|
141
99
|
// TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
|
|
142
100
|
// to find out the maximum number of rows that can fit in the visible part of the grid
|
|
143
101
|
if (props.getRowHeight) {
|
|
144
|
-
const renderContext = apiRef
|
|
102
|
+
const renderContext = gridRenderContextSelector(apiRef);
|
|
145
103
|
const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
|
|
146
104
|
return Math.min(viewportPageSize - 1, currentPage.rows.length);
|
|
147
105
|
}
|
|
148
106
|
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
149
107
|
return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
|
|
150
108
|
}, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
109
|
+
const updateDimensions = React.useCallback(() => {
|
|
110
|
+
const rootElement = apiRef.current.rootElementRef.current;
|
|
111
|
+
const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
|
|
112
|
+
const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
|
|
113
|
+
const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
|
|
114
|
+
const bottomContainerHeight = pinnedRowsHeight.bottom;
|
|
115
|
+
const contentSize = {
|
|
116
|
+
width: columnsTotalWidth,
|
|
117
|
+
height: rowsMeta.currentPageTotalHeight
|
|
118
|
+
};
|
|
119
|
+
let viewportOuterSize;
|
|
120
|
+
let viewportInnerSize;
|
|
121
|
+
let hasScrollX = false;
|
|
122
|
+
let hasScrollY = false;
|
|
123
|
+
if (props.autoHeight) {
|
|
124
|
+
hasScrollY = false;
|
|
125
|
+
hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
|
|
126
|
+
viewportOuterSize = {
|
|
127
|
+
width: rootDimensionsRef.current.width,
|
|
128
|
+
height: topContainerHeight + bottomContainerHeight + contentSize.height
|
|
166
129
|
};
|
|
167
|
-
|
|
168
|
-
|
|
130
|
+
viewportInnerSize = {
|
|
131
|
+
width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
|
|
132
|
+
height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
|
|
133
|
+
};
|
|
134
|
+
} else {
|
|
135
|
+
viewportOuterSize = {
|
|
136
|
+
width: rootDimensionsRef.current.width,
|
|
137
|
+
height: rootDimensionsRef.current.height
|
|
138
|
+
};
|
|
139
|
+
viewportInnerSize = {
|
|
140
|
+
width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
|
|
141
|
+
height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
|
|
142
|
+
};
|
|
143
|
+
const content = contentSize;
|
|
144
|
+
const container = viewportInnerSize;
|
|
145
|
+
const hasScrollXIfNoYScrollBar = content.width > container.width;
|
|
146
|
+
const hasScrollYIfNoXScrollBar = content.height > container.height;
|
|
147
|
+
if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
|
|
148
|
+
hasScrollY = hasScrollYIfNoXScrollBar;
|
|
149
|
+
hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
|
|
150
|
+
|
|
151
|
+
// We recalculate the scroll y to consider the size of the x scrollbar.
|
|
152
|
+
if (hasScrollX) {
|
|
153
|
+
hasScrollY = content.height + scrollbarSize > container.height;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (hasScrollY) {
|
|
157
|
+
viewportInnerSize.width -= scrollbarSize;
|
|
158
|
+
}
|
|
159
|
+
if (hasScrollX) {
|
|
160
|
+
viewportInnerSize.height -= scrollbarSize;
|
|
161
|
+
}
|
|
169
162
|
}
|
|
170
|
-
|
|
171
|
-
|
|
163
|
+
const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
|
|
164
|
+
const minimumSize = {
|
|
165
|
+
width: contentSize.width,
|
|
166
|
+
height: topContainerHeight + contentSize.height + bottomContainerHeight
|
|
167
|
+
};
|
|
168
|
+
const newDimensions = {
|
|
169
|
+
isReady: true,
|
|
170
|
+
root: rootDimensionsRef.current,
|
|
171
|
+
viewportOuterSize,
|
|
172
|
+
viewportInnerSize,
|
|
173
|
+
contentSize,
|
|
174
|
+
minimumSize,
|
|
175
|
+
hasScrollX,
|
|
176
|
+
hasScrollY,
|
|
177
|
+
scrollbarSize,
|
|
178
|
+
headerHeight,
|
|
179
|
+
rowWidth,
|
|
180
|
+
rowHeight,
|
|
181
|
+
columnsTotalWidth,
|
|
182
|
+
leftPinnedWidth,
|
|
183
|
+
rightPinnedWidth,
|
|
184
|
+
headersTotalHeight,
|
|
185
|
+
topContainerHeight,
|
|
186
|
+
bottomContainerHeight
|
|
187
|
+
};
|
|
188
|
+
const prevDimensions = apiRef.current.state.dimensions;
|
|
189
|
+
setDimensions(newDimensions);
|
|
190
|
+
if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
|
|
191
|
+
apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
|
|
192
|
+
}
|
|
193
|
+
apiRef.current.updateRenderContext?.();
|
|
194
|
+
}, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
|
|
195
|
+
const apiPublic = {
|
|
172
196
|
resize,
|
|
173
197
|
getRootDimensions
|
|
174
198
|
};
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
computeSizeAndPublishResizeEvent
|
|
199
|
+
const apiPrivate = {
|
|
200
|
+
updateDimensions,
|
|
201
|
+
getViewportPageSize
|
|
179
202
|
};
|
|
180
|
-
useGridApiMethod(apiRef,
|
|
181
|
-
useGridApiMethod(apiRef,
|
|
203
|
+
useGridApiMethod(apiRef, apiPublic, 'public');
|
|
204
|
+
useGridApiMethod(apiRef, apiPrivate, 'private');
|
|
205
|
+
useEnhancedEffect(() => {
|
|
206
|
+
if (savedSize) {
|
|
207
|
+
updateDimensions();
|
|
208
|
+
apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
|
|
209
|
+
}
|
|
210
|
+
}, [apiRef, savedSize, updateDimensions]);
|
|
211
|
+
const root = apiRef.current.rootElementRef.current;
|
|
212
|
+
const dimensions = apiRef.current.state.dimensions;
|
|
213
|
+
useEnhancedEffect(() => {
|
|
214
|
+
if (!root) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const set = (k, v) => root.style.setProperty(k, v);
|
|
218
|
+
set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
|
|
219
|
+
set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
|
|
220
|
+
set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
|
|
221
|
+
set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
|
|
222
|
+
set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
|
|
223
|
+
set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
|
|
224
|
+
set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
|
|
225
|
+
set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
|
|
226
|
+
set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
|
|
227
|
+
set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
|
|
228
|
+
set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
|
|
229
|
+
set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
|
|
230
|
+
}, [root, dimensions]);
|
|
182
231
|
const isFirstSizing = React.useRef(true);
|
|
183
232
|
const handleResize = React.useCallback(size => {
|
|
184
233
|
rootDimensionsRef.current = size;
|
|
@@ -193,12 +242,6 @@ export function useGridDimensions(apiRef, props) {
|
|
|
193
242
|
logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
194
243
|
errorShown.current = true;
|
|
195
244
|
}
|
|
196
|
-
if (isTestEnvironment) {
|
|
197
|
-
// We don't need to debounce the resize for tests.
|
|
198
|
-
setSavedSize(size);
|
|
199
|
-
isFirstSizing.current = false;
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
245
|
if (isFirstSizing.current) {
|
|
203
246
|
// We want to initialize the grid dimensions as soon as possible to avoid flickering
|
|
204
247
|
setSavedSize(size);
|
|
@@ -207,10 +250,35 @@ export function useGridDimensions(apiRef, props) {
|
|
|
207
250
|
}
|
|
208
251
|
debouncedSetSavedSize(size);
|
|
209
252
|
}, [props.autoHeight, debouncedSetSavedSize, logger]);
|
|
210
|
-
useEnhancedEffect(
|
|
211
|
-
useGridApiOptionHandler(apiRef, 'sortedRowsSet',
|
|
212
|
-
useGridApiOptionHandler(apiRef, 'paginationModelChange',
|
|
213
|
-
useGridApiOptionHandler(apiRef, 'columnsChange',
|
|
253
|
+
useEnhancedEffect(updateDimensions, [updateDimensions]);
|
|
254
|
+
useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);
|
|
255
|
+
useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);
|
|
256
|
+
useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);
|
|
214
257
|
useGridApiEventHandler(apiRef, 'resize', handleResize);
|
|
215
258
|
useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
|
|
259
|
+
}
|
|
260
|
+
function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
|
|
261
|
+
if (scrollbarSize !== undefined) {
|
|
262
|
+
return scrollbarSize;
|
|
263
|
+
}
|
|
264
|
+
if (rootElement === null || columnsTotalWidth === 0) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
const doc = ownerDocument(rootElement);
|
|
268
|
+
const scrollDiv = doc.createElement('div');
|
|
269
|
+
scrollDiv.style.width = '99px';
|
|
270
|
+
scrollDiv.style.height = '99px';
|
|
271
|
+
scrollDiv.style.position = 'absolute';
|
|
272
|
+
scrollDiv.style.overflow = 'scroll';
|
|
273
|
+
scrollDiv.className = 'scrollDiv';
|
|
274
|
+
rootElement.appendChild(scrollDiv);
|
|
275
|
+
const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
|
276
|
+
rootElement.removeChild(scrollDiv);
|
|
277
|
+
return size;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Get rid of floating point imprecision errors
|
|
281
|
+
// https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
|
|
282
|
+
function roundToDecimalPlaces(value, decimals) {
|
|
283
|
+
return Math.round(value * 10 ** decimals) / 10 ** decimals;
|
|
216
284
|
}
|
|
@@ -14,7 +14,7 @@ import { buildWarning } from '../../../utils/warning';
|
|
|
14
14
|
import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector';
|
|
15
15
|
import { deepClone } from '../../../utils/utils';
|
|
16
16
|
import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
|
|
17
|
-
const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see
|
|
17
|
+
const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
|
|
18
18
|
export const useGridCellEditing = (apiRef, props) => {
|
|
19
19
|
const [cellModesModel, setCellModesModel] = React.useState({});
|
|
20
20
|
const cellModesModelRef = React.useRef(cellModesModel);
|
|
@@ -33,12 +33,12 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
33
33
|
const throwIfNotEditable = React.useCallback((id, field) => {
|
|
34
34
|
const params = apiRef.current.getCellParams(id, field);
|
|
35
35
|
if (!apiRef.current.isCellEditable(params)) {
|
|
36
|
-
throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);
|
|
36
|
+
throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);
|
|
37
37
|
}
|
|
38
38
|
}, [apiRef]);
|
|
39
39
|
const throwIfNotInMode = React.useCallback((id, field, mode) => {
|
|
40
40
|
if (apiRef.current.getCellMode(id, field) !== mode) {
|
|
41
|
-
throw new Error(`MUI: The cell with id=${id} and field=${field} is not in ${mode} mode.`);
|
|
41
|
+
throw new Error(`MUI X: The cell with id=${id} and field=${field} is not in ${mode} mode.`);
|
|
42
42
|
}
|
|
43
43
|
}, [apiRef]);
|
|
44
44
|
const handleCellDoubleClick = React.useCallback((params, event) => {
|
|
@@ -302,7 +302,7 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
302
302
|
});
|
|
303
303
|
if (onProcessRowUpdateError) {
|
|
304
304
|
onProcessRowUpdateError(errorThrown);
|
|
305
|
-
} else {
|
|
305
|
+
} else if (process.env.NODE_ENV !== 'production') {
|
|
306
306
|
missingOnProcessRowUpdateErrorWarning();
|
|
307
307
|
}
|
|
308
308
|
};
|
|
@@ -16,7 +16,7 @@ import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector';
|
|
|
16
16
|
import { deepClone } from '../../../utils/utils';
|
|
17
17
|
import { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';
|
|
18
18
|
import { GRID_ACTIONS_COLUMN_TYPE } from '../../../colDef';
|
|
19
|
-
const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see
|
|
19
|
+
const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
|
|
20
20
|
export const useGridRowEditing = (apiRef, props) => {
|
|
21
21
|
const [rowModesModel, setRowModesModel] = React.useState({});
|
|
22
22
|
const rowModesModelRef = React.useRef(rowModesModel);
|
|
@@ -37,12 +37,12 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
37
37
|
const throwIfNotEditable = React.useCallback((id, field) => {
|
|
38
38
|
const params = apiRef.current.getCellParams(id, field);
|
|
39
39
|
if (!apiRef.current.isCellEditable(params)) {
|
|
40
|
-
throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);
|
|
40
|
+
throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);
|
|
41
41
|
}
|
|
42
42
|
}, [apiRef]);
|
|
43
43
|
const throwIfNotInMode = React.useCallback((id, mode) => {
|
|
44
44
|
if (apiRef.current.getRowMode(id) !== mode) {
|
|
45
|
-
throw new Error(`MUI: The row with id=${id} is not in ${mode} mode.`);
|
|
45
|
+
throw new Error(`MUI X: The row with id=${id} is not in ${mode} mode.`);
|
|
46
46
|
}
|
|
47
47
|
}, [apiRef]);
|
|
48
48
|
const handleCellDoubleClick = React.useCallback((params, event) => {
|
|
@@ -379,7 +379,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
379
379
|
});
|
|
380
380
|
if (onProcessRowUpdateError) {
|
|
381
381
|
onProcessRowUpdateError(errorThrown);
|
|
382
|
-
} else {
|
|
382
|
+
} else if (process.env.NODE_ENV !== 'production') {
|
|
383
383
|
missingOnProcessRowUpdateErrorWarning();
|
|
384
384
|
}
|
|
385
385
|
};
|
|
@@ -32,7 +32,7 @@ export const serializeCellValue = (cellParams, options) => {
|
|
|
32
32
|
}
|
|
33
33
|
return sanitizeCellValue(value, delimiterCharacter);
|
|
34
34
|
};
|
|
35
|
-
const objectFormattedValueWarning = buildWarning(['MUI: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
|
|
35
|
+
const objectFormattedValueWarning = buildWarning(['MUI X: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
|
|
36
36
|
class CSVRow {
|
|
37
37
|
constructor(options) {
|
|
38
38
|
this.options = void 0;
|
|
@@ -104,10 +104,10 @@ export function buildCSV(options) {
|
|
|
104
104
|
const filteredColumns = columns.filter(column => column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field);
|
|
105
105
|
const headerRows = [];
|
|
106
106
|
if (includeColumnGroupsHeaders) {
|
|
107
|
-
const columnGroupLookup = apiRef.current.
|
|
107
|
+
const columnGroupLookup = apiRef.current.getAllGroupDetails();
|
|
108
108
|
let maxColumnGroupsDepth = 0;
|
|
109
109
|
const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {
|
|
110
|
-
const columnGroupPath = apiRef.current.
|
|
110
|
+
const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
|
|
111
111
|
acc[column.field] = columnGroupPath;
|
|
112
112
|
maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
|
|
113
113
|
return acc;
|
|
@@ -206,7 +206,7 @@ export const useGridPrintExport = (apiRef, props) => {
|
|
|
206
206
|
const exportDataAsPrint = React.useCallback(async options => {
|
|
207
207
|
logger.debug(`Export data as Print`);
|
|
208
208
|
if (!apiRef.current.rootElementRef.current) {
|
|
209
|
-
throw new Error('MUI: No grid root element available.');
|
|
209
|
+
throw new Error('MUI X: No grid root element available.');
|
|
210
210
|
}
|
|
211
211
|
previousGridState.current = apiRef.current.exportState();
|
|
212
212
|
// It appends that the visibility model is not exported, especially if columnVisibility is not controlled
|
|
@@ -36,9 +36,9 @@ export const cleanFilterItem = (item, apiRef) => {
|
|
|
36
36
|
}
|
|
37
37
|
return cleanItem;
|
|
38
38
|
};
|
|
39
|
-
const filterModelDisableMultiColumnsFilteringWarning = buildWarning(['MUI: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
|
|
40
|
-
const filterModelMissingItemIdWarning = buildWarning('MUI: The `id` field is required on `filterModel.items` when you use multiple filters.', 'error');
|
|
41
|
-
const filterModelMissingItemOperatorWarning = buildWarning('MUI: The `operator` field is required on `filterModel.items`, one or more of your filtering item has no `operator` provided.', 'error');
|
|
39
|
+
const filterModelDisableMultiColumnsFilteringWarning = buildWarning(['MUI X: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
|
|
40
|
+
const filterModelMissingItemIdWarning = buildWarning('MUI X: The `id` field is required on `filterModel.items` when you use multiple filters.', 'error');
|
|
41
|
+
const filterModelMissingItemOperatorWarning = buildWarning('MUI X: The `operator` field is required on `filterModel.items`, one or more of your filtering item has no `operator` provided.', 'error');
|
|
42
42
|
export const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiRef) => {
|
|
43
43
|
const hasSeveralItems = model.items.length > 1;
|
|
44
44
|
let items;
|
|
@@ -103,11 +103,11 @@ const getFilterCallbackFromItem = (filterItem, apiRef) => {
|
|
|
103
103
|
});
|
|
104
104
|
const filterOperators = column.filterOperators;
|
|
105
105
|
if (!filterOperators?.length) {
|
|
106
|
-
throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
|
|
106
|
+
throw new Error(`MUI X: No filter operators found for column '${column.field}'.`);
|
|
107
107
|
}
|
|
108
108
|
const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operator);
|
|
109
109
|
if (!filterOperator) {
|
|
110
|
-
throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operator}'.`);
|
|
110
|
+
throw new Error(`MUI X: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operator}'.`);
|
|
111
111
|
}
|
|
112
112
|
const publicApiRef = getPublicApiRef(apiRef);
|
|
113
113
|
const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
|
|
@@ -6,7 +6,7 @@ import { useLazyRef } from '../../utils/useLazyRef';
|
|
|
6
6
|
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
7
7
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
8
8
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
9
|
-
import {
|
|
9
|
+
import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
|
|
10
10
|
import { GridPreferencePanelsValue } from '../preferencesPanel/gridPreferencePanelsValue';
|
|
11
11
|
import { getDefaultGridFilterModel } from './gridFilterState';
|
|
12
12
|
import { gridFilterModelSelector } from './gridFilterSelector';
|
|
@@ -309,8 +309,8 @@ export const useGridFilter = (apiRef, props) => {
|
|
|
309
309
|
const handleColumnsChange = React.useCallback(() => {
|
|
310
310
|
logger.debug('onColUpdated - GridColumns changed, applying filters');
|
|
311
311
|
const filterModel = gridFilterModelSelector(apiRef);
|
|
312
|
-
const
|
|
313
|
-
const newFilterItems = filterModel.items.filter(item => item.field &&
|
|
312
|
+
const columnsLookup = gridColumnLookupSelector(apiRef);
|
|
313
|
+
const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);
|
|
314
314
|
if (newFilterItems.length < filterModel.items.length) {
|
|
315
315
|
apiRef.current.setFilterModel(_extends({}, filterModel, {
|
|
316
316
|
items: newFilterItems
|
|
@@ -3,13 +3,9 @@ export const gridFocusStateSelector = state => state.focus;
|
|
|
3
3
|
export const gridFocusCellSelector = createSelector(gridFocusStateSelector, focusState => focusState.cell);
|
|
4
4
|
export const gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeader);
|
|
5
5
|
export const gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
8
|
-
export const unstable_gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
|
|
6
|
+
export const gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
|
|
9
7
|
export const gridTabIndexStateSelector = state => state.tabIndex;
|
|
10
8
|
export const gridTabIndexCellSelector = createSelector(gridTabIndexStateSelector, state => state.cell);
|
|
11
9
|
export const gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeader);
|
|
12
10
|
export const gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeaderFilter);
|
|
13
|
-
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
15
|
-
export const unstable_gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
|
|
11
|
+
export const gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
|
|
@@ -6,7 +6,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
|
6
6
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
7
7
|
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
8
8
|
import { isNavigationKey } from '../../../utils/keyboardUtils';
|
|
9
|
-
import { gridFocusCellSelector,
|
|
9
|
+
import { gridFocusCellSelector, gridFocusColumnGroupHeaderSelector } from './gridFocusStateSelector';
|
|
10
10
|
import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
|
|
11
11
|
import { getVisibleRows } from '../../utils/useGridVisibleRows';
|
|
12
12
|
import { clamp } from '../../../utils/utils';
|
|
@@ -164,7 +164,7 @@ export const useGridFocus = (apiRef, props) => {
|
|
|
164
164
|
});
|
|
165
165
|
apiRef.current.forceUpdate();
|
|
166
166
|
}, [apiRef]);
|
|
167
|
-
const getColumnGroupHeaderFocus = React.useCallback(() =>
|
|
167
|
+
const getColumnGroupHeaderFocus = React.useCallback(() => gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);
|
|
168
168
|
const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {
|
|
169
169
|
let columnIndexToFocus = apiRef.current.getColumnIndex(field);
|
|
170
170
|
const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
|
|
@@ -244,7 +244,7 @@ export const useGridFocus = (apiRef, props) => {
|
|
|
244
244
|
if (event.target !== event.currentTarget) {
|
|
245
245
|
return;
|
|
246
246
|
}
|
|
247
|
-
const focusedColumnGroup =
|
|
247
|
+
const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
|
|
248
248
|
if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {
|
|
249
249
|
// This group cell has already been focused
|
|
250
250
|
return;
|