@mui/x-data-grid 7.0.0-alpha.8 → 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 +379 -2
- package/DataGrid/DataGrid.js +6 -6
- package/DataGrid/useDataGridComponent.js +2 -1
- package/DataGrid/useDataGridProps.js +1 -0
- package/README.md +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/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/GridActionsCellItem.d.ts +2 -2
- package/components/cell/GridCell.d.ts +15 -21
- package/components/cell/GridCell.js +67 -372
- 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.js +3 -4
- package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
- package/components/panel/filterPanel/GridFilterForm.js +31 -14
- 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/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/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/useGridColumnGrouping.d.ts +1 -1
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
- 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/export/serializers/csvSerializer.js +2 -2
- 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/useGridPagination.js +3 -5
- 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 +4 -4
- package/hooks/features/rows/useGridRowsMeta.js +7 -4
- package/hooks/features/scroll/useGridScroll.js +8 -10
- package/hooks/features/sorting/gridSortingUtils.js +1 -1
- 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/useGridAriaAttributes.js +1 -2
- package/hooks/utils/useGridNativeEventListener.js +4 -9
- 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.js +1 -1
- package/internals/index.d.ts +12 -9
- package/internals/index.js +9 -7
- package/legacy/DataGrid/DataGrid.js +6 -6
- package/legacy/DataGrid/useDataGridComponent.js +2 -1
- package/legacy/DataGrid/useDataGridProps.js +1 -0
- package/legacy/components/GridColumnHeaders.js +3 -11
- package/legacy/components/GridDetailPanels.js +4 -0
- package/legacy/components/GridHeaders.js +53 -0
- 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/GridCell.js +69 -377
- 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 +30 -13
- 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/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/useGridRefs.js +13 -0
- package/legacy/hooks/core/useGridTheme.js +21 -0
- package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
- 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/export/serializers/csvSerializer.js +2 -2
- 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/useGridPagination.js +3 -5
- package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
- package/legacy/hooks/features/rows/gridRowsUtils.js +4 -4
- package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
- package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
- package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
- 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/useGridAriaAttributes.js +1 -2
- package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
- package/legacy/hooks/utils/useResizeObserver.js +36 -0
- package/legacy/hooks/utils/useRunOnce.js +18 -0
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +9 -7
- 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/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 +6 -11
- package/modern/DataGrid/DataGrid.js +6 -6
- package/modern/DataGrid/useDataGridComponent.js +2 -1
- package/modern/DataGrid/useDataGridProps.js +1 -0
- package/modern/components/GridColumnHeaders.js +3 -11
- package/modern/components/GridDetailPanels.js +4 -0
- package/modern/components/GridHeaders.js +53 -0
- 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/GridCell.js +65 -369
- 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 +30 -13
- 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/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/useGridRefs.js +13 -0
- package/modern/hooks/core/useGridTheme.js +19 -0
- package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
- 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/export/serializers/csvSerializer.js +2 -2
- 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/useGridPagination.js +3 -5
- package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
- package/modern/hooks/features/rows/gridRowsUtils.js +4 -4
- package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
- package/modern/hooks/features/scroll/useGridScroll.js +8 -9
- package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
- 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/useGridAriaAttributes.js +1 -1
- package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
- package/modern/hooks/utils/useResizeObserver.js +36 -0
- package/modern/hooks/utils/useRunOnce.js +18 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +9 -7
- 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/utils.js +10 -1
- package/node/DataGrid/DataGrid.js +6 -6
- package/node/DataGrid/useDataGridComponent.js +1 -0
- package/node/DataGrid/useDataGridProps.js +1 -0
- package/node/components/GridColumnHeaders.js +3 -11
- package/node/components/GridDetailPanels.js +10 -0
- package/node/components/GridHeaders.js +60 -0
- 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/GridCell.js +66 -369
- 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 +29 -12
- 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/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/useGridRefs.js +22 -0
- package/node/hooks/core/useGridTheme.js +29 -0
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
- 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/export/serializers/csvSerializer.js +2 -2
- 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/useGridPagination.js +3 -5
- package/node/hooks/features/rows/gridRowsSelector.js +2 -2
- package/node/hooks/features/rows/gridRowsUtils.js +4 -4
- package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
- package/node/hooks/features/scroll/useGridScroll.js +8 -9
- package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
- 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/useGridAriaAttributes.js +1 -1
- package/node/hooks/utils/useGridNativeEventListener.js +3 -9
- package/node/hooks/utils/useResizeObserver.js +44 -0
- package/node/hooks/utils/useRunOnce.js +27 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +86 -71
- 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/utils.js +11 -1
- package/package.json +6 -6
- 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
|
}
|
|
@@ -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;
|
|
@@ -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;
|
|
@@ -11,7 +11,7 @@ import { GridCellModes } from '../../../models/gridEditRowModel';
|
|
|
11
11
|
import { isNavigationKey } from '../../../utils/keyboardUtils';
|
|
12
12
|
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
|
|
13
13
|
import { gridPinnedRowsSelector } from '../rows/gridRowsSelector';
|
|
14
|
-
import {
|
|
14
|
+
import { gridFocusColumnGroupHeaderSelector } from '../focus';
|
|
15
15
|
import { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';
|
|
16
16
|
import { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector } from '../headerFiltering/gridHeaderFilteringSelectors';
|
|
17
17
|
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
@@ -137,10 +137,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
137
137
|
// There is one exception for the checkBoxHeader
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
140
|
-
const dimensions = apiRef.current.getRootDimensions();
|
|
141
|
-
if (!dimensions) {
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
140
|
const viewportPageSize = apiRef.current.getViewportPageSize();
|
|
145
141
|
const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
|
|
146
142
|
const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
|
|
@@ -233,10 +229,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
233
229
|
}
|
|
234
230
|
}, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
|
|
235
231
|
const handleHeaderFilterKeyDown = React.useCallback((params, event) => {
|
|
236
|
-
const dimensions = apiRef.current.getRootDimensions();
|
|
237
|
-
if (!dimensions) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
232
|
const isEditing = gridHeaderFilteringEditFieldSelector(apiRef) === params.field;
|
|
241
233
|
const isHeaderMenuOpen = gridHeaderFilteringMenuSelector(apiRef) === params.field;
|
|
242
234
|
if (isEditing || isHeaderMenuOpen || !isNavigationKey(event.key)) {
|
|
@@ -323,11 +315,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
323
315
|
}
|
|
324
316
|
}, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
|
|
325
317
|
const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
|
|
326
|
-
const
|
|
327
|
-
if (!dimensions) {
|
|
328
|
-
return;
|
|
329
|
-
}
|
|
330
|
-
const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
|
|
318
|
+
const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
|
|
331
319
|
if (focusedColumnGroup === null) {
|
|
332
320
|
return;
|
|
333
321
|
}
|
|
@@ -430,8 +418,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
430
418
|
if (!canUpdateFocus) {
|
|
431
419
|
return;
|
|
432
420
|
}
|
|
433
|
-
|
|
434
|
-
if (currentPageRows.length === 0 || !dimensions) {
|
|
421
|
+
if (currentPageRows.length === 0) {
|
|
435
422
|
return;
|
|
436
423
|
}
|
|
437
424
|
const direction = theme.direction;
|
|
@@ -5,7 +5,6 @@ import { gridDensityFactorSelector } from '../density';
|
|
|
5
5
|
import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
|
|
6
6
|
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
7
7
|
import { gridPaginationModelSelector } from './gridPaginationSelector';
|
|
8
|
-
import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
|
|
9
8
|
import { getPageCount, noRowCountInServerMode, defaultPageSize, throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel, getValidPage } from './gridPaginationUtils';
|
|
10
9
|
export const paginationStateInitializer = (state, props) => {
|
|
11
10
|
const paginationModel = _extends({}, getDefaultGridPaginationModel(props.autoPageSize), props.paginationModel ?? props.initialState?.pagination?.paginationModel);
|
|
@@ -137,12 +136,11 @@ export const useGridPagination = (apiRef, props) => {
|
|
|
137
136
|
apiRef.current.forceUpdate();
|
|
138
137
|
};
|
|
139
138
|
const handleUpdateAutoPageSize = React.useCallback(() => {
|
|
140
|
-
|
|
141
|
-
if (!props.autoPageSize || !dimensions) {
|
|
139
|
+
if (!props.autoPageSize) {
|
|
142
140
|
return;
|
|
143
141
|
}
|
|
144
|
-
const
|
|
145
|
-
const maximumPageSizeWithoutScrollBar = Math.floor(
|
|
142
|
+
const dimensions = apiRef.current.getRootDimensions();
|
|
143
|
+
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
146
144
|
apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
|
|
147
145
|
}, [apiRef, props.autoPageSize, rowHeight]);
|
|
148
146
|
useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
|
|
@@ -33,11 +33,11 @@ export const gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGr
|
|
|
33
33
|
bottom: rawPinnedRows?.bottom?.map(rowEntry => ({
|
|
34
34
|
id: rowEntry.id,
|
|
35
35
|
model: rowEntry.model ?? {}
|
|
36
|
-
})),
|
|
36
|
+
})) ?? [],
|
|
37
37
|
top: rawPinnedRows?.top?.map(rowEntry => ({
|
|
38
38
|
id: rowEntry.id,
|
|
39
39
|
model: rowEntry.model ?? {}
|
|
40
|
-
}))
|
|
40
|
+
})) ?? []
|
|
41
41
|
};
|
|
42
42
|
});
|
|
43
43
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import { gridPinnedRowsSelector } from './gridRowsSelector';
|
|
3
|
-
import {
|
|
3
|
+
import { gridDimensionsSelector } from '../dimensions';
|
|
4
4
|
export const GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;
|
|
5
5
|
export const GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
|
|
6
6
|
export const buildRootGroup = () => ({
|
|
@@ -275,7 +275,7 @@ export function calculatePinnedRowsHeight(apiRef) {
|
|
|
275
275
|
bottom: bottomPinnedRowsHeight
|
|
276
276
|
};
|
|
277
277
|
}
|
|
278
|
-
export function getMinimalContentHeight(apiRef
|
|
279
|
-
const
|
|
280
|
-
return `var(--DataGrid-overlayHeight, ${2 *
|
|
278
|
+
export function getMinimalContentHeight(apiRef) {
|
|
279
|
+
const dimensions = gridDimensionsSelector(apiRef.current.state);
|
|
280
|
+
return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
|
|
281
281
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { unstable_debounce as debounce
|
|
3
|
+
import { unstable_debounce as debounce } from '@mui/utils';
|
|
4
4
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
5
5
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
6
6
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
@@ -11,6 +11,9 @@ import { gridSortModelSelector } from '../sorting/gridSortingSelector';
|
|
|
11
11
|
import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
|
|
12
12
|
import { gridPinnedRowsSelector } from './gridRowsSelector';
|
|
13
13
|
import { DATA_GRID_PROPS_DEFAULT_VALUES } from '../../../DataGrid/useDataGridProps';
|
|
14
|
+
|
|
15
|
+
// TODO: I think the row heights can now be encoded as a single `size` instead of `sizes.baseXxxx`
|
|
16
|
+
|
|
14
17
|
export const rowsMetaStateInitializer = state => _extends({}, state, {
|
|
15
18
|
rowsMeta: {
|
|
16
19
|
currentPageTotalHeight: 0,
|
|
@@ -174,15 +177,15 @@ export const useGridRowsMeta = (apiRef, props) => {
|
|
|
174
177
|
hydrateRowsMeta();
|
|
175
178
|
}, [hydrateRowsMeta]);
|
|
176
179
|
const debouncedHydrateRowsMeta = React.useMemo(() => debounce(hydrateRowsMeta, props.rowPositionsDebounceMs), [hydrateRowsMeta, props.rowPositionsDebounceMs]);
|
|
177
|
-
const storeMeasuredRowHeight = React.useCallback((id, height
|
|
180
|
+
const storeMeasuredRowHeight = React.useCallback((id, height) => {
|
|
178
181
|
if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
|
|
179
182
|
return;
|
|
180
183
|
}
|
|
181
184
|
|
|
182
185
|
// Only trigger hydration if the value is different, otherwise we trigger a loop
|
|
183
|
-
const needsHydration = rowsHeightLookup.current[id].sizes
|
|
186
|
+
const needsHydration = rowsHeightLookup.current[id].sizes.baseCenter !== height;
|
|
184
187
|
rowsHeightLookup.current[id].needsFirstMeasurement = false;
|
|
185
|
-
rowsHeightLookup.current[id].sizes
|
|
188
|
+
rowsHeightLookup.current[id].sizes.baseCenter = height;
|
|
186
189
|
if (needsHydration) {
|
|
187
190
|
debouncedHydrateRowsMeta();
|
|
188
191
|
}
|