@mui/x-data-grid 7.24.1 → 7.25.0

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.
Files changed (118) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/DataGrid/DataGrid.js +1 -7
  3. package/components/GridRow.d.ts +0 -1
  4. package/components/GridRow.js +25 -19
  5. package/components/cell/GridCell.d.ts +9 -6
  6. package/components/cell/GridCell.js +29 -52
  7. package/components/containers/GridRootStyles.js +135 -37
  8. package/components/toolbar/GridToolbarColumnsButton.js +5 -4
  9. package/components/toolbar/GridToolbarDensitySelector.js +2 -2
  10. package/components/toolbar/GridToolbarExportContainer.js +2 -2
  11. package/components/toolbar/GridToolbarFilterButton.js +4 -3
  12. package/components/virtualization/GridMainContainer.d.ts +10 -0
  13. package/components/virtualization/GridMainContainer.js +10 -2
  14. package/components/virtualization/GridVirtualScrollbar.d.ts +4 -0
  15. package/components/virtualization/GridVirtualScrollbar.js +5 -5
  16. package/components/virtualization/GridVirtualScroller.js +18 -5
  17. package/components/virtualization/GridVirtualScrollerContent.js +11 -2
  18. package/hooks/features/columnResize/useGridColumnResize.js +2 -1
  19. package/hooks/features/columns/useGridColumns.js +7 -3
  20. package/hooks/features/dimensions/useGridDimensions.js +6 -8
  21. package/hooks/features/editing/gridEditingSelectors.d.ts +6 -0
  22. package/hooks/features/editing/gridEditingSelectors.js +7 -1
  23. package/hooks/features/editing/index.d.ts +1 -1
  24. package/hooks/features/editing/index.js +1 -1
  25. package/hooks/features/editing/useGridCellEditing.js +3 -3
  26. package/hooks/features/editing/useGridRowEditing.js +5 -6
  27. package/hooks/features/focus/useGridFocus.js +3 -2
  28. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  29. package/hooks/features/keyboardNavigation/utils.d.ts +1 -2
  30. package/hooks/features/keyboardNavigation/utils.js +0 -5
  31. package/hooks/features/listView/useGridListView.js +2 -1
  32. package/hooks/features/rowSelection/useGridRowSelection.js +3 -3
  33. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  34. package/hooks/features/rows/useGridParamsApi.js +33 -14
  35. package/hooks/features/rows/useGridRowSpanning.js +94 -91
  36. package/hooks/features/rows/useGridRows.js +7 -8
  37. package/hooks/features/rows/useGridRowsMeta.js +3 -2
  38. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  39. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +9 -1
  40. package/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  41. package/index.js +1 -1
  42. package/models/api/gridApiCommon.d.ts +2 -2
  43. package/models/api/gridParamsApi.d.ts +29 -2
  44. package/models/api/index.d.ts +1 -1
  45. package/models/api/index.js +0 -1
  46. package/modern/DataGrid/DataGrid.js +1 -7
  47. package/modern/components/GridRow.js +25 -19
  48. package/modern/components/cell/GridCell.js +29 -52
  49. package/modern/components/containers/GridRootStyles.js +135 -37
  50. package/modern/components/toolbar/GridToolbarColumnsButton.js +5 -4
  51. package/modern/components/toolbar/GridToolbarDensitySelector.js +2 -2
  52. package/modern/components/toolbar/GridToolbarExportContainer.js +2 -2
  53. package/modern/components/toolbar/GridToolbarFilterButton.js +4 -3
  54. package/modern/components/virtualization/GridMainContainer.js +10 -2
  55. package/modern/components/virtualization/GridVirtualScrollbar.js +5 -5
  56. package/modern/components/virtualization/GridVirtualScroller.js +18 -5
  57. package/modern/components/virtualization/GridVirtualScrollerContent.js +11 -2
  58. package/modern/hooks/features/columnResize/useGridColumnResize.js +2 -1
  59. package/modern/hooks/features/columns/useGridColumns.js +7 -3
  60. package/modern/hooks/features/dimensions/useGridDimensions.js +6 -8
  61. package/modern/hooks/features/editing/gridEditingSelectors.js +7 -1
  62. package/modern/hooks/features/editing/index.js +1 -1
  63. package/modern/hooks/features/editing/useGridCellEditing.js +3 -3
  64. package/modern/hooks/features/editing/useGridRowEditing.js +5 -6
  65. package/modern/hooks/features/focus/useGridFocus.js +3 -2
  66. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  67. package/modern/hooks/features/keyboardNavigation/utils.js +0 -5
  68. package/modern/hooks/features/listView/useGridListView.js +2 -1
  69. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -3
  70. package/modern/hooks/features/rows/useGridParamsApi.js +33 -14
  71. package/modern/hooks/features/rows/useGridRowSpanning.js +94 -91
  72. package/modern/hooks/features/rows/useGridRows.js +7 -8
  73. package/modern/hooks/features/rows/useGridRowsMeta.js +3 -2
  74. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  75. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  76. package/modern/index.js +1 -1
  77. package/modern/models/api/index.js +0 -1
  78. package/modern/utils/roundToDecimalPlaces.js +3 -0
  79. package/modern/utils/utils.js +6 -1
  80. package/node/DataGrid/DataGrid.js +1 -7
  81. package/node/components/GridRow.js +22 -16
  82. package/node/components/cell/GridCell.js +27 -50
  83. package/node/components/containers/GridRootStyles.js +135 -37
  84. package/node/components/toolbar/GridToolbarColumnsButton.js +5 -4
  85. package/node/components/toolbar/GridToolbarDensitySelector.js +2 -2
  86. package/node/components/toolbar/GridToolbarExportContainer.js +2 -2
  87. package/node/components/toolbar/GridToolbarFilterButton.js +4 -3
  88. package/node/components/virtualization/GridMainContainer.js +10 -2
  89. package/node/components/virtualization/GridVirtualScrollbar.js +5 -5
  90. package/node/components/virtualization/GridVirtualScroller.js +18 -5
  91. package/node/components/virtualization/GridVirtualScrollerContent.js +11 -2
  92. package/node/hooks/features/columnResize/useGridColumnResize.js +2 -1
  93. package/node/hooks/features/columns/useGridColumns.js +7 -3
  94. package/node/hooks/features/dimensions/useGridDimensions.js +6 -8
  95. package/node/hooks/features/editing/gridEditingSelectors.js +8 -2
  96. package/node/hooks/features/editing/index.js +7 -11
  97. package/node/hooks/features/editing/useGridCellEditing.js +2 -2
  98. package/node/hooks/features/editing/useGridRowEditing.js +3 -4
  99. package/node/hooks/features/focus/useGridFocus.js +3 -2
  100. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -15
  101. package/node/hooks/features/keyboardNavigation/utils.js +0 -6
  102. package/node/hooks/features/listView/useGridListView.js +2 -1
  103. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  104. package/node/hooks/features/rows/useGridParamsApi.js +33 -14
  105. package/node/hooks/features/rows/useGridRowSpanning.js +92 -89
  106. package/node/hooks/features/rows/useGridRows.js +7 -8
  107. package/node/hooks/features/rows/useGridRowsMeta.js +5 -4
  108. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  109. package/node/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  110. package/node/index.js +1 -1
  111. package/node/models/api/index.js +0 -11
  112. package/node/utils/roundToDecimalPlaces.js +9 -0
  113. package/node/utils/utils.js +8 -1
  114. package/package.json +2 -2
  115. package/utils/roundToDecimalPlaces.d.ts +1 -0
  116. package/utils/roundToDecimalPlaces.js +3 -0
  117. package/utils/utils.d.ts +1 -0
  118. package/utils/utils.js +6 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,83 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.25.0
