@mui/x-data-grid 8.0.0-alpha.7 → 8.0.0-alpha.8
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 +115 -0
- package/DataGrid/DataGrid.js +4 -5
- package/DataGrid/useDataGridComponent.js +1 -1
- package/components/GridHeaders.js +2 -2
- package/components/GridRow.d.ts +5 -9
- package/components/GridRow.js +26 -78
- package/components/GridSkeletonLoadingOverlay.js +18 -18
- package/components/cell/GridCell.d.ts +9 -16
- package/components/cell/GridCell.js +17 -35
- package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -5
- package/components/columnHeaders/GridColumnGroupHeader.js +7 -10
- package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -5
- package/components/columnHeaders/GridColumnHeaderItem.js +13 -12
- package/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
- package/components/containers/GridRoot.d.ts +2 -2
- package/components/containers/GridRoot.js +14 -6
- package/components/containers/GridRootStyles.js +7 -0
- package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -0
- package/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
- package/components/panel/filterPanel/GridFilterInputDate.d.ts +2 -1
- package/components/panel/filterPanel/GridFilterInputDate.js +32 -29
- package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
- package/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
- package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -0
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
- package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -0
- package/components/panel/filterPanel/GridFilterInputValue.js +34 -28
- package/components/panel/filterPanel/GridFilterInputValueProps.d.ts +1 -1
- package/components/virtualization/GridVirtualScrollbar.js +11 -12
- package/components/virtualization/GridVirtualScroller.js +4 -4
- package/constants/gridClasses.d.ts +12 -0
- package/constants/gridClasses.js +1 -1
- package/constants/localeTextConstants.js +1 -0
- package/context/GridContextProvider.d.ts +1 -1
- package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
- package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +5 -7
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
- package/hooks/features/columnMenu/useGridColumnMenu.d.ts +1 -1
- package/hooks/features/columns/gridColumnsUtils.d.ts +3 -3
- package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
- package/hooks/features/columns/useGridColumns.d.ts +1 -1
- package/hooks/features/density/useGridDensity.d.ts +1 -1
- package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
- package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
- package/hooks/features/editing/useGridCellEditing.js +1 -1
- package/hooks/features/editing/useGridEditing.d.ts +1 -1
- package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
- package/hooks/features/editing/useGridRowEditing.js +1 -1
- package/hooks/features/events/useGridEvents.d.ts +1 -1
- package/hooks/features/export/serializers/csvSerializer.d.ts +1 -1
- package/hooks/features/export/useGridCsvExport.d.ts +1 -1
- package/hooks/features/export/useGridPrintExport.d.ts +1 -1
- package/hooks/features/export/utils.d.ts +1 -1
- package/hooks/features/filter/gridFilterSelector.d.ts +1 -1
- package/hooks/features/filter/gridFilterSelector.js +6 -1
- package/hooks/features/filter/gridFilterUtils.d.ts +6 -6
- package/hooks/features/filter/gridFilterUtils.js +3 -3
- package/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/hooks/features/focus/useGridFocus.d.ts +1 -1
- package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
- package/hooks/features/keyboardNavigation/utils.d.ts +2 -2
- package/hooks/features/listView/useGridListView.d.ts +1 -1
- package/hooks/features/pagination/gridPaginationInterfaces.d.ts +3 -0
- package/hooks/features/pagination/gridPaginationSelector.d.ts +21 -2
- package/hooks/features/pagination/gridPaginationSelector.js +39 -1
- package/hooks/features/pagination/useGridPagination.d.ts +2 -2
- package/hooks/features/pagination/useGridPagination.js +5 -3
- package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
- package/hooks/features/pagination/useGridPaginationModel.d.ts +1 -1
- package/hooks/features/pagination/useGridPaginationModel.js +23 -1
- package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
- package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
- package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
- package/hooks/features/rowSelection/utils.d.ts +2 -2
- package/hooks/features/rows/gridRowSpanningUtils.d.ts +1 -1
- package/hooks/features/rows/gridRowsSelector.js +1 -1
- package/hooks/features/rows/gridRowsUtils.d.ts +3 -3
- package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
- package/hooks/features/rows/useGridRowSpanning.d.ts +1 -1
- package/hooks/features/rows/useGridRows.d.ts +1 -1
- package/hooks/features/rows/useGridRows.js +2 -2
- package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
- package/hooks/features/scroll/useGridScroll.d.ts +1 -1
- package/hooks/features/sorting/gridSortingUtils.d.ts +2 -2
- package/hooks/features/sorting/gridSortingUtils.js +2 -2
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/features/statePersistence/useGridStatePersistence.d.ts +1 -1
- package/hooks/features/virtualization/gridFocusedVirtualCellSelector.d.ts +6 -0
- package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
- package/hooks/features/virtualization/useGridVirtualization.d.ts +1 -1
- package/hooks/utils/useGridApiContext.d.ts +1 -1
- package/hooks/utils/useGridApiEventHandler.d.ts +3 -3
- package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
- package/hooks/utils/useGridPrivateApiContext.d.ts +1 -1
- package/hooks/utils/useGridSelector.d.ts +1 -1
- package/hooks/utils/useGridVisibleRows.d.ts +7 -5
- package/hooks/utils/useGridVisibleRows.js +5 -28
- package/index.js +1 -1
- package/internals/constants.d.ts +6 -0
- package/internals/constants.js +8 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/internals/utils/attachPinnedStyle.d.ts +2 -0
- package/internals/utils/attachPinnedStyle.js +9 -0
- package/internals/utils/getPinnedCellOffset.d.ts +3 -3
- package/internals/utils/getPinnedCellOffset.js +6 -7
- package/internals/utils/index.d.ts +1 -0
- package/internals/utils/index.js +2 -1
- package/locales/arSD.js +2 -0
- package/locales/beBY.js +1 -0
- package/locales/bgBG.js +2 -0
- package/locales/csCZ.js +2 -0
- package/locales/daDK.js +2 -0
- package/locales/deDE.js +2 -0
- package/locales/elGR.js +2 -0
- package/locales/esES.js +2 -0
- package/locales/faIR.js +2 -0
- package/locales/fiFI.js +2 -0
- package/locales/frFR.js +2 -0
- package/locales/heIL.js +2 -0
- package/locales/hrHR.js +2 -0
- package/locales/huHU.js +2 -0
- package/locales/isIS.js +2 -0
- package/locales/itIT.js +2 -0
- package/locales/jaJP.js +2 -0
- package/locales/koKR.js +2 -0
- package/locales/nbNO.js +2 -0
- package/locales/nlNL.js +2 -0
- package/locales/nnNO.js +2 -0
- package/locales/plPL.js +2 -0
- package/locales/ptBR.js +2 -0
- package/locales/ptPT.js +2 -0
- package/locales/roRO.js +2 -0
- package/locales/ruRU.js +2 -0
- package/locales/skSK.js +2 -0
- package/locales/svSE.js +2 -0
- package/locales/trTR.js +2 -0
- package/locales/ukUA.js +2 -0
- package/locales/urPK.js +2 -0
- package/locales/viVN.js +2 -0
- package/locales/zhCN.js +2 -0
- package/locales/zhHK.js +2 -0
- package/locales/zhTW.js +2 -0
- package/material/index.js +2 -1
- package/models/api/gridLocaleTextApi.d.ts +1 -0
- package/models/colDef/gridColDef.d.ts +8 -8
- package/models/events/gridEventLookup.d.ts +6 -1
- package/models/gridExport.d.ts +1 -1
- package/models/gridFilterOperator.d.ts +1 -1
- package/models/gridIconSlotsComponent.d.ts +5 -0
- package/models/gridStateCommunity.d.ts +4 -0
- package/modern/DataGrid/DataGrid.js +4 -5
- package/modern/DataGrid/useDataGridComponent.js +1 -1
- package/modern/components/GridHeaders.js +2 -2
- package/modern/components/GridRow.js +26 -78
- package/modern/components/GridSkeletonLoadingOverlay.js +18 -18
- package/modern/components/cell/GridCell.js +17 -35
- package/modern/components/columnHeaders/GridColumnGroupHeader.js +7 -10
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +13 -12
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
- package/modern/components/containers/GridRoot.js +14 -6
- package/modern/components/containers/GridRootStyles.js +7 -0
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
- package/modern/components/panel/filterPanel/GridFilterInputDate.js +32 -29
- package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
- package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
- package/modern/components/panel/filterPanel/GridFilterInputValue.js +34 -28
- package/modern/components/virtualization/GridVirtualScrollbar.js +11 -12
- package/modern/components/virtualization/GridVirtualScroller.js +4 -4
- package/modern/constants/gridClasses.js +1 -1
- package/modern/constants/localeTextConstants.js +1 -0
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
- package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
- package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
- package/modern/hooks/features/filter/gridFilterSelector.js +6 -1
- package/modern/hooks/features/filter/gridFilterUtils.js +3 -3
- package/modern/hooks/features/pagination/gridPaginationSelector.js +39 -1
- package/modern/hooks/features/pagination/useGridPagination.js +5 -3
- package/modern/hooks/features/pagination/useGridPaginationModel.js +23 -1
- package/modern/hooks/features/rows/gridRowsSelector.js +1 -1
- package/modern/hooks/features/rows/useGridRows.js +2 -2
- package/modern/hooks/features/sorting/gridSortingUtils.js +2 -2
- package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
- package/modern/hooks/utils/useGridVisibleRows.js +5 -28
- package/modern/index.js +1 -1
- package/modern/internals/constants.js +8 -1
- package/modern/internals/index.js +1 -0
- package/modern/internals/utils/attachPinnedStyle.js +9 -0
- package/modern/internals/utils/getPinnedCellOffset.js +6 -7
- package/modern/internals/utils/index.js +2 -1
- package/modern/locales/arSD.js +2 -0
- package/modern/locales/beBY.js +1 -0
- package/modern/locales/bgBG.js +2 -0
- package/modern/locales/csCZ.js +2 -0
- package/modern/locales/daDK.js +2 -0
- package/modern/locales/deDE.js +2 -0
- package/modern/locales/elGR.js +2 -0
- package/modern/locales/esES.js +2 -0
- package/modern/locales/faIR.js +2 -0
- package/modern/locales/fiFI.js +2 -0
- package/modern/locales/frFR.js +2 -0
- package/modern/locales/heIL.js +2 -0
- package/modern/locales/hrHR.js +2 -0
- package/modern/locales/huHU.js +2 -0
- package/modern/locales/isIS.js +2 -0
- package/modern/locales/itIT.js +2 -0
- package/modern/locales/jaJP.js +2 -0
- package/modern/locales/koKR.js +2 -0
- package/modern/locales/nbNO.js +2 -0
- package/modern/locales/nlNL.js +2 -0
- package/modern/locales/nnNO.js +2 -0
- package/modern/locales/plPL.js +2 -0
- package/modern/locales/ptBR.js +2 -0
- package/modern/locales/ptPT.js +2 -0
- package/modern/locales/roRO.js +2 -0
- package/modern/locales/ruRU.js +2 -0
- package/modern/locales/skSK.js +2 -0
- package/modern/locales/svSE.js +2 -0
- package/modern/locales/trTR.js +2 -0
- package/modern/locales/ukUA.js +2 -0
- package/modern/locales/urPK.js +2 -0
- package/modern/locales/viVN.js +2 -0
- package/modern/locales/zhCN.js +2 -0
- package/modern/locales/zhHK.js +2 -0
- package/modern/locales/zhTW.js +2 -0
- package/modern/material/index.js +2 -1
- package/modern/utils/cellBorderUtils.js +5 -5
- package/modern/utils/domUtils.js +7 -2
- package/modern/utils/rtlFlipSide.js +22 -0
- package/node/DataGrid/DataGrid.js +2 -3
- package/node/DataGrid/useDataGridComponent.js +1 -1
- package/node/components/GridHeaders.js +2 -2
- package/node/components/GridRow.js +25 -77
- package/node/components/GridSkeletonLoadingOverlay.js +17 -17
- package/node/components/cell/GridCell.js +18 -36
- package/node/components/columnHeaders/GridColumnGroupHeader.js +7 -10
- package/node/components/columnHeaders/GridColumnHeaderItem.js +13 -12
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
- package/node/components/containers/GridRoot.js +14 -6
- package/node/components/containers/GridRootStyles.js +7 -0
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
- package/node/components/panel/filterPanel/GridFilterInputDate.js +31 -28
- package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
- package/node/components/panel/filterPanel/GridFilterInputValue.js +33 -27
- package/node/components/virtualization/GridVirtualScrollbar.js +11 -12
- package/node/components/virtualization/GridVirtualScroller.js +4 -4
- package/node/constants/gridClasses.js +1 -1
- package/node/constants/localeTextConstants.js +1 -0
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +32 -74
- package/node/hooks/features/editing/useGridCellEditing.js +1 -1
- package/node/hooks/features/editing/useGridRowEditing.js +1 -1
- package/node/hooks/features/filter/gridFilterSelector.js +6 -1
- package/node/hooks/features/filter/gridFilterUtils.js +3 -3
- package/node/hooks/features/pagination/gridPaginationSelector.js +41 -3
- package/node/hooks/features/pagination/useGridPagination.js +5 -3
- package/node/hooks/features/pagination/useGridPaginationModel.js +23 -1
- package/node/hooks/features/rows/gridRowsSelector.js +1 -1
- package/node/hooks/features/rows/useGridRows.js +1 -1
- package/node/hooks/features/sorting/gridSortingUtils.js +2 -2
- package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +49 -0
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
- package/node/hooks/utils/useGridVisibleRows.js +3 -28
- package/node/index.js +1 -1
- package/node/internals/constants.js +9 -2
- package/node/internals/index.js +12 -0
- package/node/internals/utils/attachPinnedStyle.js +15 -0
- package/node/internals/utils/getPinnedCellOffset.js +6 -7
- package/node/internals/utils/index.js +11 -0
- package/node/locales/arSD.js +2 -0
- package/node/locales/beBY.js +1 -0
- package/node/locales/bgBG.js +2 -0
- package/node/locales/csCZ.js +2 -0
- package/node/locales/daDK.js +2 -0
- package/node/locales/deDE.js +2 -0
- package/node/locales/elGR.js +2 -0
- package/node/locales/esES.js +2 -0
- package/node/locales/faIR.js +2 -0
- package/node/locales/fiFI.js +2 -0
- package/node/locales/frFR.js +2 -0
- package/node/locales/heIL.js +2 -0
- package/node/locales/hrHR.js +2 -0
- package/node/locales/huHU.js +2 -0
- package/node/locales/isIS.js +2 -0
- package/node/locales/itIT.js +2 -0
- package/node/locales/jaJP.js +2 -0
- package/node/locales/koKR.js +2 -0
- package/node/locales/nbNO.js +2 -0
- package/node/locales/nlNL.js +2 -0
- package/node/locales/nnNO.js +2 -0
- package/node/locales/plPL.js +2 -0
- package/node/locales/ptBR.js +2 -0
- package/node/locales/ptPT.js +2 -0
- package/node/locales/roRO.js +2 -0
- package/node/locales/ruRU.js +2 -0
- package/node/locales/skSK.js +2 -0
- package/node/locales/svSE.js +2 -0
- package/node/locales/trTR.js +2 -0
- package/node/locales/ukUA.js +2 -0
- package/node/locales/urPK.js +2 -0
- package/node/locales/viVN.js +2 -0
- package/node/locales/zhCN.js +2 -0
- package/node/locales/zhHK.js +2 -0
- package/node/locales/zhTW.js +2 -0
- package/node/material/index.js +2 -1
- package/node/utils/cellBorderUtils.js +5 -5
- package/node/utils/domUtils.js +7 -2
- package/node/utils/rtlFlipSide.js +29 -0
- package/package.json +2 -2
- package/utils/cellBorderUtils.d.ts +3 -3
- package/utils/cellBorderUtils.js +5 -5
- package/utils/createSelector.d.ts +1 -1
- package/utils/domUtils.js +7 -2
- package/utils/getPublicApiRef.d.ts +1 -1
- package/utils/rtlFlipSide.d.ts +2 -0
- package/utils/rtlFlipSide.js +22 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetTop", "offsetLeft", "
|
|
3
|
+
const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetTop", "offsetLeft", "columnsTotalWidth", "firstColumnIndex", "lastColumnIndex", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "scrollbarWidth", "gridHasFiller", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
@@ -11,22 +11,21 @@ import { GridEditModes, GridRowModes, GridCellModes } from "../models/gridEditRo
|
|
|
11
11
|
import { gridClasses } from "../constants/gridClasses.js";
|
|
12
12
|
import { composeGridClasses } from "../utils/composeGridClasses.js";
|
|
13
13
|
import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
|
|
14
|
+
import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.js";
|
|
14
15
|
import { gridColumnPositionsSelector } from "../hooks/features/columns/gridColumnsSelector.js";
|
|
15
16
|
import { useGridSelector, objectShallowCompare } from "../hooks/utils/useGridSelector.js";
|
|
16
17
|
import { useGridVisibleRows } from "../hooks/utils/useGridVisibleRows.js";
|
|
17
18
|
import { findParentElementFromClassName, isEventTargetInPortal } from "../utils/domUtils.js";
|
|
18
19
|
import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../colDef/gridCheckboxSelectionColDef.js";
|
|
19
20
|
import { GRID_ACTIONS_COLUMN_TYPE } from "../colDef/gridActionsColDef.js";
|
|
20
|
-
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from "../internals/constants.js";
|
|
21
|
+
import { GRID_DETAIL_PANEL_TOGGLE_FIELD, PinnedColumnPosition } from "../internals/constants.js";
|
|
21
22
|
import { gridSortModelSelector } from "../hooks/features/sorting/gridSortingSelector.js";
|
|
22
23
|
import { gridRowMaximumTreeDepthSelector } from "../hooks/features/rows/gridRowsSelector.js";
|
|
23
24
|
import { gridEditRowsStateSelector } from "../hooks/features/editing/gridEditingSelectors.js";
|
|
24
|
-
import { PinnedPosition, gridPinnedColumnPositionLookup } from "./cell/GridCell.js";
|
|
25
25
|
import { GridScrollbarFillerCell as ScrollbarFiller } from "./GridScrollbarFillerCell.js";
|
|
26
26
|
import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
|
|
27
27
|
import { useGridConfiguration } from "../hooks/utils/useGridConfiguration.js";
|
|
28
28
|
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.js";
|
|
29
|
-
import { gridVirtualizationColumnEnabledSelector } from "../hooks/index.js";
|
|
30
29
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
31
30
|
const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
32
31
|
const {
|
|
@@ -40,13 +39,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
40
39
|
visibleColumns,
|
|
41
40
|
pinnedColumns,
|
|
42
41
|
offsetLeft,
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
columnsTotalWidth,
|
|
43
|
+
firstColumnIndex,
|
|
44
|
+
lastColumnIndex,
|
|
45
45
|
focusedColumnIndex,
|
|
46
46
|
isFirstVisible,
|
|
47
47
|
isLastVisible,
|
|
48
48
|
isNotVisible,
|
|
49
49
|
showBottomBorder,
|
|
50
|
+
scrollbarWidth,
|
|
51
|
+
gridHasFiller,
|
|
50
52
|
onClick,
|
|
51
53
|
onDoubleClick,
|
|
52
54
|
onMouseEnter,
|
|
@@ -66,14 +68,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
66
68
|
const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);
|
|
67
69
|
const handleRef = useForkRef(ref, refProp);
|
|
68
70
|
const rowNode = apiRef.current.getRowNode(rowId);
|
|
69
|
-
const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
|
|
70
|
-
const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
|
|
71
71
|
const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;
|
|
72
72
|
const editable = rootProps.editMode === GridEditModes.Row;
|
|
73
|
-
const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
|
|
74
73
|
const hasFocusCell = focusedColumnIndex !== undefined;
|
|
75
|
-
const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex <
|
|
76
|
-
const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >=
|
|
74
|
+
const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < firstColumnIndex;
|
|
75
|
+
const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= lastColumnIndex;
|
|
77
76
|
const classes = composeGridClasses(rootProps.classes, {
|
|
78
77
|
root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']
|
|
79
78
|
});
|
|
@@ -189,14 +188,14 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
189
188
|
});
|
|
190
189
|
rowClassNames.push(rootProps.getRowClassName(rowParams));
|
|
191
190
|
}
|
|
192
|
-
const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition =
|
|
191
|
+
const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
|
|
193
192
|
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
|
|
194
193
|
if (cellColSpanInfo?.spannedByColSpan) {
|
|
195
194
|
return null;
|
|
196
195
|
}
|
|
197
196
|
const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
|
|
198
197
|
const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
|
|
199
|
-
const pinnedOffset = getPinnedCellOffset(
|
|
198
|
+
const pinnedOffset = getPinnedCellOffset(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
|
|
200
199
|
if (rowNode?.type === 'skeletonRow') {
|
|
201
200
|
return /*#__PURE__*/_jsx(slots.skeletonCell, {
|
|
202
201
|
type: column.type,
|
|
@@ -215,7 +214,9 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
215
214
|
const canReorderColumn = !(disableColumnReorder || column.disableReorder);
|
|
216
215
|
const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
|
|
217
216
|
const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
|
|
218
|
-
const cellIsNotVisible = pinnedPosition ===
|
|
217
|
+
const cellIsNotVisible = pinnedPosition === PinnedColumnPosition.VIRTUAL;
|
|
218
|
+
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
|
|
219
|
+
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
|
|
219
220
|
return /*#__PURE__*/_jsx(slots.cell, _extends({
|
|
220
221
|
column: column,
|
|
221
222
|
width: width,
|
|
@@ -228,9 +229,8 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
228
229
|
isNotVisible: cellIsNotVisible,
|
|
229
230
|
pinnedOffset: pinnedOffset,
|
|
230
231
|
pinnedPosition: pinnedPosition,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
gridHasFiller: gridHasFiller
|
|
232
|
+
showLeftBorder: showLeftBorder,
|
|
233
|
+
showRightBorder: showRightBorder
|
|
234
234
|
}, slotProps?.cell), column.field);
|
|
235
235
|
};
|
|
236
236
|
|
|
@@ -241,25 +241,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
241
241
|
}
|
|
242
242
|
const leftCells = pinnedColumns.left.map((column, i) => {
|
|
243
243
|
const indexRelativeToAllColumns = i;
|
|
244
|
-
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length,
|
|
244
|
+
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedColumnPosition.LEFT);
|
|
245
245
|
});
|
|
246
246
|
const rightCells = pinnedColumns.right.map((column, i) => {
|
|
247
247
|
const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
|
|
248
|
-
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length,
|
|
248
|
+
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedColumnPosition.RIGHT);
|
|
249
249
|
});
|
|
250
250
|
const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
|
|
251
251
|
const cells = [];
|
|
252
252
|
if (hasVirtualFocusCellLeft) {
|
|
253
|
-
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength,
|
|
254
|
-
}
|
|
255
|
-
let firstColumnIndex;
|
|
256
|
-
let lastColumnIndex;
|
|
257
|
-
if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
|
|
258
|
-
firstColumnIndex = 0;
|
|
259
|
-
lastColumnIndex = visibleColumns.length;
|
|
260
|
-
} else {
|
|
261
|
-
firstColumnIndex = renderContext.firstColumnIndex;
|
|
262
|
-
lastColumnIndex = renderContext.lastColumnIndex;
|
|
253
|
+
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
|
|
263
254
|
}
|
|
264
255
|
for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
|
|
265
256
|
const column = visibleColumns[i];
|
|
@@ -270,7 +261,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
|
|
|
270
261
|
cells.push(getCell(column, indexInSection, i, middleColumnsLength));
|
|
271
262
|
}
|
|
272
263
|
if (hasVirtualFocusCellRight) {
|
|
273
|
-
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength,
|
|
264
|
+
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
|
|
274
265
|
}
|
|
275
266
|
const eventHandlers = row ? {
|
|
276
267
|
onClick: publishClick,
|
|
@@ -307,48 +298,14 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
|
|
|
307
298
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
308
299
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
309
300
|
// ----------------------------------------------------------------------
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
columnsTotalWidth: PropTypes.number.isRequired,
|
|
313
|
-
contentSize: PropTypes.shape({
|
|
314
|
-
height: PropTypes.number.isRequired,
|
|
315
|
-
width: PropTypes.number.isRequired
|
|
316
|
-
}).isRequired,
|
|
317
|
-
groupHeaderHeight: PropTypes.number.isRequired,
|
|
318
|
-
hasScrollX: PropTypes.bool.isRequired,
|
|
319
|
-
hasScrollY: PropTypes.bool.isRequired,
|
|
320
|
-
headerFilterHeight: PropTypes.number.isRequired,
|
|
321
|
-
headerHeight: PropTypes.number.isRequired,
|
|
322
|
-
headersTotalHeight: PropTypes.number.isRequired,
|
|
323
|
-
isReady: PropTypes.bool.isRequired,
|
|
324
|
-
leftPinnedWidth: PropTypes.number.isRequired,
|
|
325
|
-
minimumSize: PropTypes.shape({
|
|
326
|
-
height: PropTypes.number.isRequired,
|
|
327
|
-
width: PropTypes.number.isRequired
|
|
328
|
-
}).isRequired,
|
|
329
|
-
rightPinnedWidth: PropTypes.number.isRequired,
|
|
330
|
-
root: PropTypes.shape({
|
|
331
|
-
height: PropTypes.number.isRequired,
|
|
332
|
-
width: PropTypes.number.isRequired
|
|
333
|
-
}).isRequired,
|
|
334
|
-
rowHeight: PropTypes.number.isRequired,
|
|
335
|
-
rowWidth: PropTypes.number.isRequired,
|
|
336
|
-
scrollbarSize: PropTypes.number.isRequired,
|
|
337
|
-
topContainerHeight: PropTypes.number.isRequired,
|
|
338
|
-
viewportInnerSize: PropTypes.shape({
|
|
339
|
-
height: PropTypes.number.isRequired,
|
|
340
|
-
width: PropTypes.number.isRequired
|
|
341
|
-
}).isRequired,
|
|
342
|
-
viewportOuterSize: PropTypes.shape({
|
|
343
|
-
height: PropTypes.number.isRequired,
|
|
344
|
-
width: PropTypes.number.isRequired
|
|
345
|
-
}).isRequired
|
|
346
|
-
}).isRequired,
|
|
301
|
+
columnsTotalWidth: PropTypes.number.isRequired,
|
|
302
|
+
firstColumnIndex: PropTypes.number.isRequired,
|
|
347
303
|
/**
|
|
348
304
|
* Determines which cell has focus.
|
|
349
305
|
* If `null`, no cell in this row has focus.
|
|
350
306
|
*/
|
|
351
307
|
focusedColumnIndex: PropTypes.number,
|
|
308
|
+
gridHasFiller: PropTypes.bool.isRequired,
|
|
352
309
|
/**
|
|
353
310
|
* Index of the row in the whole sorted and filtered dataset.
|
|
354
311
|
* If some rows above have expanded children, this index also take those children into account.
|
|
@@ -357,6 +314,7 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
|
|
|
357
314
|
isFirstVisible: PropTypes.bool.isRequired,
|
|
358
315
|
isLastVisible: PropTypes.bool.isRequired,
|
|
359
316
|
isNotVisible: PropTypes.bool.isRequired,
|
|
317
|
+
lastColumnIndex: PropTypes.number.isRequired,
|
|
360
318
|
offsetLeft: PropTypes.number.isRequired,
|
|
361
319
|
offsetTop: PropTypes.number,
|
|
362
320
|
onClick: PropTypes.func,
|
|
@@ -364,22 +322,12 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
|
|
|
364
322
|
onMouseEnter: PropTypes.func,
|
|
365
323
|
onMouseLeave: PropTypes.func,
|
|
366
324
|
pinnedColumns: PropTypes.object.isRequired,
|
|
367
|
-
renderContext: PropTypes.shape({
|
|
368
|
-
firstColumnIndex: PropTypes.number.isRequired,
|
|
369
|
-
firstRowIndex: PropTypes.number.isRequired,
|
|
370
|
-
lastColumnIndex: PropTypes.number.isRequired,
|
|
371
|
-
lastRowIndex: PropTypes.number.isRequired
|
|
372
|
-
}).isRequired,
|
|
373
325
|
row: PropTypes.object.isRequired,
|
|
374
326
|
rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
|
|
375
327
|
rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
|
|
328
|
+
scrollbarWidth: PropTypes.number.isRequired,
|
|
376
329
|
selected: PropTypes.bool.isRequired,
|
|
377
330
|
showBottomBorder: PropTypes.bool.isRequired,
|
|
378
|
-
/**
|
|
379
|
-
* Determines which cell should be tabbable by having tabIndex=0.
|
|
380
|
-
* If `null`, no cell in this row is in the tab sequence.
|
|
381
|
-
*/
|
|
382
|
-
tabbableCell: PropTypes.string,
|
|
383
331
|
visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired
|
|
384
332
|
} : void 0;
|
|
385
333
|
const MemoizedGridRow = fastMemo(GridRow);
|
|
@@ -4,15 +4,19 @@ import clsx from 'clsx';
|
|
|
4
4
|
import { styled } from '@mui/system';
|
|
5
5
|
import useForkRef from '@mui/utils/useForkRef';
|
|
6
6
|
import composeClasses from '@mui/utils/composeClasses';
|
|
7
|
+
import { useRtl } from '@mui/system/RtlProvider';
|
|
7
8
|
import { forwardRef } from '@mui/x-internals/forwardRef';
|
|
8
9
|
import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
|
|
9
10
|
import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
|
|
10
|
-
import {
|
|
11
|
+
import { gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridDimensionsSelector, gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, useGridApiEventHandler, useGridSelector } from "../hooks/index.js";
|
|
12
|
+
import { PinnedColumnPosition } from "../internals/constants.js";
|
|
11
13
|
import { getDataGridUtilityClass, gridClasses } from "../constants/gridClasses.js";
|
|
12
14
|
import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
|
|
13
15
|
import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.js";
|
|
14
16
|
import { escapeOperandAttributeSelector } from "../utils/domUtils.js";
|
|
15
17
|
import { GridScrollbarFillerCell } from "./GridScrollbarFillerCell.js";
|
|
18
|
+
import { rtlFlipSide } from "../utils/rtlFlipSide.js";
|
|
19
|
+
import { attachPinnedStyle } from "../internals/utils/index.js";
|
|
16
20
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
21
|
const SkeletonOverlay = styled('div', {
|
|
18
22
|
name: 'MuiDataGrid',
|
|
@@ -40,6 +44,7 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
40
44
|
const {
|
|
41
45
|
slots
|
|
42
46
|
} = rootProps;
|
|
47
|
+
const isRtl = useRtl();
|
|
43
48
|
const classes = useUtilityClasses({
|
|
44
49
|
classes: rootProps.classes
|
|
45
50
|
});
|
|
@@ -55,18 +60,12 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
55
60
|
const allVisibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
|
|
56
61
|
const columns = React.useMemo(() => allVisibleColumns.slice(0, inViewportCount), [allVisibleColumns, inViewportCount]);
|
|
57
62
|
const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
|
|
58
|
-
const getPinnedStyle = React.useCallback((computedWidth, index, position) => {
|
|
59
|
-
const pinnedOffset = getPinnedCellOffset(position, computedWidth, index, positions, dimensions);
|
|
60
|
-
return {
|
|
61
|
-
[position]: pinnedOffset
|
|
62
|
-
};
|
|
63
|
-
}, [dimensions, positions]);
|
|
64
63
|
const getPinnedPosition = React.useCallback(field => {
|
|
65
64
|
if (pinnedColumns.left.findIndex(col => col.field === field) !== -1) {
|
|
66
|
-
return
|
|
65
|
+
return PinnedColumnPosition.LEFT;
|
|
67
66
|
}
|
|
68
67
|
if (pinnedColumns.right.findIndex(col => col.field === field) !== -1) {
|
|
69
|
-
return
|
|
68
|
+
return PinnedColumnPosition.RIGHT;
|
|
70
69
|
}
|
|
71
70
|
return undefined;
|
|
72
71
|
}, [pinnedColumns.left, pinnedColumns.right]);
|
|
@@ -77,13 +76,15 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
77
76
|
for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {
|
|
78
77
|
const column = columns[colIndex];
|
|
79
78
|
const pinnedPosition = getPinnedPosition(column.field);
|
|
80
|
-
const isPinnedLeft = pinnedPosition ===
|
|
81
|
-
const isPinnedRight = pinnedPosition ===
|
|
82
|
-
const
|
|
79
|
+
const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
|
|
80
|
+
const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
|
|
81
|
+
const pinnedSide = rtlFlipSide(pinnedPosition, isRtl);
|
|
82
|
+
const sectionLength = pinnedSide ? pinnedColumns[pinnedSide].length // pinned section
|
|
83
83
|
: columns.length - pinnedColumns.left.length - pinnedColumns.right.length; // middle section
|
|
84
|
-
const sectionIndex =
|
|
84
|
+
const sectionIndex = pinnedSide ? pinnedColumns[pinnedSide].findIndex(col => col.field === column.field) // pinned section
|
|
85
85
|
: colIndex - pinnedColumns.left.length; // middle section
|
|
86
|
-
const
|
|
86
|
+
const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
|
|
87
|
+
const pinnedStyle = attachPinnedStyle({}, isRtl, pinnedPosition, getPinnedCellOffset(pinnedPosition, column.computedWidth, colIndex, positions, dimensions.columnsTotalWidth, scrollbarWidth));
|
|
87
88
|
const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
|
|
88
89
|
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
|
|
89
90
|
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, sectionIndex);
|
|
@@ -97,7 +98,6 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
97
98
|
width: emptyCellWidth,
|
|
98
99
|
empty: true
|
|
99
100
|
}, `skeleton-filler-column-${i}`);
|
|
100
|
-
const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
|
|
101
101
|
const hasScrollbarFiller = isLastColumn && scrollbarWidth !== 0;
|
|
102
102
|
if (hasFillerBefore) {
|
|
103
103
|
rowCells.push(emptyCell);
|
|
@@ -129,7 +129,7 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
129
129
|
}, `skeleton-row-${i}`));
|
|
130
130
|
}
|
|
131
131
|
return array;
|
|
132
|
-
}, [slots, columns, pinnedColumns, skeletonRowsCount, rootProps.showCellVerticalBorder, dimensions
|
|
132
|
+
}, [slots, columns, pinnedColumns, skeletonRowsCount, rootProps.showCellVerticalBorder, dimensions, positions, getPinnedPosition, isRtl]);
|
|
133
133
|
|
|
134
134
|
// Sync the column resize of the overlay columns with the grid
|
|
135
135
|
const handleColumnResize = params => {
|
|
@@ -143,8 +143,8 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
|
|
|
143
143
|
}
|
|
144
144
|
const resizedColIndex = columns.findIndex(col => col.field === colDef.field);
|
|
145
145
|
const pinnedPosition = getPinnedPosition(colDef.field);
|
|
146
|
-
const isPinnedLeft = pinnedPosition ===
|
|
147
|
-
const isPinnedRight = pinnedPosition ===
|
|
146
|
+
const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
|
|
147
|
+
const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
|
|
148
148
|
const currentWidth = getComputedStyle(cells[0]).getPropertyValue('--width');
|
|
149
149
|
const delta = parseInt(currentWidth, 10) - width;
|
|
150
150
|
if (cells) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
const _excluded = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "
|
|
3
|
+
const _excluded = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "showRightBorder", "showLeftBorder", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
|
|
4
4
|
_excluded2 = ["changeReason", "unstable_updateValueOnRender"];
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
@@ -16,22 +16,16 @@ import { useGridSelector, objectShallowCompare } from "../../hooks/utils/useGrid
|
|
|
16
16
|
import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
|
|
17
17
|
import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
|
|
18
18
|
import { gridFocusCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
|
|
19
|
-
import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
|
|
20
19
|
import { GridPinnedColumnPosition } from "../../hooks/features/columns/gridColumnsInterfaces.js";
|
|
20
|
+
import { PinnedColumnPosition } from "../../internals/constants.js";
|
|
21
21
|
import { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from "../../hooks/features/rows/gridRowSpanningSelectors.js";
|
|
22
|
+
import { attachPinnedStyle } from "../../internals/utils/index.js";
|
|
22
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
-
export let PinnedPosition = /*#__PURE__*/function (PinnedPosition) {
|
|
24
|
-
PinnedPosition[PinnedPosition["NONE"] = 0] = "NONE";
|
|
25
|
-
PinnedPosition[PinnedPosition["LEFT"] = 1] = "LEFT";
|
|
26
|
-
PinnedPosition[PinnedPosition["RIGHT"] = 2] = "RIGHT";
|
|
27
|
-
PinnedPosition[PinnedPosition["VIRTUAL"] = 3] = "VIRTUAL";
|
|
28
|
-
return PinnedPosition;
|
|
29
|
-
}({});
|
|
30
24
|
export const gridPinnedColumnPositionLookup = {
|
|
31
|
-
[
|
|
32
|
-
[
|
|
33
|
-
[
|
|
34
|
-
[
|
|
25
|
+
[PinnedColumnPosition.LEFT]: GridPinnedColumnPosition.LEFT,
|
|
26
|
+
[PinnedColumnPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,
|
|
27
|
+
[PinnedColumnPosition.NONE]: undefined,
|
|
28
|
+
[PinnedColumnPosition.VIRTUAL]: undefined
|
|
35
29
|
};
|
|
36
30
|
const EMPTY_CELL_PARAMS = {
|
|
37
31
|
id: -1,
|
|
@@ -69,7 +63,7 @@ const useUtilityClasses = ownerState => {
|
|
|
69
63
|
classes
|
|
70
64
|
} = ownerState;
|
|
71
65
|
const slots = {
|
|
72
|
-
root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition ===
|
|
66
|
+
root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']
|
|
73
67
|
};
|
|
74
68
|
return composeClasses(slots, getDataGridUtilityClass, classes);
|
|
75
69
|
};
|
|
@@ -92,9 +86,8 @@ const GridCell = forwardRef(function GridCell(props, ref) {
|
|
|
92
86
|
isNotVisible,
|
|
93
87
|
pinnedOffset,
|
|
94
88
|
pinnedPosition,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
gridHasFiller,
|
|
89
|
+
showRightBorder,
|
|
90
|
+
showLeftBorder,
|
|
98
91
|
onClick,
|
|
99
92
|
onDoubleClick,
|
|
100
93
|
onMouseDown,
|
|
@@ -161,9 +154,6 @@ const GridCell = forwardRef(function GridCell(props, ref) {
|
|
|
161
154
|
const handleRef = useForkRef(ref, cellRef);
|
|
162
155
|
const focusElementRef = React.useRef(null);
|
|
163
156
|
const isSelectionMode = rootProps.cellSelection ?? false;
|
|
164
|
-
const position = gridPinnedColumnPositionLookup[pinnedPosition];
|
|
165
|
-
const showLeftBorder = shouldCellShowLeftBorder(position, sectionIndex);
|
|
166
|
-
const showRightBorder = shouldCellShowRightBorder(position, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
|
|
167
157
|
const ownerState = {
|
|
168
158
|
align,
|
|
169
159
|
showLeftBorder,
|
|
@@ -212,18 +202,11 @@ const GridCell = forwardRef(function GridCell(props, ref) {
|
|
|
212
202
|
border: 0
|
|
213
203
|
};
|
|
214
204
|
}
|
|
215
|
-
const cellStyle = _extends({
|
|
205
|
+
const cellStyle = attachPinnedStyle(_extends({
|
|
216
206
|
'--width': `${width}px`
|
|
217
|
-
}, styleProp);
|
|
218
|
-
const isLeftPinned = pinnedPosition ===
|
|
219
|
-
const isRightPinned = pinnedPosition ===
|
|
220
|
-
if (isLeftPinned || isRightPinned) {
|
|
221
|
-
let side = isLeftPinned ? 'left' : 'right';
|
|
222
|
-
if (isRtl) {
|
|
223
|
-
side = isLeftPinned ? 'right' : 'left';
|
|
224
|
-
}
|
|
225
|
-
cellStyle[side] = pinnedOffset;
|
|
226
|
-
}
|
|
207
|
+
}, styleProp), isRtl, pinnedPosition, pinnedOffset);
|
|
208
|
+
const isLeftPinned = pinnedPosition === PinnedColumnPosition.LEFT;
|
|
209
|
+
const isRightPinned = pinnedPosition === PinnedColumnPosition.RIGHT;
|
|
227
210
|
if (rowSpan > 1) {
|
|
228
211
|
cellStyle.height = `calc(var(--height) * ${rowSpan})`;
|
|
229
212
|
cellStyle.zIndex = 5;
|
|
@@ -353,13 +336,12 @@ process.env.NODE_ENV !== "production" ? GridCell.propTypes = {
|
|
|
353
336
|
isValidating: PropTypes.bool,
|
|
354
337
|
value: PropTypes.any
|
|
355
338
|
}),
|
|
356
|
-
gridHasFiller: PropTypes.bool.isRequired,
|
|
357
339
|
isNotVisible: PropTypes.bool.isRequired,
|
|
358
|
-
pinnedOffset: PropTypes.number
|
|
340
|
+
pinnedOffset: PropTypes.number,
|
|
359
341
|
pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]).isRequired,
|
|
360
342
|
rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
|
|
361
|
-
|
|
362
|
-
|
|
343
|
+
showLeftBorder: PropTypes.bool.isRequired,
|
|
344
|
+
showRightBorder: PropTypes.bool.isRequired,
|
|
363
345
|
width: PropTypes.number.isRequired
|
|
364
346
|
} : void 0;
|
|
365
347
|
const MemoizedGridCell = fastMemo(GridCell);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { unstable_useId as useId, unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
4
|
+
import { useRtl } from '@mui/system/RtlProvider';
|
|
4
5
|
import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
|
|
5
6
|
import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
|
|
6
7
|
import { gridColumnGroupsLookupSelector } from "../../hooks/features/columnGrouping/gridColumnGroupsSelector.js";
|
|
@@ -8,7 +9,8 @@ import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
|
|
|
8
9
|
import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
|
|
9
10
|
import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
|
|
10
11
|
import { isEventTargetInPortal } from "../../utils/domUtils.js";
|
|
11
|
-
import {
|
|
12
|
+
import { PinnedColumnPosition } from "../../internals/constants.js";
|
|
13
|
+
import { attachPinnedStyle } from "../../internals/utils/index.js";
|
|
12
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
15
|
const useUtilityClasses = ownerState => {
|
|
14
16
|
const {
|
|
@@ -22,7 +24,7 @@ const useUtilityClasses = ownerState => {
|
|
|
22
24
|
pinnedPosition
|
|
23
25
|
} = ownerState;
|
|
24
26
|
const slots = {
|
|
25
|
-
root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition ===
|
|
27
|
+
root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
|
|
26
28
|
draggableContainer: ['columnHeaderDraggableContainer'],
|
|
27
29
|
titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],
|
|
28
30
|
titleContainerContent: ['columnHeaderTitleContainerContent']
|
|
@@ -42,12 +44,10 @@ function GridColumnGroupHeader(props) {
|
|
|
42
44
|
tabIndex,
|
|
43
45
|
isLastColumn,
|
|
44
46
|
pinnedPosition,
|
|
45
|
-
|
|
46
|
-
indexInSection,
|
|
47
|
-
sectionLength,
|
|
48
|
-
gridHasFiller
|
|
47
|
+
pinnedOffset
|
|
49
48
|
} = props;
|
|
50
49
|
const rootProps = useGridRootProps();
|
|
50
|
+
const isRtl = useRtl();
|
|
51
51
|
const headerCellRef = React.useRef(null);
|
|
52
52
|
const apiRef = useGridApiContext();
|
|
53
53
|
const columnGroupsLookup = useGridSelector(apiRef, gridColumnGroupsLookupSelector);
|
|
@@ -72,12 +72,8 @@ function GridColumnGroupHeader(props) {
|
|
|
72
72
|
if (groupId && render) {
|
|
73
73
|
headerComponent = render(renderParams);
|
|
74
74
|
}
|
|
75
|
-
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
|
|
76
|
-
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
|
|
77
75
|
const ownerState = _extends({}, props, {
|
|
78
76
|
classes: rootProps.classes,
|
|
79
|
-
showLeftBorder,
|
|
80
|
-
showRightBorder,
|
|
81
77
|
headerAlign,
|
|
82
78
|
depth,
|
|
83
79
|
isDragging: false
|
|
@@ -110,6 +106,7 @@ function GridColumnGroupHeader(props) {
|
|
|
110
106
|
onBlur: publish('columnGroupHeaderBlur')
|
|
111
107
|
}), [publish]);
|
|
112
108
|
const headerClassName = typeof group.headerClassName === 'function' ? group.headerClassName(renderParams) : group.headerClassName;
|
|
109
|
+
const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
|
|
113
110
|
return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
|
|
114
111
|
ref: headerCellRef,
|
|
115
112
|
classes: classes,
|
|
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
|
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import { unstable_composeClasses as composeClasses, unstable_useId as useId } from '@mui/utils';
|
|
6
6
|
import { fastMemo } from '@mui/x-internals/fastMemo';
|
|
7
|
+
import { useRtl } from '@mui/system/RtlProvider';
|
|
7
8
|
import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
|
|
8
9
|
import { ColumnHeaderMenuIcon } from "./ColumnHeaderMenuIcon.js";
|
|
9
10
|
import { GridColumnHeaderMenu } from "../menu/columnMenu/GridColumnHeaderMenu.js";
|
|
@@ -11,7 +12,8 @@ import { gridClasses, getDataGridUtilityClass } from "../../constants/gridClasse
|
|
|
11
12
|
import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
|
|
12
13
|
import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
|
|
13
14
|
import { isEventTargetInPortal } from "../../utils/domUtils.js";
|
|
14
|
-
import {
|
|
15
|
+
import { PinnedColumnPosition } from "../../internals/constants.js";
|
|
16
|
+
import { attachPinnedStyle } from "../../internals/utils/index.js";
|
|
15
17
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
18
|
const useUtilityClasses = ownerState => {
|
|
17
19
|
const {
|
|
@@ -31,7 +33,7 @@ const useUtilityClasses = ownerState => {
|
|
|
31
33
|
// todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work
|
|
32
34
|
const isColumnNumeric = colDef.type === 'number';
|
|
33
35
|
const slots = {
|
|
34
|
-
root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition ===
|
|
36
|
+
root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight',
|
|
35
37
|
// TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom
|
|
36
38
|
// See https://github.com/mui/mui-x/pull/14559
|
|
37
39
|
isLastUnpinned && 'columnHeader--lastUnpinned', isSiblingFocused && 'columnHeader--siblingFocused'],
|
|
@@ -56,14 +58,14 @@ function GridColumnHeaderItem(props) {
|
|
|
56
58
|
tabIndex,
|
|
57
59
|
disableReorder,
|
|
58
60
|
separatorSide,
|
|
59
|
-
|
|
61
|
+
showLeftBorder,
|
|
62
|
+
showRightBorder,
|
|
60
63
|
pinnedPosition,
|
|
61
|
-
|
|
62
|
-
sectionLength,
|
|
63
|
-
gridHasFiller
|
|
64
|
+
pinnedOffset
|
|
64
65
|
} = props;
|
|
65
66
|
const apiRef = useGridPrivateApiContext();
|
|
66
67
|
const rootProps = useGridRootProps();
|
|
68
|
+
const isRtl = useRtl();
|
|
67
69
|
const headerCellRef = React.useRef(null);
|
|
68
70
|
const columnMenuId = useId();
|
|
69
71
|
const columnMenuButtonId = useId();
|
|
@@ -74,8 +76,6 @@ function GridColumnHeaderItem(props) {
|
|
|
74
76
|
if (colDef.renderHeader) {
|
|
75
77
|
headerComponent = colDef.renderHeader(apiRef.current.getColumnHeaderParams(colDef.field));
|
|
76
78
|
}
|
|
77
|
-
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
|
|
78
|
-
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
|
|
79
79
|
const ownerState = _extends({}, props, {
|
|
80
80
|
classes: rootProps.classes,
|
|
81
81
|
showRightBorder,
|
|
@@ -171,6 +171,7 @@ function GridColumnHeaderItem(props) {
|
|
|
171
171
|
colDef
|
|
172
172
|
}) : colDef.headerClassName;
|
|
173
173
|
const label = colDef.headerName ?? colDef.field;
|
|
174
|
+
const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
|
|
174
175
|
return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
|
|
175
176
|
ref: headerCellRef,
|
|
176
177
|
classes: classes,
|
|
@@ -209,18 +210,18 @@ process.env.NODE_ENV !== "production" ? GridColumnHeaderItem.propTypes = {
|
|
|
209
210
|
columnMenuOpen: PropTypes.bool.isRequired,
|
|
210
211
|
disableReorder: PropTypes.bool,
|
|
211
212
|
filterItemsCounter: PropTypes.number,
|
|
212
|
-
gridHasFiller: PropTypes.bool.isRequired,
|
|
213
213
|
hasFocus: PropTypes.bool,
|
|
214
214
|
headerHeight: PropTypes.number.isRequired,
|
|
215
|
-
indexInSection: PropTypes.number.isRequired,
|
|
216
215
|
isDragging: PropTypes.bool.isRequired,
|
|
217
216
|
isLast: PropTypes.bool.isRequired,
|
|
218
217
|
isLastUnpinned: PropTypes.bool.isRequired,
|
|
219
218
|
isResizing: PropTypes.bool.isRequired,
|
|
220
219
|
isSiblingFocused: PropTypes.bool.isRequired,
|
|
221
|
-
|
|
222
|
-
|
|
220
|
+
pinnedOffset: PropTypes.number,
|
|
221
|
+
pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]),
|
|
223
222
|
separatorSide: PropTypes.oneOf(['left', 'right']),
|
|
223
|
+
showLeftBorder: PropTypes.bool.isRequired,
|
|
224
|
+
showRightBorder: PropTypes.bool.isRequired,
|
|
224
225
|
sortDirection: PropTypes.oneOf(['asc', 'desc']),
|
|
225
226
|
sortIndex: PropTypes.number,
|
|
226
227
|
style: PropTypes.object,
|
|
@@ -8,7 +8,7 @@ import { forwardRef } from '@mui/x-internals/forwardRef';
|
|
|
8
8
|
import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
|
|
9
9
|
import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
|
|
10
10
|
import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
|
|
11
|
-
import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
|
|
11
|
+
import { objectShallowCompare, useGridSelector } from "../../hooks/utils/useGridSelector.js";
|
|
12
12
|
import { getCheckboxPropsSelector } from "../../hooks/features/rowSelection/utils.js";
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
14
|
const useUtilityClasses = ownerState => {
|
|
@@ -76,7 +76,7 @@ const GridCellCheckboxForwardRef = forwardRef(function GridCellCheckboxRenderer(
|
|
|
76
76
|
const {
|
|
77
77
|
isIndeterminate,
|
|
78
78
|
isChecked
|
|
79
|
-
} = useGridSelector(apiRef, checkboxPropsSelector);
|
|
79
|
+
} = useGridSelector(apiRef, checkboxPropsSelector, undefined, objectShallowCompare);
|
|
80
80
|
if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {
|
|
81
81
|
return null;
|
|
82
82
|
}
|