@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,145 +1,81 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
|
-
import
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
5
|
-
var _excluded = ["style"],
|
|
6
|
-
_excluded2 = ["style"];
|
|
7
4
|
import * as React from 'react';
|
|
8
5
|
import * as ReactDOM from 'react-dom';
|
|
9
|
-
import {
|
|
6
|
+
import { unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback } from '@mui/utils';
|
|
10
7
|
import { useTheme } from '@mui/material/styles';
|
|
11
8
|
import { defaultMemoize } from 'reselect';
|
|
12
9
|
import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';
|
|
13
10
|
import { useGridRootProps } from '../../utils/useGridRootProps';
|
|
14
11
|
import { useGridSelector } from '../../utils/useGridSelector';
|
|
15
|
-
import {
|
|
12
|
+
import { useLazyRef } from '../../utils/useLazyRef';
|
|
13
|
+
import { useResizeObserver } from '../../utils/useResizeObserver';
|
|
14
|
+
import { useRunOnce } from '../../utils/useRunOnce';
|
|
15
|
+
import { gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';
|
|
16
|
+
import { gridDimensionsSelector } from '../dimensions/gridDimensionsSelectors';
|
|
17
|
+
import { gridPinnedRowsSelector } from '../rows/gridRowsSelector';
|
|
16
18
|
import { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';
|
|
17
|
-
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
18
|
-
import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
19
|
+
import { useGridVisibleRows, getVisibleRows } from '../../utils/useGridVisibleRows';
|
|
19
20
|
import { clamp } from '../../../utils/utils';
|
|
20
21
|
import { selectedIdsLookupSelector } from '../rowSelection/gridRowSelectionSelector';
|
|
21
22
|
import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
22
23
|
import { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils';
|
|
23
24
|
import { getMinimalContentHeight } from '../rows/gridRowsUtils';
|
|
24
|
-
import { gridVirtualizationEnabledSelector, gridVirtualizationColumnEnabledSelector } from './gridVirtualizationSelectors';
|
|
25
|
-
|
|
26
|
-
// Uses binary search to avoid looping through all possible positions
|
|
25
|
+
import { gridRenderContextSelector, gridVirtualizationEnabledSelector, gridVirtualizationColumnEnabledSelector } from './gridVirtualizationSelectors';
|
|
26
|
+
import { EMPTY_RENDER_CONTEXT } from './useGridVirtualization';
|
|
27
27
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
var sliceEnd = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : positions.length;
|
|
31
|
-
if (positions.length <= 0) {
|
|
32
|
-
return -1;
|
|
33
|
-
}
|
|
34
|
-
if (sliceStart >= sliceEnd) {
|
|
35
|
-
return sliceStart;
|
|
36
|
-
}
|
|
37
|
-
var pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);
|
|
38
|
-
var itemOffset = positions[pivot];
|
|
39
|
-
return offset <= itemOffset ? binarySearch(offset, positions, sliceStart, pivot) : binarySearch(offset, positions, pivot + 1, sliceEnd);
|
|
40
|
-
}
|
|
41
|
-
function exponentialSearch(offset, positions, index) {
|
|
42
|
-
var interval = 1;
|
|
43
|
-
while (index < positions.length && Math.abs(positions[index]) < offset) {
|
|
44
|
-
index += interval;
|
|
45
|
-
interval *= 2;
|
|
46
|
-
}
|
|
47
|
-
return binarySearch(offset, positions, Math.floor(index / 2), Math.min(index, positions.length));
|
|
48
|
-
}
|
|
49
|
-
export var getRenderableIndexes = function getRenderableIndexes(_ref) {
|
|
50
|
-
var firstIndex = _ref.firstIndex,
|
|
51
|
-
lastIndex = _ref.lastIndex,
|
|
52
|
-
buffer = _ref.buffer,
|
|
53
|
-
minFirstIndex = _ref.minFirstIndex,
|
|
54
|
-
maxLastIndex = _ref.maxLastIndex;
|
|
55
|
-
return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
56
|
-
};
|
|
57
|
-
export var areRenderContextsEqual = function areRenderContextsEqual(context1, context2) {
|
|
58
|
-
if (context1 === context2) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;
|
|
62
|
-
};
|
|
63
|
-
// The `maxSize` is 3 so that reselect caches the `renderedColumns` values for the pinned left,
|
|
64
|
-
// unpinned, and pinned right sections.
|
|
65
|
-
var MEMOIZE_OPTIONS = {
|
|
66
|
-
maxSize: 3
|
|
67
|
-
};
|
|
68
|
-
export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
69
|
-
var _currentPage$range3, _currentPage$range4;
|
|
28
|
+
export var EMPTY_DETAIL_PANELS = Object.freeze(new Map());
|
|
29
|
+
export var useGridVirtualScroller = function useGridVirtualScroller() {
|
|
70
30
|
var apiRef = useGridPrivateApiContext();
|
|
71
31
|
var rootProps = useGridRootProps();
|
|
72
32
|
var visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
|
|
73
33
|
var enabled = useGridSelector(apiRef, gridVirtualizationEnabledSelector);
|
|
74
34
|
var enabledForColumns = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
|
|
75
|
-
var
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
35
|
+
var dimensions = useGridSelector(apiRef, gridDimensionsSelector);
|
|
36
|
+
var outerSize = dimensions.viewportOuterSize;
|
|
37
|
+
var pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);
|
|
38
|
+
var pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
|
|
39
|
+
var hasBottomPinnedRows = pinnedRows.bottom.length > 0;
|
|
40
|
+
var _React$useState = React.useState(EMPTY_DETAIL_PANELS),
|
|
41
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
42
|
+
panels = _React$useState2[0],
|
|
43
|
+
setPanels = _React$useState2[1];
|
|
82
44
|
var theme = useTheme();
|
|
83
45
|
var columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
|
|
84
|
-
var columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
|
|
85
46
|
var cellFocus = useGridSelector(apiRef, gridFocusCellSelector);
|
|
86
47
|
var cellTabIndex = useGridSelector(apiRef, gridTabIndexCellSelector);
|
|
87
48
|
var rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
|
|
88
49
|
var selectedRowsLookup = useGridSelector(apiRef, selectedIdsLookupSelector);
|
|
89
50
|
var currentPage = useGridVisibleRows(apiRef, rootProps);
|
|
51
|
+
var gridRootRef = apiRef.current.rootElementRef;
|
|
52
|
+
var mainRef = apiRef.current.mainElementRef;
|
|
53
|
+
var scrollerRef = apiRef.current.virtualScrollerRef;
|
|
90
54
|
var renderZoneRef = React.useRef(null);
|
|
91
|
-
var
|
|
92
|
-
var
|
|
93
|
-
var
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
55
|
+
var scrollbarVerticalRef = React.useRef(null);
|
|
56
|
+
var scrollbarHorizontalRef = React.useRef(null);
|
|
57
|
+
var contentHeight = dimensions.contentSize.height;
|
|
58
|
+
var columnsTotalWidth = dimensions.columnsTotalWidth;
|
|
59
|
+
useResizeObserver(mainRef, function () {
|
|
60
|
+
return apiRef.current.resize();
|
|
61
|
+
});
|
|
62
|
+
var previousContext = React.useRef(EMPTY_RENDER_CONTEXT);
|
|
63
|
+
var previousRowContext = React.useRef(EMPTY_RENDER_CONTEXT);
|
|
64
|
+
var renderContext = useGridSelector(apiRef, gridRenderContextSelector);
|
|
98
65
|
var scrollPosition = React.useRef({
|
|
99
66
|
top: 0,
|
|
100
67
|
left: 0
|
|
101
|
-
});
|
|
102
|
-
var _React$useState3 = React.useState({
|
|
103
|
-
width: null,
|
|
104
|
-
height: null
|
|
105
|
-
}),
|
|
106
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
107
|
-
containerDimensions = _React$useState4[0],
|
|
108
|
-
setContainerDimensions = _React$useState4[1];
|
|
68
|
+
}).current;
|
|
109
69
|
var prevTotalWidth = React.useRef(columnsTotalWidth);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
117
|
-
hoveredRowId = _React$useState6[0],
|
|
118
|
-
setHoveredRowId = _React$useState6[1];
|
|
119
|
-
var rowStyleCache = React.useRef(Object.create(null));
|
|
120
|
-
var prevGetRowProps = React.useRef();
|
|
121
|
-
var prevRootRowStyle = React.useRef();
|
|
122
|
-
var getRenderedColumnsRef = React.useRef(defaultMemoize(function (columns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, indexOfColumnWithFocusedCell) {
|
|
123
|
-
// If the selected column is not within the current range of columns being displayed,
|
|
124
|
-
// we need to render it at either the left or right of the columns,
|
|
125
|
-
// depending on whether it is above or below the range.
|
|
126
|
-
var focusedCellColumnIndexNotInRange;
|
|
127
|
-
var renderedColumns = columns.slice(firstColumnToRender, lastColumnToRender);
|
|
128
|
-
if (indexOfColumnWithFocusedCell > -1) {
|
|
129
|
-
// check if it is not on the left pinned column.
|
|
130
|
-
if (firstColumnToRender > indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell >= minFirstColumn) {
|
|
131
|
-
focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;
|
|
132
|
-
}
|
|
133
|
-
// check if it is not on the right pinned column.
|
|
134
|
-
else if (lastColumnToRender < indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell < maxLastColumn) {
|
|
135
|
-
focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;
|
|
136
|
-
}
|
|
70
|
+
var getRenderedColumns = useLazyRef(createGetRenderedColumns).current;
|
|
71
|
+
var indexOfRowWithFocusedCell = React.useMemo(function () {
|
|
72
|
+
if (cellFocus !== null) {
|
|
73
|
+
return currentPage.rows.findIndex(function (row) {
|
|
74
|
+
return row.id === cellFocus.id;
|
|
75
|
+
});
|
|
137
76
|
}
|
|
138
|
-
return
|
|
139
|
-
|
|
140
|
-
renderedColumns: renderedColumns
|
|
141
|
-
};
|
|
142
|
-
}, MEMOIZE_OPTIONS));
|
|
77
|
+
return -1;
|
|
78
|
+
}, [cellFocus, currentPage.rows]);
|
|
143
79
|
var indexOfColumnWithFocusedCell = React.useMemo(function () {
|
|
144
80
|
if (cellFocus !== null) {
|
|
145
81
|
return visibleColumns.findIndex(function (column) {
|
|
@@ -148,187 +84,77 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
148
84
|
}
|
|
149
85
|
return -1;
|
|
150
86
|
}, [cellFocus, visibleColumns]);
|
|
151
|
-
|
|
152
|
-
var
|
|
153
|
-
var
|
|
154
|
-
var
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
// were measured, then use a binary search because it's faster.
|
|
163
|
-
return binarySearch(offset, rowsMeta.positions);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Otherwise, use an exponential search.
|
|
167
|
-
// If rows have "auto" as height, their positions will be based on estimated heights.
|
|
168
|
-
// In this case, we can skip several steps until we find a position higher than the offset.
|
|
169
|
-
// Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js
|
|
170
|
-
return exponentialSearch(offset, rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage);
|
|
171
|
-
}, [apiRef, (_currentPage$range3 = currentPage.range) == null ? void 0 : _currentPage$range3.firstRowIndex, (_currentPage$range4 = currentPage.range) == null ? void 0 : _currentPage$range4.lastRowIndex, rowsMeta.positions]);
|
|
172
|
-
var computeRenderContext = React.useCallback(function () {
|
|
173
|
-
if (!enabled) {
|
|
174
|
-
return {
|
|
175
|
-
firstRowIndex: 0,
|
|
176
|
-
lastRowIndex: currentPage.rows.length,
|
|
177
|
-
firstColumnIndex: 0,
|
|
178
|
-
lastColumnIndex: visibleColumns.length
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
var _ref2 = scrollPosition.current,
|
|
182
|
-
top = _ref2.top,
|
|
183
|
-
left = _ref2.left;
|
|
184
|
-
|
|
185
|
-
// Clamp the value because the search may return an index out of bounds.
|
|
186
|
-
// In the last index, this is not needed because Array.slice doesn't include it.
|
|
187
|
-
var firstRowIndex = Math.min(getNearestIndexToRender(top), rowsMeta.positions.length - 1);
|
|
188
|
-
var lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getNearestIndexToRender(top + containerDimensions.height);
|
|
189
|
-
var firstColumnIndex = 0;
|
|
190
|
-
var lastColumnIndex = columnPositions.length;
|
|
191
|
-
if (enabledForColumns) {
|
|
192
|
-
var hasRowWithAutoHeight = false;
|
|
193
|
-
var _getRenderableIndexes = getRenderableIndexes({
|
|
194
|
-
firstIndex: firstRowIndex,
|
|
195
|
-
lastIndex: lastRowIndex,
|
|
196
|
-
minFirstIndex: 0,
|
|
197
|
-
maxLastIndex: currentPage.rows.length,
|
|
198
|
-
buffer: rootProps.rowBuffer
|
|
199
|
-
}),
|
|
200
|
-
_getRenderableIndexes2 = _slicedToArray(_getRenderableIndexes, 2),
|
|
201
|
-
firstRowToRender = _getRenderableIndexes2[0],
|
|
202
|
-
lastRowToRender = _getRenderableIndexes2[1];
|
|
203
|
-
for (var i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {
|
|
204
|
-
var row = currentPage.rows[i];
|
|
205
|
-
hasRowWithAutoHeight = apiRef.current.rowHasAutoHeight(row.id);
|
|
206
|
-
}
|
|
207
|
-
if (!hasRowWithAutoHeight) {
|
|
208
|
-
firstColumnIndex = binarySearch(Math.abs(left), columnPositions);
|
|
209
|
-
lastColumnIndex = binarySearch(Math.abs(left) + containerDimensions.width, columnPositions);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return {
|
|
213
|
-
firstRowIndex: firstRowIndex,
|
|
214
|
-
lastRowIndex: lastRowIndex,
|
|
215
|
-
firstColumnIndex: firstColumnIndex,
|
|
216
|
-
lastColumnIndex: lastColumnIndex
|
|
217
|
-
};
|
|
218
|
-
}, [enabled, enabledForColumns, getNearestIndexToRender, rowsMeta.positions.length, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerDimensions]);
|
|
219
|
-
useEnhancedEffect(function () {
|
|
220
|
-
if (enabled) {
|
|
221
|
-
// TODO a scroll reset should not be necessary
|
|
222
|
-
rootRef.current.scrollLeft = 0;
|
|
223
|
-
rootRef.current.scrollTop = 0;
|
|
224
|
-
} else {
|
|
225
|
-
renderZoneRef.current.style.transform = "translate3d(0px, 0px, 0px)";
|
|
87
|
+
React.useEffect(function () {
|
|
88
|
+
var _gridRootRef$current, _gridRootRef$current2;
|
|
89
|
+
var direction = theme.direction === 'ltr' ? 1 : -1;
|
|
90
|
+
var top = gridRowsMetaSelector(apiRef.current.state).positions[renderContext.firstRowIndex];
|
|
91
|
+
var left = direction * columnPositions[renderContext.firstColumnIndex] - columnPositions[pinnedColumns.left.length];
|
|
92
|
+
(_gridRootRef$current = gridRootRef.current) == null || _gridRootRef$current.style.setProperty('--DataGrid-offsetTop', "".concat(top, "px"));
|
|
93
|
+
(_gridRootRef$current2 = gridRootRef.current) == null || _gridRootRef$current2.style.setProperty('--DataGrid-offsetLeft', "".concat(left, "px"));
|
|
94
|
+
}, [apiRef, gridRootRef, theme.direction, columnPositions, pinnedColumns.left.length, renderContext]);
|
|
95
|
+
var updateRenderContext = React.useCallback(function (nextRenderContext, rawRenderContext) {
|
|
96
|
+
if (areRenderContextsEqual(nextRenderContext, apiRef.current.state.virtualization.renderContext)) {
|
|
97
|
+
return;
|
|
226
98
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}, [rowsMeta.currentPageTotalHeight]);
|
|
234
|
-
var handleResize = React.useCallback(function () {
|
|
235
|
-
if (rootRef.current) {
|
|
236
|
-
setContainerDimensions({
|
|
237
|
-
width: rootRef.current.clientWidth,
|
|
238
|
-
height: rootRef.current.clientHeight
|
|
99
|
+
var didRowsIntervalChange = nextRenderContext.firstRowIndex !== previousRowContext.current.firstRowIndex || nextRenderContext.lastRowIndex !== previousRowContext.current.lastRowIndex;
|
|
100
|
+
apiRef.current.setState(function (state) {
|
|
101
|
+
return _extends({}, state, {
|
|
102
|
+
virtualization: _extends({}, state.virtualization, {
|
|
103
|
+
renderContext: nextRenderContext
|
|
104
|
+
})
|
|
239
105
|
});
|
|
240
|
-
}
|
|
241
|
-
}, []);
|
|
242
|
-
useGridApiEventHandler(apiRef, 'debouncedResize', handleResize);
|
|
243
|
-
var updateRenderZonePosition = React.useCallback(function (nextRenderContext) {
|
|
244
|
-
var _getRenderableIndexes3 = getRenderableIndexes({
|
|
245
|
-
firstIndex: nextRenderContext.firstRowIndex,
|
|
246
|
-
lastIndex: nextRenderContext.lastRowIndex,
|
|
247
|
-
minFirstIndex: 0,
|
|
248
|
-
maxLastIndex: currentPage.rows.length,
|
|
249
|
-
buffer: rootProps.rowBuffer
|
|
250
|
-
}),
|
|
251
|
-
_getRenderableIndexes4 = _slicedToArray(_getRenderableIndexes3, 2),
|
|
252
|
-
firstRowToRender = _getRenderableIndexes4[0],
|
|
253
|
-
lastRowToRender = _getRenderableIndexes4[1];
|
|
254
|
-
var _getRenderableIndexes5 = getRenderableIndexes({
|
|
255
|
-
firstIndex: nextRenderContext.firstColumnIndex,
|
|
256
|
-
lastIndex: nextRenderContext.lastColumnIndex,
|
|
257
|
-
minFirstIndex: renderZoneMinColumnIndex,
|
|
258
|
-
maxLastIndex: renderZoneMaxColumnIndex,
|
|
259
|
-
buffer: rootProps.columnBuffer
|
|
260
|
-
}),
|
|
261
|
-
_getRenderableIndexes6 = _slicedToArray(_getRenderableIndexes5, 1),
|
|
262
|
-
initialFirstColumnToRender = _getRenderableIndexes6[0];
|
|
263
|
-
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
264
|
-
firstColumnToRender: initialFirstColumnToRender,
|
|
265
|
-
apiRef: apiRef,
|
|
266
|
-
firstRowToRender: firstRowToRender,
|
|
267
|
-
lastRowToRender: lastRowToRender,
|
|
268
|
-
visibleRows: currentPage.rows
|
|
269
106
|
});
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
left: left
|
|
278
|
-
});
|
|
107
|
+
|
|
108
|
+
// The lazy-loading hook is listening to `renderedRowsIntervalChange`,
|
|
109
|
+
// but only does something if the dimensions are also available.
|
|
110
|
+
// So we wait until we have valid dimensions before publishing the first event.
|
|
111
|
+
if (dimensions.isReady && didRowsIntervalChange) {
|
|
112
|
+
previousRowContext.current = nextRenderContext;
|
|
113
|
+
apiRef.current.publishEvent('renderedRowsIntervalChange', nextRenderContext);
|
|
279
114
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
115
|
+
previousContext.current = rawRenderContext;
|
|
116
|
+
prevTotalWidth.current = dimensions.columnsTotalWidth;
|
|
117
|
+
}, [apiRef, dimensions.isReady, dimensions.columnsTotalWidth]);
|
|
118
|
+
var triggerUpdateRenderContext = function triggerUpdateRenderContext() {
|
|
119
|
+
var inputs = inputsSelector(apiRef, rootProps, enabled, enabledForColumns);
|
|
120
|
+
var _computeRenderContext = computeRenderContext(inputs, scrollPosition),
|
|
121
|
+
_computeRenderContext2 = _slicedToArray(_computeRenderContext, 2),
|
|
122
|
+
nextRenderContext = _computeRenderContext2[0],
|
|
123
|
+
rawRenderContext = _computeRenderContext2[1];
|
|
124
|
+
|
|
125
|
+
// Since previous render, we have scrolled...
|
|
126
|
+
var topRowsScrolled = Math.abs(rawRenderContext.firstRowIndex - previousContext.current.firstRowIndex);
|
|
127
|
+
var bottomRowsScrolled = Math.abs(rawRenderContext.lastRowIndex - previousContext.current.lastRowIndex);
|
|
128
|
+
var topColumnsScrolled = Math.abs(rawRenderContext.firstColumnIndex - previousContext.current.firstColumnIndex);
|
|
129
|
+
var bottomColumnsScrolled = Math.abs(rawRenderContext.lastColumnIndex - previousContext.current.lastColumnIndex);
|
|
130
|
+
var shouldUpdate = topRowsScrolled >= rootProps.rowThreshold || bottomRowsScrolled >= rootProps.rowThreshold || topColumnsScrolled >= rootProps.columnThreshold || bottomColumnsScrolled >= rootProps.columnThreshold || prevTotalWidth.current !== dimensions.columnsTotalWidth;
|
|
131
|
+
if (!shouldUpdate) {
|
|
132
|
+
return previousContext.current;
|
|
288
133
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
lastIndex: nextRenderContext.lastRowIndex,
|
|
294
|
-
minFirstIndex: 0,
|
|
295
|
-
maxLastIndex: currentPage.rows.length,
|
|
296
|
-
buffer: rootProps.rowBuffer
|
|
297
|
-
}),
|
|
298
|
-
_getRenderableIndexes8 = _slicedToArray(_getRenderableIndexes7, 2),
|
|
299
|
-
firstRowToRender = _getRenderableIndexes8[0],
|
|
300
|
-
lastRowToRender = _getRenderableIndexes8[1];
|
|
301
|
-
apiRef.current.publishEvent('renderedRowsIntervalChange', {
|
|
302
|
-
firstRowToRender: firstRowToRender,
|
|
303
|
-
lastRowToRender: lastRowToRender
|
|
134
|
+
|
|
135
|
+
// Prevents batching render context changes
|
|
136
|
+
ReactDOM.flushSync(function () {
|
|
137
|
+
updateRenderContext(nextRenderContext, rawRenderContext);
|
|
304
138
|
});
|
|
305
|
-
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
left = _ref3.left;
|
|
316
|
-
var params = {
|
|
317
|
-
top: top,
|
|
318
|
-
left: left,
|
|
319
|
-
renderContext: initialRenderContext
|
|
320
|
-
};
|
|
321
|
-
apiRef.current.publishEvent('scrollPositionChange', params);
|
|
322
|
-
}, [apiRef, computeRenderContext, containerDimensions.width, setRenderContext]);
|
|
139
|
+
return nextRenderContext;
|
|
140
|
+
};
|
|
141
|
+
var forceUpdateRenderContext = function forceUpdateRenderContext() {
|
|
142
|
+
var inputs = inputsSelector(apiRef, rootProps, enabled, enabledForColumns);
|
|
143
|
+
var _computeRenderContext3 = computeRenderContext(inputs, scrollPosition),
|
|
144
|
+
_computeRenderContext4 = _slicedToArray(_computeRenderContext3, 2),
|
|
145
|
+
nextRenderContext = _computeRenderContext4[0],
|
|
146
|
+
rawRenderContext = _computeRenderContext4[1];
|
|
147
|
+
updateRenderContext(nextRenderContext, rawRenderContext);
|
|
148
|
+
};
|
|
323
149
|
var handleScroll = useEventCallback(function (event) {
|
|
324
150
|
var _event$currentTarget = event.currentTarget,
|
|
325
151
|
scrollTop = _event$currentTarget.scrollTop,
|
|
326
152
|
scrollLeft = _event$currentTarget.scrollLeft;
|
|
327
|
-
scrollPosition.
|
|
328
|
-
scrollPosition.
|
|
153
|
+
scrollPosition.top = scrollTop;
|
|
154
|
+
scrollPosition.left = scrollLeft;
|
|
329
155
|
|
|
330
156
|
// On iOS and macOS, negative offsets are possible when swiping past the start
|
|
331
|
-
if (
|
|
157
|
+
if (scrollTop < 0) {
|
|
332
158
|
return;
|
|
333
159
|
}
|
|
334
160
|
if (theme.direction === 'ltr') {
|
|
@@ -341,26 +167,12 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
341
167
|
return;
|
|
342
168
|
}
|
|
343
169
|
}
|
|
344
|
-
|
|
345
|
-
// When virtualization is disabled, the context never changes during scroll
|
|
346
|
-
var nextRenderContext = enabled ? computeRenderContext() : prevRenderContext.current;
|
|
347
|
-
var topRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstRowIndex - prevRenderContext.current.firstRowIndex);
|
|
348
|
-
var bottomRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastRowIndex - prevRenderContext.current.lastRowIndex);
|
|
349
|
-
var topColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstColumnIndex - prevRenderContext.current.firstColumnIndex);
|
|
350
|
-
var bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);
|
|
351
|
-
var shouldSetState = topRowsScrolledSincePreviousRender >= rootProps.rowThreshold || bottomRowsScrolledSincePreviousRender >= rootProps.rowThreshold || topColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || bottomColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || prevTotalWidth.current !== columnsTotalWidth;
|
|
170
|
+
var nextRenderContext = triggerUpdateRenderContext();
|
|
352
171
|
apiRef.current.publishEvent('scrollPositionChange', {
|
|
353
172
|
top: scrollTop,
|
|
354
173
|
left: scrollLeft,
|
|
355
|
-
renderContext:
|
|
356
|
-
}
|
|
357
|
-
if (shouldSetState) {
|
|
358
|
-
// Prevents batching render context changes
|
|
359
|
-
ReactDOM.flushSync(function () {
|
|
360
|
-
setRenderContext(nextRenderContext);
|
|
361
|
-
});
|
|
362
|
-
prevTotalWidth.current = columnsTotalWidth;
|
|
363
|
-
}
|
|
174
|
+
renderContext: nextRenderContext
|
|
175
|
+
});
|
|
364
176
|
});
|
|
365
177
|
var handleWheel = useEventCallback(function (event) {
|
|
366
178
|
apiRef.current.publishEvent('virtualScrollerWheel', {}, event);
|
|
@@ -368,262 +180,235 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
368
180
|
var handleTouchMove = useEventCallback(function (event) {
|
|
369
181
|
apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);
|
|
370
182
|
});
|
|
371
|
-
var
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
183
|
+
var minFirstColumn = pinnedColumns.left.length;
|
|
184
|
+
var maxLastColumn = visibleColumns.length - pinnedColumns.right.length;
|
|
185
|
+
var getRows = function getRows() {
|
|
186
|
+
var _params$rows, _rootProps$slotProps;
|
|
187
|
+
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
188
|
+
var isLastSection = !hasBottomPinnedRows && params.position === undefined || hasBottomPinnedRows && params.position === 'bottom';
|
|
189
|
+
var isPinnedSection = params.position !== undefined;
|
|
190
|
+
var rowIndexOffset;
|
|
191
|
+
// FIXME: Why is the switch check exhaustiveness not validated with typescript-eslint?
|
|
192
|
+
// eslint-disable-next-line default-case
|
|
193
|
+
switch (params.position) {
|
|
194
|
+
case 'top':
|
|
195
|
+
rowIndexOffset = 0;
|
|
196
|
+
break;
|
|
197
|
+
case 'bottom':
|
|
198
|
+
rowIndexOffset = pinnedRows.top.length + currentPage.rows.length;
|
|
199
|
+
break;
|
|
200
|
+
case undefined:
|
|
201
|
+
rowIndexOffset = pinnedRows.top.length;
|
|
202
|
+
break;
|
|
376
203
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
var
|
|
381
|
-
if (
|
|
382
|
-
return;
|
|
204
|
+
var firstRowToRender = renderContext.firstRowIndex;
|
|
205
|
+
var lastRowToRender = renderContext.lastRowIndex;
|
|
206
|
+
var firstColumnToRender = renderContext.firstColumnIndex;
|
|
207
|
+
var lastColumnToRender = renderContext.lastColumnIndex;
|
|
208
|
+
if (!params.rows && !currentPage.range) {
|
|
209
|
+
return [];
|
|
383
210
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
211
|
+
var renderedRows = (_params$rows = params.rows) != null ? _params$rows : currentPage.rows.slice(firstRowToRender, lastRowToRender);
|
|
212
|
+
|
|
213
|
+
// If the selected row is not within the current range of rows being displayed,
|
|
214
|
+
// we need to render it at either the top or bottom of the rows,
|
|
215
|
+
// depending on whether it is above or below the range.
|
|
216
|
+
var isRowWithFocusedCellNotInRange = false;
|
|
217
|
+
if (!isPinnedSection && indexOfRowWithFocusedCell > -1 && (firstRowToRender > indexOfRowWithFocusedCell || lastRowToRender < indexOfRowWithFocusedCell)) {
|
|
218
|
+
isRowWithFocusedCellNotInRange = true;
|
|
219
|
+
var rowWithFocusedCell = currentPage.rows[indexOfRowWithFocusedCell];
|
|
220
|
+
if (indexOfRowWithFocusedCell > firstRowToRender) {
|
|
221
|
+
renderedRows.push(rowWithFocusedCell);
|
|
222
|
+
} else {
|
|
223
|
+
renderedRows.unshift(rowWithFocusedCell);
|
|
224
|
+
}
|
|
389
225
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
var _rootProps$slotProps;
|
|
394
|
-
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
395
|
-
renderContext: renderContext
|
|
396
|
-
};
|
|
397
|
-
var onRowRender = params.onRowRender,
|
|
398
|
-
nextRenderContext = params.renderContext,
|
|
399
|
-
_params$minFirstColum = params.minFirstColumn,
|
|
400
|
-
minFirstColumn = _params$minFirstColum === void 0 ? renderZoneMinColumnIndex : _params$minFirstColum,
|
|
401
|
-
_params$maxLastColumn = params.maxLastColumn,
|
|
402
|
-
maxLastColumn = _params$maxLastColumn === void 0 ? renderZoneMaxColumnIndex : _params$maxLastColumn,
|
|
403
|
-
_params$availableSpac = params.availableSpace,
|
|
404
|
-
availableSpace = _params$availableSpac === void 0 ? containerDimensions.width : _params$availableSpac,
|
|
405
|
-
_params$rowIndexOffse = params.rowIndexOffset,
|
|
406
|
-
rowIndexOffset = _params$rowIndexOffse === void 0 ? 0 : _params$rowIndexOffse,
|
|
407
|
-
_params$position = params.position,
|
|
408
|
-
position = _params$position === void 0 ? 'center' : _params$position;
|
|
409
|
-
if (!nextRenderContext || availableSpace == null) {
|
|
410
|
-
return null;
|
|
226
|
+
var isColumnWihFocusedCellNotInRange = false;
|
|
227
|
+
if (!isPinnedSection && (firstColumnToRender > indexOfColumnWithFocusedCell || lastColumnToRender < indexOfColumnWithFocusedCell)) {
|
|
228
|
+
isColumnWihFocusedCellNotInRange = true;
|
|
411
229
|
}
|
|
412
|
-
var
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
_getRenderableIndexes10 = _slicedToArray(_getRenderableIndexes9, 2),
|
|
422
|
-
firstRowToRender = _getRenderableIndexes10[0],
|
|
423
|
-
lastRowToRender = _getRenderableIndexes10[1];
|
|
424
|
-
var renderedRows = [];
|
|
425
|
-
if (params.rows) {
|
|
426
|
-
params.rows.forEach(function (row) {
|
|
427
|
-
renderedRows.push(row);
|
|
428
|
-
apiRef.current.calculateColSpan({
|
|
429
|
-
rowId: row.id,
|
|
430
|
-
minFirstColumn: minFirstColumn,
|
|
431
|
-
maxLastColumn: maxLastColumn,
|
|
432
|
-
columns: visibleColumns
|
|
433
|
-
});
|
|
230
|
+
var _getRenderedColumns = getRenderedColumns(visibleColumns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, isColumnWihFocusedCellNotInRange ? indexOfColumnWithFocusedCell : -1),
|
|
231
|
+
focusedCellColumnIndexNotInRange = _getRenderedColumns.focusedCellColumnIndexNotInRange,
|
|
232
|
+
renderedColumns = _getRenderedColumns.renderedColumns;
|
|
233
|
+
renderedRows.forEach(function (row) {
|
|
234
|
+
apiRef.current.calculateColSpan({
|
|
235
|
+
rowId: row.id,
|
|
236
|
+
minFirstColumn: minFirstColumn,
|
|
237
|
+
maxLastColumn: maxLastColumn,
|
|
238
|
+
columns: visibleColumns
|
|
434
239
|
});
|
|
435
|
-
|
|
436
|
-
if (!currentPage.range) {
|
|
437
|
-
return null;
|
|
438
|
-
}
|
|
439
|
-
for (var i = firstRowToRender; i < lastRowToRender; i += 1) {
|
|
440
|
-
var row = currentPage.rows[i];
|
|
441
|
-
renderedRows.push(row);
|
|
240
|
+
if (pinnedColumns.left.length > 0) {
|
|
442
241
|
apiRef.current.calculateColSpan({
|
|
443
242
|
rowId: row.id,
|
|
444
|
-
minFirstColumn:
|
|
445
|
-
maxLastColumn:
|
|
243
|
+
minFirstColumn: 0,
|
|
244
|
+
maxLastColumn: pinnedColumns.left.length,
|
|
446
245
|
columns: visibleColumns
|
|
447
246
|
});
|
|
448
247
|
}
|
|
449
|
-
|
|
450
|
-
// If the selected row is not within the current range of rows being displayed,
|
|
451
|
-
// we need to render it at either the top or bottom of the rows,
|
|
452
|
-
// depending on whether it is above or below the range.
|
|
453
|
-
|
|
454
|
-
var isRowWithFocusedCellNotInRange = false;
|
|
455
|
-
if (indexOfRowWithFocusedCell > -1) {
|
|
456
|
-
var rowWithFocusedCell = currentPage.rows[indexOfRowWithFocusedCell];
|
|
457
|
-
if (firstRowToRender > indexOfRowWithFocusedCell || lastRowToRender < indexOfRowWithFocusedCell) {
|
|
458
|
-
isRowWithFocusedCellNotInRange = true;
|
|
459
|
-
if (indexOfRowWithFocusedCell > firstRowToRender) {
|
|
460
|
-
renderedRows.push(rowWithFocusedCell);
|
|
461
|
-
} else {
|
|
462
|
-
renderedRows.unshift(rowWithFocusedCell);
|
|
463
|
-
}
|
|
248
|
+
if (pinnedColumns.right.length > 0) {
|
|
464
249
|
apiRef.current.calculateColSpan({
|
|
465
|
-
rowId:
|
|
466
|
-
minFirstColumn:
|
|
467
|
-
maxLastColumn:
|
|
250
|
+
rowId: row.id,
|
|
251
|
+
minFirstColumn: visibleColumns.length - pinnedColumns.right.length,
|
|
252
|
+
maxLastColumn: visibleColumns.length,
|
|
468
253
|
columns: visibleColumns
|
|
469
254
|
});
|
|
470
255
|
}
|
|
471
|
-
}
|
|
472
|
-
var _getRenderableIndexes11 = getRenderableIndexes({
|
|
473
|
-
firstIndex: nextRenderContext.firstColumnIndex,
|
|
474
|
-
lastIndex: nextRenderContext.lastColumnIndex,
|
|
475
|
-
minFirstIndex: minFirstColumn,
|
|
476
|
-
maxLastIndex: maxLastColumn,
|
|
477
|
-
buffer: columnBuffer
|
|
478
|
-
}),
|
|
479
|
-
_getRenderableIndexes12 = _slicedToArray(_getRenderableIndexes11, 2),
|
|
480
|
-
initialFirstColumnToRender = _getRenderableIndexes12[0],
|
|
481
|
-
lastColumnToRender = _getRenderableIndexes12[1];
|
|
482
|
-
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
483
|
-
firstColumnToRender: initialFirstColumnToRender,
|
|
484
|
-
apiRef: apiRef,
|
|
485
|
-
firstRowToRender: firstRowToRender,
|
|
486
|
-
lastRowToRender: lastRowToRender,
|
|
487
|
-
visibleRows: currentPage.rows
|
|
488
256
|
});
|
|
489
|
-
var isColumnWihFocusedCellNotInRange = false;
|
|
490
|
-
if (firstColumnToRender > indexOfColumnWithFocusedCell || lastColumnToRender < indexOfColumnWithFocusedCell) {
|
|
491
|
-
isColumnWihFocusedCellNotInRange = true;
|
|
492
|
-
}
|
|
493
|
-
var _getRenderedColumnsRe = getRenderedColumnsRef.current(visibleColumns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, isColumnWihFocusedCellNotInRange ? indexOfColumnWithFocusedCell : -1),
|
|
494
|
-
focusedCellColumnIndexNotInRange = _getRenderedColumnsRe.focusedCellColumnIndexNotInRange,
|
|
495
|
-
renderedColumns = _getRenderedColumnsRe.renderedColumns;
|
|
496
|
-
var _ref4 = ((_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.row) || {},
|
|
497
|
-
rootRowStyle = _ref4.style,
|
|
498
|
-
rootRowProps = _objectWithoutProperties(_ref4, _excluded);
|
|
499
|
-
var invalidatesCachedRowStyle = prevGetRowProps.current !== getRowProps || prevRootRowStyle.current !== rootRowStyle;
|
|
500
|
-
if (invalidatesCachedRowStyle) {
|
|
501
|
-
rowStyleCache.current = Object.create(null);
|
|
502
|
-
}
|
|
503
257
|
var rows = [];
|
|
258
|
+
var rowProps = (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.row;
|
|
504
259
|
var isRowWithFocusedCellRendered = false;
|
|
505
|
-
for (var
|
|
506
|
-
var _currentPage$
|
|
507
|
-
var _renderedRows$
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
var isRowNotVisible = isRowWithFocusedCellNotInRange && cellFocus.id ===
|
|
511
|
-
var
|
|
512
|
-
var baseRowHeight = !apiRef.current.rowHasAutoHeight(_id) ? apiRef.current.unstable_getRowHeight(_id) : 'auto';
|
|
260
|
+
for (var i = 0; i < renderedRows.length; i += 1) {
|
|
261
|
+
var _currentPage$range;
|
|
262
|
+
var _renderedRows$i = renderedRows[i],
|
|
263
|
+
id = _renderedRows$i.id,
|
|
264
|
+
model = _renderedRows$i.model;
|
|
265
|
+
var isRowNotVisible = isRowWithFocusedCellNotInRange && cellFocus.id === id;
|
|
266
|
+
var baseRowHeight = !apiRef.current.rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';
|
|
513
267
|
var isSelected = void 0;
|
|
514
|
-
if (selectedRowsLookup[
|
|
268
|
+
if (selectedRowsLookup[id] == null) {
|
|
515
269
|
isSelected = false;
|
|
516
270
|
} else {
|
|
517
|
-
isSelected = apiRef.current.isRowSelectable(
|
|
271
|
+
isSelected = apiRef.current.isRowSelectable(id);
|
|
272
|
+
}
|
|
273
|
+
var isFirstVisible = false;
|
|
274
|
+
if (params.position === undefined) {
|
|
275
|
+
isFirstVisible = i === 0;
|
|
518
276
|
}
|
|
519
|
-
|
|
520
|
-
|
|
277
|
+
var isLastVisible = false;
|
|
278
|
+
if (isLastSection) {
|
|
279
|
+
if (!isPinnedSection) {
|
|
280
|
+
var lastIndex = currentPage.rows.length - 1;
|
|
281
|
+
var isLastVisibleRowIndex = isRowWithFocusedCellNotInRange ? firstRowToRender + i === lastIndex + 1 : firstRowToRender + i === lastIndex;
|
|
282
|
+
if (isLastVisibleRowIndex) {
|
|
283
|
+
isLastVisible = true;
|
|
284
|
+
}
|
|
285
|
+
} else {
|
|
286
|
+
isLastVisible = i === renderedRows.length - 1;
|
|
287
|
+
}
|
|
521
288
|
}
|
|
522
|
-
var focusedCell = cellFocus !== null && cellFocus.id ===
|
|
289
|
+
var focusedCell = cellFocus !== null && cellFocus.id === id ? cellFocus.field : null;
|
|
523
290
|
var columnWithFocusedCellNotInRange = focusedCellColumnIndexNotInRange !== undefined && visibleColumns[focusedCellColumnIndexNotInRange];
|
|
524
291
|
var renderedColumnsWithFocusedCell = columnWithFocusedCellNotInRange && focusedCell ? [columnWithFocusedCellNotInRange].concat(_toConsumableArray(renderedColumns)) : renderedColumns;
|
|
525
292
|
var tabbableCell = null;
|
|
526
|
-
if (cellTabIndex !== null && cellTabIndex.id ===
|
|
527
|
-
var cellParams = apiRef.current.getCellParams(
|
|
293
|
+
if (cellTabIndex !== null && cellTabIndex.id === id) {
|
|
294
|
+
var cellParams = apiRef.current.getCellParams(id, cellTabIndex.field);
|
|
528
295
|
tabbableCell = cellParams.cellMode === 'view' ? cellTabIndex.field : null;
|
|
529
296
|
}
|
|
530
|
-
var
|
|
531
|
-
|
|
532
|
-
rowProps = _objectWithoutProperties(_ref5, _excluded2);
|
|
533
|
-
if (!rowStyleCache.current[_id]) {
|
|
534
|
-
var style = _extends({}, rowStyle, rootRowStyle);
|
|
535
|
-
rowStyleCache.current[_id] = style;
|
|
536
|
-
}
|
|
537
|
-
var index = rowIndexOffset + ((currentPage == null || (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + _i;
|
|
538
|
-
if (isRowWithFocusedCellNotInRange && (cellFocus == null ? void 0 : cellFocus.id) === _id) {
|
|
297
|
+
var index = rowIndexOffset + ((currentPage == null || (_currentPage$range = currentPage.range) == null ? void 0 : _currentPage$range.firstRowIndex) || 0) + firstRowToRender + i;
|
|
298
|
+
if (isRowWithFocusedCellNotInRange && (cellFocus == null ? void 0 : cellFocus.id) === id) {
|
|
539
299
|
index = indexOfRowWithFocusedCell;
|
|
540
300
|
isRowWithFocusedCellRendered = true;
|
|
541
301
|
} else if (isRowWithFocusedCellRendered) {
|
|
542
302
|
index -= 1;
|
|
543
303
|
}
|
|
544
304
|
rows.push( /*#__PURE__*/_jsx(rootProps.slots.row, _extends({
|
|
545
|
-
row:
|
|
546
|
-
rowId:
|
|
547
|
-
|
|
548
|
-
isNotVisible: isRowNotVisible,
|
|
305
|
+
row: model,
|
|
306
|
+
rowId: id,
|
|
307
|
+
index: index,
|
|
549
308
|
rowHeight: baseRowHeight,
|
|
550
309
|
focusedCell: focusedCell,
|
|
551
310
|
tabbableCell: tabbableCell,
|
|
311
|
+
focusedCellColumnIndexNotInRange: focusedCellColumnIndexNotInRange,
|
|
552
312
|
renderedColumns: renderedColumnsWithFocusedCell,
|
|
553
313
|
visibleColumns: visibleColumns,
|
|
314
|
+
pinnedColumns: pinnedColumns,
|
|
554
315
|
firstColumnToRender: firstColumnToRender,
|
|
555
316
|
lastColumnToRender: lastColumnToRender,
|
|
556
317
|
selected: isSelected,
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
isLastVisible:
|
|
560
|
-
|
|
561
|
-
}, rowProps,
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
318
|
+
dimensions: dimensions,
|
|
319
|
+
isFirstVisible: isFirstVisible,
|
|
320
|
+
isLastVisible: isLastVisible,
|
|
321
|
+
isNotVisible: isRowNotVisible
|
|
322
|
+
}, rowProps), id));
|
|
323
|
+
var panel = panels.get(id);
|
|
324
|
+
if (panel) {
|
|
325
|
+
rows.push(panel);
|
|
326
|
+
}
|
|
565
327
|
}
|
|
566
|
-
prevGetRowProps.current = getRowProps;
|
|
567
|
-
prevRootRowStyle.current = rootRowStyle;
|
|
568
328
|
return rows;
|
|
569
329
|
};
|
|
570
|
-
var needsHorizontalScrollbar =
|
|
330
|
+
var needsHorizontalScrollbar = outerSize.width && columnsTotalWidth >= outerSize.width;
|
|
331
|
+
var scrollerStyle = React.useMemo(function () {
|
|
332
|
+
return {
|
|
333
|
+
overflowX: !needsHorizontalScrollbar ? 'hidden' : undefined,
|
|
334
|
+
overflowY: rootProps.autoHeight ? 'hidden' : undefined
|
|
335
|
+
};
|
|
336
|
+
}, [needsHorizontalScrollbar, rootProps.autoHeight]);
|
|
571
337
|
var contentSize = React.useMemo(function () {
|
|
572
338
|
// In cases where the columns exceed the available width,
|
|
573
339
|
// the horizontal scrollbar should be shown even when there're no rows.
|
|
574
340
|
// Keeping 1px as minimum height ensures that the scrollbar will visible if necessary.
|
|
575
|
-
var height = Math.max(
|
|
576
|
-
var shouldExtendContent = false;
|
|
577
|
-
if (rootRef != null && rootRef.current && height <= (rootRef == null ? void 0 : rootRef.current.clientHeight)) {
|
|
578
|
-
shouldExtendContent = true;
|
|
579
|
-
}
|
|
341
|
+
var height = Math.max(contentHeight, 1);
|
|
580
342
|
var size = {
|
|
581
343
|
width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',
|
|
582
|
-
height: height
|
|
583
|
-
minHeight: shouldExtendContent ? '100%' : 'auto'
|
|
344
|
+
height: height
|
|
584
345
|
};
|
|
585
|
-
if (rootProps.autoHeight
|
|
586
|
-
|
|
346
|
+
if (rootProps.autoHeight) {
|
|
347
|
+
if (currentPage.rows.length === 0) {
|
|
348
|
+
size.height = getMinimalContentHeight(apiRef); // Give room to show the overlay when there no rows.
|
|
349
|
+
} else {
|
|
350
|
+
size.height = contentHeight;
|
|
351
|
+
}
|
|
587
352
|
}
|
|
588
353
|
return size;
|
|
589
|
-
}, [apiRef,
|
|
354
|
+
}, [apiRef, columnsTotalWidth, contentHeight, needsHorizontalScrollbar, rootProps.autoHeight, currentPage.rows.length]);
|
|
590
355
|
React.useEffect(function () {
|
|
591
356
|
apiRef.current.publishEvent('virtualScrollerContentSizeChange');
|
|
592
357
|
}, [apiRef, contentSize]);
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
if (
|
|
599
|
-
|
|
358
|
+
useEnhancedEffect(function () {
|
|
359
|
+
// FIXME: Is this really necessary?
|
|
360
|
+
apiRef.current.resize();
|
|
361
|
+
}, [apiRef, rowsMeta.currentPageTotalHeight]);
|
|
362
|
+
useEnhancedEffect(function () {
|
|
363
|
+
if (enabled) {
|
|
364
|
+
// TODO a scroll reset should not be necessary
|
|
365
|
+
scrollerRef.current.scrollLeft = 0;
|
|
366
|
+
scrollerRef.current.scrollTop = 0;
|
|
367
|
+
} else {
|
|
368
|
+
var _gridRootRef$current3, _gridRootRef$current4;
|
|
369
|
+
(_gridRootRef$current3 = gridRootRef.current) == null || _gridRootRef$current3.style.setProperty('--DataGrid-offsetTop', '0px');
|
|
370
|
+
(_gridRootRef$current4 = gridRootRef.current) == null || _gridRootRef$current4.style.setProperty('--DataGrid-offsetLeft', '0px');
|
|
600
371
|
}
|
|
601
|
-
|
|
602
|
-
|
|
372
|
+
}, [enabled, gridRootRef, scrollerRef]);
|
|
373
|
+
useRunOnce(outerSize.width !== 0, function () {
|
|
374
|
+
var inputs = inputsSelector(apiRef, rootProps, enabled, enabledForColumns);
|
|
375
|
+
var _computeRenderContext5 = computeRenderContext(inputs, scrollPosition),
|
|
376
|
+
_computeRenderContext6 = _slicedToArray(_computeRenderContext5, 2),
|
|
377
|
+
initialRenderContext = _computeRenderContext6[0],
|
|
378
|
+
rawRenderContext = _computeRenderContext6[1];
|
|
379
|
+
updateRenderContext(initialRenderContext, rawRenderContext);
|
|
380
|
+
apiRef.current.publishEvent('scrollPositionChange', {
|
|
381
|
+
top: scrollPosition.top,
|
|
382
|
+
left: scrollPosition.left,
|
|
383
|
+
renderContext: initialRenderContext
|
|
384
|
+
});
|
|
385
|
+
});
|
|
603
386
|
apiRef.current.register('private', {
|
|
604
|
-
|
|
387
|
+
updateRenderContext: forceUpdateRenderContext
|
|
605
388
|
});
|
|
606
389
|
return {
|
|
607
390
|
renderContext: renderContext,
|
|
608
|
-
|
|
391
|
+
setPanels: setPanels,
|
|
609
392
|
getRows: getRows,
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
393
|
+
getContainerProps: function getContainerProps() {
|
|
394
|
+
return {
|
|
395
|
+
ref: mainRef
|
|
396
|
+
};
|
|
397
|
+
},
|
|
398
|
+
getScrollerProps: function getScrollerProps() {
|
|
399
|
+
return {
|
|
400
|
+
ref: scrollerRef,
|
|
401
|
+
tabIndex: -1,
|
|
614
402
|
onScroll: handleScroll,
|
|
615
403
|
onWheel: handleWheel,
|
|
616
|
-
onTouchMove: handleTouchMove
|
|
617
|
-
|
|
618
|
-
style: inputProps.style ? _extends({}, inputProps.style, rootStyle) : rootStyle,
|
|
404
|
+
onTouchMove: handleTouchMove,
|
|
405
|
+
style: scrollerStyle,
|
|
619
406
|
role: 'presentation'
|
|
620
|
-
}
|
|
407
|
+
};
|
|
621
408
|
},
|
|
622
409
|
getContentProps: function getContentProps() {
|
|
623
|
-
var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
624
|
-
style = _ref6.style;
|
|
625
410
|
return {
|
|
626
|
-
style:
|
|
411
|
+
style: contentSize,
|
|
627
412
|
role: 'presentation'
|
|
628
413
|
};
|
|
629
414
|
},
|
|
@@ -632,6 +417,228 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
|
|
|
632
417
|
ref: renderZoneRef,
|
|
633
418
|
role: 'rowgroup'
|
|
634
419
|
};
|
|
420
|
+
},
|
|
421
|
+
getScrollbarVerticalProps: function getScrollbarVerticalProps() {
|
|
422
|
+
return {
|
|
423
|
+
ref: scrollbarVerticalRef,
|
|
424
|
+
role: 'presentation'
|
|
425
|
+
};
|
|
426
|
+
},
|
|
427
|
+
getScrollbarHorizontalProps: function getScrollbarHorizontalProps() {
|
|
428
|
+
return {
|
|
429
|
+
ref: scrollbarHorizontalRef,
|
|
430
|
+
role: 'presentation'
|
|
431
|
+
};
|
|
635
432
|
}
|
|
636
433
|
};
|
|
637
|
-
};
|
|
434
|
+
};
|
|
435
|
+
function createGetRenderedColumns() {
|
|
436
|
+
return defaultMemoize(function (columns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, indexOfColumnWithFocusedCell) {
|
|
437
|
+
// If the selected column is not within the current range of columns being displayed,
|
|
438
|
+
// we need to render it at either the left or right of the columns,
|
|
439
|
+
// depending on whether it is above or below the range.
|
|
440
|
+
var focusedCellColumnIndexNotInRange;
|
|
441
|
+
var renderedColumns = columns.slice(firstColumnToRender, lastColumnToRender);
|
|
442
|
+
if (indexOfColumnWithFocusedCell > -1) {
|
|
443
|
+
// check if it is not on the left pinned column.
|
|
444
|
+
if (firstColumnToRender > indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell >= minFirstColumn) {
|
|
445
|
+
focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;
|
|
446
|
+
}
|
|
447
|
+
// check if it is not on the right pinned column.
|
|
448
|
+
else if (lastColumnToRender < indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell < maxLastColumn) {
|
|
449
|
+
focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
focusedCellColumnIndexNotInRange: focusedCellColumnIndexNotInRange,
|
|
454
|
+
renderedColumns: renderedColumns
|
|
455
|
+
};
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
function inputsSelector(apiRef, rootProps, enabled, enabledForColumns) {
|
|
459
|
+
var dimensions = gridDimensionsSelector(apiRef.current.state);
|
|
460
|
+
var currentPage = getVisibleRows(apiRef, rootProps);
|
|
461
|
+
return {
|
|
462
|
+
enabled: enabled,
|
|
463
|
+
enabledForColumns: enabledForColumns,
|
|
464
|
+
apiRef: apiRef,
|
|
465
|
+
autoHeight: rootProps.autoHeight,
|
|
466
|
+
rowBuffer: rootProps.rowBuffer,
|
|
467
|
+
columnBuffer: rootProps.columnBuffer,
|
|
468
|
+
leftPinnedWidth: dimensions.leftPinnedWidth,
|
|
469
|
+
columnsTotalWidth: dimensions.columnsTotalWidth,
|
|
470
|
+
viewportInnerWidth: dimensions.viewportInnerSize.width,
|
|
471
|
+
viewportInnerHeight: dimensions.viewportInnerSize.height,
|
|
472
|
+
rowsMeta: gridRowsMetaSelector(apiRef.current.state),
|
|
473
|
+
columnPositions: gridColumnPositionsSelector(apiRef),
|
|
474
|
+
rows: currentPage.rows,
|
|
475
|
+
range: currentPage.range,
|
|
476
|
+
pinnedColumns: gridVisiblePinnedColumnDefinitionsSelector(apiRef),
|
|
477
|
+
visibleColumns: gridVisibleColumnDefinitionsSelector(apiRef)
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
function computeRenderContext(inputs, scrollPosition) {
|
|
481
|
+
var renderContext;
|
|
482
|
+
if (!inputs.enabled) {
|
|
483
|
+
renderContext = {
|
|
484
|
+
firstRowIndex: 0,
|
|
485
|
+
lastRowIndex: inputs.rows.length,
|
|
486
|
+
firstColumnIndex: 0,
|
|
487
|
+
lastColumnIndex: inputs.visibleColumns.length
|
|
488
|
+
};
|
|
489
|
+
} else {
|
|
490
|
+
var top = scrollPosition.top,
|
|
491
|
+
left = scrollPosition.left;
|
|
492
|
+
var realLeft = Math.abs(left) + inputs.leftPinnedWidth;
|
|
493
|
+
|
|
494
|
+
// Clamp the value because the search may return an index out of bounds.
|
|
495
|
+
// In the last index, this is not needed because Array.slice doesn't include it.
|
|
496
|
+
var firstRowIndex = Math.min(getNearestIndexToRender(inputs, top), inputs.rowsMeta.positions.length - 1);
|
|
497
|
+
var lastRowIndex = inputs.autoHeight ? firstRowIndex + inputs.rows.length : getNearestIndexToRender(inputs, top + inputs.viewportInnerHeight);
|
|
498
|
+
var firstColumnIndex = 0;
|
|
499
|
+
var lastColumnIndex = inputs.columnPositions.length;
|
|
500
|
+
if (inputs.enabledForColumns) {
|
|
501
|
+
var hasRowWithAutoHeight = false;
|
|
502
|
+
var _getIndexesToRender = getIndexesToRender({
|
|
503
|
+
firstIndex: firstRowIndex,
|
|
504
|
+
lastIndex: lastRowIndex,
|
|
505
|
+
minFirstIndex: 0,
|
|
506
|
+
maxLastIndex: inputs.rows.length,
|
|
507
|
+
buffer: inputs.rowBuffer
|
|
508
|
+
}),
|
|
509
|
+
_getIndexesToRender2 = _slicedToArray(_getIndexesToRender, 2),
|
|
510
|
+
firstRowToRender = _getIndexesToRender2[0],
|
|
511
|
+
lastRowToRender = _getIndexesToRender2[1];
|
|
512
|
+
for (var i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {
|
|
513
|
+
var row = inputs.rows[i];
|
|
514
|
+
hasRowWithAutoHeight = inputs.apiRef.current.rowHasAutoHeight(row.id);
|
|
515
|
+
}
|
|
516
|
+
if (!hasRowWithAutoHeight) {
|
|
517
|
+
firstColumnIndex = binarySearch(realLeft, inputs.columnPositions, {
|
|
518
|
+
atStart: true,
|
|
519
|
+
lastPosition: inputs.columnsTotalWidth
|
|
520
|
+
});
|
|
521
|
+
lastColumnIndex = binarySearch(realLeft + inputs.viewportInnerWidth, inputs.columnPositions);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
renderContext = {
|
|
525
|
+
firstRowIndex: firstRowIndex,
|
|
526
|
+
lastRowIndex: lastRowIndex,
|
|
527
|
+
firstColumnIndex: firstColumnIndex,
|
|
528
|
+
lastColumnIndex: lastColumnIndex
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
var actualRenderContext = deriveRenderContext(inputs.apiRef, inputs.rowBuffer, inputs.columnBuffer, inputs.rows, inputs.pinnedColumns, inputs.visibleColumns, renderContext);
|
|
532
|
+
return [actualRenderContext, renderContext];
|
|
533
|
+
}
|
|
534
|
+
function getNearestIndexToRender(inputs, offset) {
|
|
535
|
+
var _inputs$range, _inputs$range2;
|
|
536
|
+
var lastMeasuredIndexRelativeToAllRows = inputs.apiRef.current.getLastMeasuredRowIndex();
|
|
537
|
+
var allRowsMeasured = lastMeasuredIndexRelativeToAllRows === Infinity;
|
|
538
|
+
if ((_inputs$range = inputs.range) != null && _inputs$range.lastRowIndex && !allRowsMeasured) {
|
|
539
|
+
// Check if all rows in this page are already measured
|
|
540
|
+
allRowsMeasured = lastMeasuredIndexRelativeToAllRows >= inputs.range.lastRowIndex;
|
|
541
|
+
}
|
|
542
|
+
var lastMeasuredIndexRelativeToCurrentPage = clamp(lastMeasuredIndexRelativeToAllRows - (((_inputs$range2 = inputs.range) == null ? void 0 : _inputs$range2.firstRowIndex) || 0), 0, inputs.rowsMeta.positions.length);
|
|
543
|
+
if (allRowsMeasured || inputs.rowsMeta.positions[lastMeasuredIndexRelativeToCurrentPage] >= offset) {
|
|
544
|
+
// If all rows were measured (when no row has "auto" as height) or all rows before the offset
|
|
545
|
+
// were measured, then use a binary search because it's faster.
|
|
546
|
+
return binarySearch(offset, inputs.rowsMeta.positions);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Otherwise, use an exponential search.
|
|
550
|
+
// If rows have "auto" as height, their positions will be based on estimated heights.
|
|
551
|
+
// In this case, we can skip several steps until we find a position higher than the offset.
|
|
552
|
+
// Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js
|
|
553
|
+
return exponentialSearch(offset, inputs.rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Accepts as input a raw render context (the area visible in the viewport) and adds
|
|
558
|
+
* computes the actual render context based on pinned elements, buffer dimensions and
|
|
559
|
+
* spanning.
|
|
560
|
+
*/
|
|
561
|
+
function deriveRenderContext(apiRef, rowBuffer, columnBuffer, rows, pinnedColumns, visibleColumns, nextRenderContext) {
|
|
562
|
+
var _getIndexesToRender3 = getIndexesToRender({
|
|
563
|
+
firstIndex: nextRenderContext.firstRowIndex,
|
|
564
|
+
lastIndex: nextRenderContext.lastRowIndex,
|
|
565
|
+
minFirstIndex: 0,
|
|
566
|
+
maxLastIndex: rows.length,
|
|
567
|
+
buffer: rowBuffer
|
|
568
|
+
}),
|
|
569
|
+
_getIndexesToRender4 = _slicedToArray(_getIndexesToRender3, 2),
|
|
570
|
+
firstRowToRender = _getIndexesToRender4[0],
|
|
571
|
+
lastRowToRender = _getIndexesToRender4[1];
|
|
572
|
+
var _getIndexesToRender5 = getIndexesToRender({
|
|
573
|
+
firstIndex: nextRenderContext.firstColumnIndex,
|
|
574
|
+
lastIndex: nextRenderContext.lastColumnIndex,
|
|
575
|
+
minFirstIndex: pinnedColumns.left.length,
|
|
576
|
+
maxLastIndex: visibleColumns.length - pinnedColumns.right.length,
|
|
577
|
+
buffer: columnBuffer
|
|
578
|
+
}),
|
|
579
|
+
_getIndexesToRender6 = _slicedToArray(_getIndexesToRender5, 2),
|
|
580
|
+
initialFirstColumnToRender = _getIndexesToRender6[0],
|
|
581
|
+
lastColumnToRender = _getIndexesToRender6[1];
|
|
582
|
+
var firstColumnToRender = getFirstNonSpannedColumnToRender({
|
|
583
|
+
firstColumnToRender: initialFirstColumnToRender,
|
|
584
|
+
apiRef: apiRef,
|
|
585
|
+
firstRowToRender: firstRowToRender,
|
|
586
|
+
lastRowToRender: lastRowToRender,
|
|
587
|
+
visibleRows: rows
|
|
588
|
+
});
|
|
589
|
+
return {
|
|
590
|
+
firstRowIndex: firstRowToRender,
|
|
591
|
+
lastRowIndex: lastRowToRender,
|
|
592
|
+
firstColumnIndex: firstColumnToRender,
|
|
593
|
+
lastColumnIndex: lastColumnToRender
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Use binary search to avoid looping through all possible positions.
|
|
598
|
+
* The `options.atStart` provides the possibility to match for the first element that
|
|
599
|
+
* intersects the screen, even if said element's start position is before `offset`. In
|
|
600
|
+
* other words, we search for `offset + width`.
|
|
601
|
+
*/
|
|
602
|
+
function binarySearch(offset, positions) {
|
|
603
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
604
|
+
var sliceStart = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
|
605
|
+
var sliceEnd = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : positions.length;
|
|
606
|
+
if (positions.length <= 0) {
|
|
607
|
+
return -1;
|
|
608
|
+
}
|
|
609
|
+
if (sliceStart >= sliceEnd) {
|
|
610
|
+
return sliceStart;
|
|
611
|
+
}
|
|
612
|
+
var pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);
|
|
613
|
+
var position = positions[pivot];
|
|
614
|
+
var isBefore;
|
|
615
|
+
if (options != null && options.atStart) {
|
|
616
|
+
var width = (pivot === positions.length - 1 ? options.lastPosition : positions[pivot + 1]) - position;
|
|
617
|
+
isBefore = offset - width < position;
|
|
618
|
+
} else {
|
|
619
|
+
isBefore = offset <= position;
|
|
620
|
+
}
|
|
621
|
+
return isBefore ? binarySearch(offset, positions, options, sliceStart, pivot) : binarySearch(offset, positions, options, pivot + 1, sliceEnd);
|
|
622
|
+
}
|
|
623
|
+
function exponentialSearch(offset, positions, index) {
|
|
624
|
+
var interval = 1;
|
|
625
|
+
while (index < positions.length && Math.abs(positions[index]) < offset) {
|
|
626
|
+
index += interval;
|
|
627
|
+
interval *= 2;
|
|
628
|
+
}
|
|
629
|
+
return binarySearch(offset, positions, undefined, Math.floor(index / 2), Math.min(index, positions.length));
|
|
630
|
+
}
|
|
631
|
+
function getIndexesToRender(_ref) {
|
|
632
|
+
var firstIndex = _ref.firstIndex,
|
|
633
|
+
lastIndex = _ref.lastIndex,
|
|
634
|
+
buffer = _ref.buffer,
|
|
635
|
+
minFirstIndex = _ref.minFirstIndex,
|
|
636
|
+
maxLastIndex = _ref.maxLastIndex;
|
|
637
|
+
return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];
|
|
638
|
+
}
|
|
639
|
+
export function areRenderContextsEqual(context1, context2) {
|
|
640
|
+
if (context1 === context2) {
|
|
641
|
+
return true;
|
|
642
|
+
}
|
|
643
|
+
return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;
|
|
644
|
+
}
|