7
+
8
+ _Jan 31, 2025_
9
+
10
+ We'd like to offer a big thanks to the 5 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🐞 Bugfixes
13
+
14
+ Special thanks go out to the community contributors who have helped make this release possible:
15
+ @k-rajat19, @lauri865.
16
+ Following are all team members who have contributed to this release:
17
+ @KenanYusuf, @MBilalShafi, @arminmeh.
18
+
19
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
20
+
21
+ ### Data Grid
22
+
23
+ #### `@mui/x-data-grid@7.25.0`
24
+
25
+ - [DataGrid] Fix `renderContext` calculation with scroll bounce / over-scroll (#16368) @lauri865
26
+ - [DataGrid] Refactor row state propagation (#16351) @lauri865
27
+ - [DataGrid] Add missing style overrides (#16272) (#16358) @KenanYusuf
28
+ - [DataGrid] Fix header filters keyboard navigation when there are no rows (#16369) @k-rajat19
29
+ - [DataGrid] Fix order of `onClick` prop on toolbar buttons (#16364) @KenanYusuf
30
+ - [DataGrid] Improve test coverage of server side data source (#15988) @MBilalShafi
31
+ - [DataGrid] Remove outdated warning (#16370) @MBilalShafi
32
+ - [DataGrid] Respect width of `iconContainer` during autosizing (#16409) @michelengelen
33
+
34
+ #### `@mui/x-data-grid-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
35
+
36
+ Same changes as in `@mui/x-data-grid@7.25.0`, plus:
37
+
38
+ - [DataGridPro] Fix the return type of `useGridApiRef` for Pro and Premium packages on React < 19 (#16348) @arminmeh
39
+ - [DataGridPro] Fetch new rows only once when multiple models are changed in one cycle (#16382) @arminmeh
40
+
41
+ #### `@mui/x-data-grid-premium@7.25.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
42
+
43
+ Same changes as in `@mui/x-data-grid-pro@7.25.0`.
44
+
45
+ ### Date and Time Pickers
46
+
47
+ #### `@mui/x-date-pickers@7.25.0`
48
+
49
+ Internal changes.
50
+
51
+ #### `@mui/x-date-pickers-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
52
+
53
+ Same changes as in `@mui/x-date-pickers@7.25.0`.
54
+
55
+ ### Charts
56
+
57
+ #### `@mui/x-charts@7.25.0`
58
+
59
+ Internal changes.
60
+
61
+ #### `@mui/x-charts-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
62
+
63
+ Same changes as in `@mui/x-charts@7.25.0`.
64
+
65
+ ### Tree View
66
+
67
+ #### `@mui/x-tree-view@7.25.0`
68
+
69
+ Internal changes.
70
+
71
+ #### `@mui/x-tree-view-pro@7.25.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
72
+
73
+ Same changes as in `@mui/x-tree-view@7.25.0`.
74
+
75
+ ### Docs
76
+
77
+ - [docs] Improve release documentation (#16322) @MBilalShafi
78
+
79
+ ### Core
80
+
81
+ - [test] Fix flaky data source tests in DataGrid (#16382) @lauri865
82
+
6
83
  ## 7.24.1
7
84
 
8
85
  _Jan 24, 2025_
@@ -18,17 +18,11 @@ const configuration = {
18
18
  useGridRowAriaAttributes
19
19
  }
20
20
  };
21
- let propValidators;
22
- if (process.env.NODE_ENV !== 'production') {
23
- propValidators = [...propValidatorsDataGrid,
24
- // Only validate in MIT version
25
- props => props.columns && props.columns.some(column => column.resizable) && [`MUI X: \`column.resizable = true\` is not a valid prop.`, 'Column resizing is not available in the MIT version.', '', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n') || undefined];
26
- }
27
21
  const DataGridRaw = forwardRef(function DataGrid(inProps, ref) {
28
22
  const props = useDataGridProps(inProps);
29
23
  const privateApiRef = useDataGridComponent(props.apiRef, props);
30
24
  if (process.env.NODE_ENV !== 'production') {
31
- validateProps(props, propValidators);
25
+ validateProps(props, propValidatorsDataGrid);
32
26
  }
33
27
  return /*#__PURE__*/_jsx(GridContextProvider, {
34
28
  privateApiRef: privateApiRef,
@@ -12,7 +12,6 @@ export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
12
12
  */
13
13
  index: number;
14
14
  rowHeight: number | 'auto';
15
- offsetTop: number | undefined;
16
15
  offsetLeft: number;
17
16
  columnsTotalWidth: number;
18
17
  firstColumnIndex: number;
@@ -1,19 +1,20 @@
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", "columnsTotalWidth", "firstColumnIndex", "lastColumnIndex", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "scrollbarWidth", "gridHasFiller", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
3
+ const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "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';
7
7
  import { unstable_useForkRef as useForkRef } from '@mui/utils';
8
8
  import { fastMemo } from '@mui/x-internals/fastMemo';
9
9
  import { forwardRef } from '@mui/x-internals/forwardRef';
10
- import { GridEditModes, GridRowModes, GridCellModes } from "../models/gridEditRowModel.js";
10
+ import { isObjectEmpty } from '@mui/x-internals/isObjectEmpty';
11
+ import { GridEditModes, GridCellModes } from "../models/gridEditRowModel.js";
11
12
  import { gridClasses } from "../constants/gridClasses.js";
12
13
  import { composeGridClasses } from "../utils/composeGridClasses.js";
13
14
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
14
15
  import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.js";
15
16
  import { gridColumnPositionsSelector } from "../hooks/features/columns/gridColumnsSelector.js";
16
- import { useGridSelector, objectShallowCompare } from "../hooks/utils/useGridSelector.js";
17
+ import { useGridSelector, objectShallowCompare, useGridSelectorV8 } from "../hooks/utils/useGridSelector.js";
17
18
  import { useGridVisibleRows } from "../hooks/utils/useGridVisibleRows.js";
18
19
  import { findParentElementFromClassName, isEventTargetInPortal } from "../utils/domUtils.js";
19
20
  import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../colDef/gridCheckboxSelectionColDef.js";
@@ -21,12 +22,20 @@ import { GRID_ACTIONS_COLUMN_TYPE } from "../colDef/gridActionsColDef.js";
21
22
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD, PinnedColumnPosition } from "../internals/constants.js";
22
23
  import { gridSortModelSelector } from "../hooks/features/sorting/gridSortingSelector.js";
23
24
  import { gridRowMaximumTreeDepthSelector } from "../hooks/features/rows/gridRowsSelector.js";
24
- import { gridEditRowsStateSelector } from "../hooks/features/editing/gridEditingSelectors.js";
25
+ import { gridEditRowsStateSelector, gridRowIsEditingSelector } from "../hooks/features/editing/gridEditingSelectors.js";
25
26
  import { GridScrollbarFillerCell as ScrollbarFiller } from "./GridScrollbarFillerCell.js";
26
27
  import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
27
28
  import { useGridConfiguration } from "../hooks/utils/useGridConfiguration.js";
28
29
  import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.js";
30
+ import { createSelectorV8 } from "../utils/createSelector.js";
29
31
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
+ const isRowReorderingEnabledSelector = createSelectorV8(gridEditRowsStateSelector, (editRows, rowReordering) => {
33
+ if (!rowReordering) {
34
+ return false;
35
+ }
36
+ const isEditingRows = !isObjectEmpty(editRows);
37
+ return !isEditingRows;
38
+ });
30
39
  const GridRow = forwardRef(function GridRow(props, refProp) {
31
40
  const {
32
41
  selected,
@@ -65,10 +74,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
65
74
  const sortModel = useGridSelector(apiRef, gridSortModelSelector);
66
75
  const treeDepth = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector);
67
76
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
68
- const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);
77
+ const rowReordering = rootProps.rowReordering;
78
+ const isRowReorderingEnabled = useGridSelectorV8(apiRef, isRowReorderingEnabledSelector, rowReordering);
69
79
  const handleRef = useForkRef(ref, refProp);
70
80
  const rowNode = apiRef.current.getRowNode(rowId);
71
- const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;
81
+ const editing = useGridSelectorV8(apiRef, gridRowIsEditingSelector, rowId);
72
82
  const editable = rootProps.editMode === GridEditModes.Row;
73
83
  const hasFocusCell = focusedColumnIndex !== undefined;
74
84
  const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < firstColumnIndex;
@@ -145,7 +155,6 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
145
155
  slotProps,
146
156
  disableColumnReorder
147
157
  } = rootProps;
148
- const rowReordering = rootProps.rowReordering;
149
158
  const heightEntry = useGridSelector(apiRef, () => _extends({}, apiRef.current.getRowHeightEntry(rowId)), objectShallowCompare);
150
159
  const style = React.useMemo(() => {
151
160
  if (isNotVisible) {
@@ -188,6 +197,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
188
197
  });
189
198
  rowClassNames.push(rootProps.getRowClassName(rowParams));
190
199
  }
200
+
201
+ /* Start of rendering */
202
+ if (!rowNode) {
203
+ return null;
204
+ }
191
205
  const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
192
206
  const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
193
207
  if (cellColSpanInfo?.spannedByColSpan) {
@@ -205,14 +219,12 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
205
219
  align: column.align
206
220
  }, column.field);
207
221
  }
208
- const editCellState = editRowsState[rowId]?.[column.field] ?? null;
209
222
 
210
223
  // when the cell is a reorder cell we are not allowing to reorder the col
211
224
  // fixes https://github.com/mui/mui-x/issues/11126
212
225
  const isReorderCell = column.field === '__reorder__';
213
- const isEditingRows = Object.keys(editRowsState).length > 0;
214
226
  const canReorderColumn = !(disableColumnReorder || column.disableReorder);
215
- const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
227
+ const canReorderRow = isRowReorderingEnabled && !sortModel.length && treeDepth <= 1;
216
228
  const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
217
229
  const cellIsNotVisible = pinnedPosition === PinnedColumnPosition.VIRTUAL;
218
230
  const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
@@ -225,20 +237,15 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
225
237
  colIndex: indexRelativeToAllColumns,
226
238
  colSpan: colSpan,
227
239
  disableDragEvents: disableDragEvents,
228
- editCellState: editCellState,
229
240
  isNotVisible: cellIsNotVisible,
230
241
  pinnedOffset: pinnedOffset,
231
242
  pinnedPosition: pinnedPosition,
232
243
  showLeftBorder: showLeftBorder,
233
- showRightBorder: showRightBorder
244
+ showRightBorder: showRightBorder,
245
+ row: row,
246
+ rowNode: rowNode
234
247
  }, slotProps?.cell), column.field);
235
248
  };
236
-
237
- /* Start of rendering */
238
-
239
- if (!rowNode) {
240
- return null;
241
- }
242
249
  const leftCells = pinnedColumns.left.map((column, i) => {
243
250
  const indexRelativeToAllColumns = i;
244
251
  return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedColumnPosition.LEFT);
@@ -316,7 +323,6 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
316
323
  isNotVisible: PropTypes.bool.isRequired,
317
324
  lastColumnIndex: PropTypes.number.isRequired,
318
325
  offsetLeft: PropTypes.number.isRequired,
319
- offsetTop: PropTypes.number,
320
326
  onClick: PropTypes.func,
321
327
  onDoubleClick: PropTypes.func,
322
328
  onMouseEnter: PropTypes.func,
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
- import { GridRowId, GridEditCellProps } from '../../models';
3
- import { GridColDef, GridAlignment } from '../../models/colDef/gridColDef';
2
+ import { GridRowId } from '../../models';
3
+ import { GridAlignment, GridStateColDef } from '../../models/colDef/gridColDef';
4
+ import { GridRowModel, GridTreeNode } from '../../models/gridRows';
4
5
  import { GridPinnedColumnPosition } from '../../hooks/features/columns/gridColumnsInterfaces';
5
6
  import { PinnedColumnPosition } from '../../internals/constants';
6
7
  export declare const gridPinnedColumnPositionLookup: {
@@ -13,13 +14,14 @@ export type GridCellProps = React.HTMLAttributes<HTMLDivElement> & {
13
14
  align: GridAlignment;
14
15
  className?: string;
15
16
  colIndex: number;
16
- column: GridColDef;
17
+ column: GridStateColDef;
18
+ row: GridRowModel;
17
19
  rowId: GridRowId;
20
+ rowNode: GridTreeNode;
18
21
  width: number;
19
22
  colSpan?: number;
20
23
  disableDragEvents?: boolean;
21
24
  isNotVisible: boolean;
22
- editCellState: GridEditCellProps<any> | null;
23
25
  pinnedOffset?: number;
24
26
  pinnedPosition: PinnedColumnPosition;
25
27
  showRightBorder: boolean;
@@ -45,13 +47,14 @@ declare const MemoizedGridCell: React.ForwardRefExoticComponent<GridCellProps> |
45
47
  align: GridAlignment;
46
48
  className?: string;
47
49
  colIndex: number;
48
- column: GridColDef;
50
+ column: GridStateColDef;
51
+ row: GridRowModel;
49
52
  rowId: GridRowId;
53
+ rowNode: GridTreeNode;
50
54
  width: number;
51
55
  colSpan?: number;
52
56
  disableDragEvents?: boolean;
53
57
  isNotVisible: boolean;
54
- editCellState: GridEditCellProps<any> | null;
55
58
  pinnedOffset?: number;
56
59
  pinnedPosition: PinnedColumnPosition;
57
60
  showRightBorder: boolean;
@@ -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", "showRightBorder", "showLeftBorder", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
3
+ const _excluded = ["column", "row", "rowId", "rowNode", "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';
@@ -12,13 +12,14 @@ import { forwardRef } from '@mui/x-internals/forwardRef';
12
12
  import { doesSupportPreventScroll } from "../../utils/doesSupportPreventScroll.js";
13
13
  import { getDataGridUtilityClass, gridClasses } from "../../constants/gridClasses.js";
14
14
  import { GridCellModes } from "../../models/index.js";
15
- import { useGridSelector, objectShallowCompare } from "../../hooks/utils/useGridSelector.js";
16
- import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
15
+ import { useGridSelector, useGridSelectorV8 } from "../../hooks/utils/useGridSelector.js";
17
16
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
18
- import { gridFocusCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
17
+ import { gridFocusCellSelector, gridTabIndexCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
19
18
  import { GridPinnedColumnPosition } from "../../hooks/features/columns/gridColumnsInterfaces.js";
20
19
  import { PinnedColumnPosition } from "../../internals/constants.js";
21
20
  import { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from "../../hooks/features/rows/gridRowSpanningSelectors.js";
21
+ import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
22
+ import { gridEditCellStateSelector } from "../../hooks/features/editing/gridEditingSelectors.js";
22
23
  import { attachPinnedStyle } from "../../internals/utils/index.js";
23
24
  import { jsx as _jsx } from "react/jsx-runtime";
24
25
  export const gridPinnedColumnPositionLookup = {
@@ -27,30 +28,6 @@ export const gridPinnedColumnPositionLookup = {
27
28
  [PinnedColumnPosition.NONE]: undefined,
28
29
  [PinnedColumnPosition.VIRTUAL]: undefined
29
30
  };
30
- const EMPTY_CELL_PARAMS = {
31
- id: -1,
32
- field: '__unset__',
33
- row: {},
34
- rowNode: {
35
- id: -1,
36
- depth: 0,
37
- type: 'leaf',
38
- parent: -1,
39
- groupingKey: null
40
- },
41
- colDef: {
42
- type: 'string',
43
- field: '__unset__',
44
- computedWidth: 0
45
- },
46
- cellMode: GridCellModes.View,
47
- hasFocus: false,
48
- tabIndex: -1,
49
- value: null,
50
- formattedValue: '__unset__',
51
- isEditable: false,
52
- api: {}
53
- };
54
31
  const useUtilityClasses = ownerState => {
55
32
  const {
56
33
  align,
@@ -74,8 +51,9 @@ let warnedOnce = false;
74
51
  const GridCell = forwardRef(function GridCell(props, ref) {
75
52
  const {
76
53
  column,
54
+ row,
77
55
  rowId,
78
- editCellState,
56
+ rowNode,
79
57
  align,
80
58
  colIndex,
81
59
  width,
@@ -99,22 +77,29 @@ const GridCell = forwardRef(function GridCell(props, ref) {
99
77
  onDragOver
100
78
  } = props,
101
79
  other = _objectWithoutPropertiesLoose(props, _excluded);
102
- const apiRef = useGridApiContext();
80
+ const apiRef = useGridPrivateApiContext();
103
81
  const rootProps = useGridRootProps();
104
82
  const isRtl = useRtl();
105
83
  const field = column.field;
106
- const cellParams = useGridSelector(apiRef, () => {
107
- // This is required because `.getCellParams` tries to get the `state.rows.tree` entry
108
- // associated with `rowId`/`fieldId`, but this selector runs after the state has been
109
- // updated, while `rowId`/`fieldId` reference an entry in the old state.
110
- const row = apiRef.current.getRow(rowId);
111
- if (!row) {
112
- return EMPTY_CELL_PARAMS;
113
- }
114
- const result = apiRef.current.getCellParams(rowId, field);
115
- result.api = apiRef.current;
116
- return result;
117
- }, objectShallowCompare);
84
+ const editCellState = useGridSelectorV8(apiRef, gridEditCellStateSelector, {
85
+ rowId,
86
+ field
87
+ });
88
+ const cellMode = editCellState ? GridCellModes.Edit : GridCellModes.View;
89
+ const cellParams = apiRef.current.getCellParamsForRow(rowId, field, row, {
90
+ colDef: column,
91
+ cellMode,
92
+ rowNode: rowNode,
93
+ tabIndex: useGridSelector(apiRef, () => {
94
+ const cellTabIndex = gridTabIndexCellSelector(apiRef);
95
+ return cellTabIndex && cellTabIndex.field === field && cellTabIndex.id === rowId ? 0 : -1;
96
+ }),
97
+ hasFocus: useGridSelector(apiRef, () => {
98
+ const focus = gridFocusCellSelector(apiRef);
99
+ return focus?.id === rowId && focus.field === field;
100
+ })
101
+ });
102
+ cellParams.api = apiRef.current;
118
103
  const isSelected = useGridSelector(apiRef, () => apiRef.current.unstable_applyPipeProcessors('isCellSelected', false, {
119
104
  id: rowId,
120
105
  field
@@ -122,7 +107,6 @@ const GridCell = forwardRef(function GridCell(props, ref) {
122
107
  const hiddenCells = useGridSelector(apiRef, gridRowSpanningHiddenCellsSelector);
123
108
  const spannedCells = useGridSelector(apiRef, gridRowSpanningSpannedCellsSelector);
124
109
  const {
125
- cellMode,
126
110
  hasFocus,
127
111
  isEditable = false,
128
112
  value
@@ -244,9 +228,6 @@ const GridCell = forwardRef(function GridCell(props, ref) {
244
228
  }, style)
245
229
  });
246
230
  }
247
- if (cellParams === EMPTY_CELL_PARAMS) {
248
- return null;
249
- }
250
231
  let handleFocus = other.onFocus;
251
232
  if (process.env.NODE_ENV === 'test' && rootProps.experimentalFeatures?.warnIfFocusStateIsNotSynced) {
252
233
  handleFocus = event => {
@@ -330,16 +311,12 @@ process.env.NODE_ENV !== "production" ? GridCell.propTypes = {
330
311
  colSpan: PropTypes.number,
331
312
  column: PropTypes.object.isRequired,
332
313
  disableDragEvents: PropTypes.bool,
333
- editCellState: PropTypes.shape({
334
- changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),
335
- isProcessingProps: PropTypes.bool,
336
- isValidating: PropTypes.bool,
337
- value: PropTypes.any
338
- }),
339
314
  isNotVisible: PropTypes.bool.isRequired,
340
315
  pinnedOffset: PropTypes.number,
341
316
  pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]).isRequired,
317
+ row: PropTypes.object.isRequired,
342
318
  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
319
+ rowNode: PropTypes.object.isRequired,
343
320
  showLeftBorder: PropTypes.bool.isRequired,
344
321
  showRightBorder: PropTypes.bool.isRequired,
345
322
  width: PropTypes.number.isRequired