@mui/x-data-grid 8.0.0-beta.0 → 8.0.0-beta.2

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 (135) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/DataGrid/DataGrid.js +2 -0
  3. package/components/GridRow.js +3 -8
  4. package/components/GridShadowScrollArea.js +43 -35
  5. package/components/cell/GridBooleanCell.d.ts +1 -2
  6. package/components/cell/GridEditSingleSelectCell.d.ts +4 -4
  7. package/components/cell/GridEditSingleSelectCell.js +1 -1
  8. package/components/columnSelection/GridHeaderCheckbox.js +2 -2
  9. package/components/containers/GridToolbarContainer.js +5 -3
  10. package/components/quickFilter/QuickFilter.d.ts +26 -3
  11. package/components/quickFilter/QuickFilter.js +103 -19
  12. package/components/quickFilter/QuickFilterClear.js +10 -4
  13. package/components/quickFilter/QuickFilterContext.d.ts +4 -1
  14. package/components/quickFilter/QuickFilterControl.js +36 -10
  15. package/components/quickFilter/QuickFilterTrigger.d.ts +28 -0
  16. package/components/quickFilter/QuickFilterTrigger.js +211 -0
  17. package/components/quickFilter/index.d.ts +2 -1
  18. package/components/quickFilter/index.js +11 -0
  19. package/components/toolbar/GridToolbarColumnsButton.d.ts +3 -4
  20. package/components/toolbar/GridToolbarDensitySelector.d.ts +3 -4
  21. package/components/toolbar/GridToolbarExport.d.ts +3 -4
  22. package/components/toolbar/GridToolbarExportContainer.d.ts +3 -4
  23. package/components/toolbar/GridToolbarFilterButton.d.ts +4 -6
  24. package/components/toolbar/GridToolbarFilterButton.js +1 -4
  25. package/components/toolbar/GridToolbarQuickFilter.js +101 -41
  26. package/components/toolbarV8/GridToolbar.js +22 -19
  27. package/components/toolbarV8/Toolbar.d.ts +1 -1
  28. package/components/toolbarV8/Toolbar.js +76 -23
  29. package/components/toolbarV8/ToolbarButton.js +34 -14
  30. package/components/toolbarV8/ToolbarContext.d.ts +4 -2
  31. package/constants/gridClasses.d.ts +12 -0
  32. package/constants/gridClasses.js +1 -1
  33. package/esm/DataGrid/DataGrid.js +2 -0
  34. package/esm/components/GridRow.js +4 -9
  35. package/esm/components/GridShadowScrollArea.js +43 -35
  36. package/esm/components/cell/GridBooleanCell.d.ts +1 -2
  37. package/esm/components/cell/GridEditSingleSelectCell.d.ts +4 -4
  38. package/esm/components/cell/GridEditSingleSelectCell.js +1 -1
  39. package/esm/components/columnSelection/GridHeaderCheckbox.js +2 -2
  40. package/esm/components/containers/GridToolbarContainer.js +5 -3
  41. package/esm/components/quickFilter/QuickFilter.d.ts +26 -3
  42. package/esm/components/quickFilter/QuickFilter.js +101 -17
  43. package/esm/components/quickFilter/QuickFilterClear.js +10 -4
  44. package/esm/components/quickFilter/QuickFilterContext.d.ts +4 -1
  45. package/esm/components/quickFilter/QuickFilterControl.js +36 -10
  46. package/esm/components/quickFilter/QuickFilterTrigger.d.ts +28 -0
  47. package/esm/components/quickFilter/QuickFilterTrigger.js +204 -0
  48. package/esm/components/quickFilter/index.d.ts +2 -1
  49. package/esm/components/quickFilter/index.js +2 -1
  50. package/esm/components/toolbar/GridToolbarColumnsButton.d.ts +3 -4
  51. package/esm/components/toolbar/GridToolbarDensitySelector.d.ts +3 -4
  52. package/esm/components/toolbar/GridToolbarExport.d.ts +3 -4
  53. package/esm/components/toolbar/GridToolbarExportContainer.d.ts +3 -4
  54. package/esm/components/toolbar/GridToolbarFilterButton.d.ts +4 -6
  55. package/esm/components/toolbar/GridToolbarFilterButton.js +1 -4
  56. package/esm/components/toolbar/GridToolbarQuickFilter.js +102 -44
  57. package/esm/components/toolbarV8/GridToolbar.js +22 -19
  58. package/esm/components/toolbarV8/Toolbar.d.ts +1 -1
  59. package/esm/components/toolbarV8/Toolbar.js +75 -22
  60. package/esm/components/toolbarV8/ToolbarButton.js +34 -14
  61. package/esm/components/toolbarV8/ToolbarContext.d.ts +4 -2
  62. package/esm/constants/gridClasses.d.ts +12 -0
  63. package/esm/constants/gridClasses.js +1 -1
  64. package/esm/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  65. package/esm/hooks/features/columns/useGridColumns.js +0 -1
  66. package/esm/hooks/features/dimensions/useGridDimensions.js +1 -1
  67. package/esm/hooks/features/editing/useGridRowEditing.js +1 -1
  68. package/esm/hooks/features/filter/useGridFilter.js +1 -1
  69. package/esm/hooks/features/pagination/useGridPaginationModel.js +1 -1
  70. package/esm/hooks/features/virtualization/useGridVirtualScroller.js +12 -1
  71. package/esm/index.js +1 -1
  72. package/esm/locales/deDE.js +13 -13
  73. package/esm/material/index.js +1 -2
  74. package/esm/models/props/DataGridProps.d.ts +6 -2
  75. package/esm/utils/utils.d.ts +0 -27
  76. package/esm/utils/utils.js +0 -122
  77. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +2 -2
  78. package/hooks/features/columns/useGridColumns.js +0 -1
  79. package/hooks/features/dimensions/useGridDimensions.js +2 -2
  80. package/hooks/features/editing/useGridRowEditing.js +1 -1
  81. package/hooks/features/filter/useGridFilter.js +3 -3
  82. package/hooks/features/pagination/useGridPaginationModel.js +2 -2
  83. package/hooks/features/virtualization/useGridVirtualScroller.js +11 -0
  84. package/index.js +1 -1
  85. package/locales/deDE.js +13 -13
  86. package/material/index.js +1 -2
  87. package/models/props/DataGridProps.d.ts +6 -2
  88. package/modern/DataGrid/DataGrid.js +2 -0
  89. package/modern/components/GridRow.js +4 -9
  90. package/modern/components/GridShadowScrollArea.js +43 -35
  91. package/modern/components/cell/GridBooleanCell.d.ts +1 -2
  92. package/modern/components/cell/GridEditSingleSelectCell.d.ts +4 -4
  93. package/modern/components/cell/GridEditSingleSelectCell.js +1 -1
  94. package/modern/components/columnSelection/GridHeaderCheckbox.js +2 -2
  95. package/modern/components/containers/GridToolbarContainer.js +5 -3
  96. package/modern/components/quickFilter/QuickFilter.d.ts +26 -3
  97. package/modern/components/quickFilter/QuickFilter.js +101 -17
  98. package/modern/components/quickFilter/QuickFilterClear.js +10 -4
  99. package/modern/components/quickFilter/QuickFilterContext.d.ts +4 -1
  100. package/modern/components/quickFilter/QuickFilterControl.js +36 -10
  101. package/modern/components/quickFilter/QuickFilterTrigger.d.ts +28 -0
  102. package/modern/components/quickFilter/QuickFilterTrigger.js +204 -0
  103. package/modern/components/quickFilter/index.d.ts +2 -1
  104. package/modern/components/quickFilter/index.js +2 -1
  105. package/modern/components/toolbar/GridToolbarColumnsButton.d.ts +3 -4
  106. package/modern/components/toolbar/GridToolbarDensitySelector.d.ts +3 -4
  107. package/modern/components/toolbar/GridToolbarExport.d.ts +3 -4
  108. package/modern/components/toolbar/GridToolbarExportContainer.d.ts +3 -4
  109. package/modern/components/toolbar/GridToolbarFilterButton.d.ts +4 -6
  110. package/modern/components/toolbar/GridToolbarFilterButton.js +1 -4
  111. package/modern/components/toolbar/GridToolbarQuickFilter.js +102 -44
  112. package/modern/components/toolbarV8/GridToolbar.js +22 -19
  113. package/modern/components/toolbarV8/Toolbar.d.ts +1 -1
  114. package/modern/components/toolbarV8/Toolbar.js +75 -22
  115. package/modern/components/toolbarV8/ToolbarButton.js +34 -14
  116. package/modern/components/toolbarV8/ToolbarContext.d.ts +4 -2
  117. package/modern/constants/gridClasses.d.ts +12 -0
  118. package/modern/constants/gridClasses.js +1 -1
  119. package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  120. package/modern/hooks/features/columns/useGridColumns.js +0 -1
  121. package/modern/hooks/features/dimensions/useGridDimensions.js +1 -1
  122. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  123. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  124. package/modern/hooks/features/pagination/useGridPaginationModel.js +1 -1
  125. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +12 -1
  126. package/modern/index.js +1 -1
  127. package/modern/locales/deDE.js +13 -13
  128. package/modern/material/index.js +1 -2
  129. package/modern/models/props/DataGridProps.d.ts +6 -2
  130. package/modern/utils/utils.d.ts +0 -27
  131. package/modern/utils/utils.js +0 -122
  132. package/package.json +2 -2
  133. package/tsconfig.build.tsbuildinfo +1 -1
  134. package/utils/utils.d.ts +0 -27
  135. package/utils/utils.js +0 -123
@@ -17,34 +17,69 @@ var _constants = require("../../constants");
17
17
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
18
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
19
19
  var _quickFilter = require("../quickFilter");
20
+ var _toolbarV = require("../toolbarV8");
21
+ var _cssVariables = require("../../constants/cssVariables");
20
22
  var _jsxRuntime = require("react/jsx-runtime");
21
23
  const _excluded = ["quickFilterParser", "quickFilterFormatter", "debounceMs", "className", "slotProps"],
22
- _excluded2 = ["ref", "slotProps"]; // import { NotRendered } from '../../utils/assert';
24
+ _excluded2 = ["ref", "slotProps"];
23
25
  const useUtilityClasses = ownerState => {
24
26
  const {
25
27
  classes
26
28
  } = ownerState;
27
29
  const slots = {
28
- root: ['toolbarQuickFilter']
30
+ root: ['toolbarQuickFilter'],
31
+ trigger: ['toolbarQuickFilterTrigger'],
32
+ control: ['toolbarQuickFilterControl']
29
33
  };
30
34
  return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
31
35
  };
36
+ const GridQuickFilterRoot = (0, _system.styled)('div', {
37
+ name: 'MuiDataGrid',
38
+ slot: 'ToolbarQuickFilter'
39
+ })({
40
+ display: 'grid',
41
+ alignItems: 'center',
42
+ marginLeft: 'auto'
43
+ });
44
+ const GridQuickFilterTrigger = (0, _system.styled)(_toolbarV.ToolbarButton, {
45
+ name: 'MuiDataGrid',
46
+ slot: 'ToolbarQuickFilterTrigger'
47
+ })(({
48
+ ownerState
49
+ }) => ({
50
+ gridArea: '1 / 1',
51
+ width: 'min-content',
52
+ height: 'min-content',
53
+ zIndex: 1,
54
+ opacity: ownerState.expanded ? 0 : 1,
55
+ pointerEvents: ownerState.expanded ? 'none' : 'auto',
56
+ transition: _cssVariables.vars.transition(['opacity'])
57
+ }));
32
58
 
33
59
  // TODO: Use NotRendered from /utils/assert
34
60
  // Currently causes react-docgen to fail
35
- const GridToolbarQuickFilterRoot = (0, _system.styled)(_props => {
61
+ const GridQuickFilterTextField = (0, _system.styled)(_props => {
36
62
  throw new Error('Failed assertion: should not be rendered');
37
63
  }, {
38
64
  name: 'MuiDataGrid',
39
- slot: 'ToolbarQuickFilter'
40
- })({
41
- width: 260,
42
- marginLeft: 'auto'
43
- });
65
+ slot: 'ToolbarQuickFilterControl'
66
+ })(({
67
+ ownerState
68
+ }) => ({
69
+ gridArea: '1 / 1',
70
+ overflowX: 'clip',
71
+ width: ownerState.expanded ? 260 : 'var(--trigger-width)',
72
+ opacity: ownerState.expanded ? 1 : 0,
73
+ transition: _cssVariables.vars.transition(['width', 'opacity'])
74
+ }));
44
75
  function GridToolbarQuickFilter(props) {
45
76
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
46
77
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
47
- const classes = useUtilityClasses(rootProps);
78
+ const ownerState = {
79
+ classes: rootProps.classes,
80
+ expanded: false
81
+ };
82
+ const classes = useUtilityClasses(ownerState);
48
83
  const {
49
84
  quickFilterParser,
50
85
  quickFilterFormatter,
@@ -57,40 +92,65 @@ function GridToolbarQuickFilter(props) {
57
92
  parser: quickFilterParser,
58
93
  formatter: quickFilterFormatter,
59
94
  debounceMs: debounceMs,
60
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_quickFilter.QuickFilterControl, {
61
- render: _ref => {
62
- let {
63
- ref,
64
- slotProps: controlSlotProps
65
- } = _ref,
66
- controlProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded2);
67
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridToolbarQuickFilterRoot, (0, _extends2.default)({
68
- as: rootProps.slots.baseTextField,
69
- className: (0, _clsx.default)(classes.root, className),
70
- inputRef: ref,
71
- "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterLabel'),
72
- placeholder: apiRef.current.getLocaleText('toolbarQuickFilterPlaceholder'),
73
- size: "small",
74
- slotProps: (0, _extends2.default)({
75
- input: (0, _extends2.default)({
76
- startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterIcon, {
95
+ render: (quickFilterProps, state) => {
96
+ const currentOwnerState = (0, _extends2.default)({}, ownerState, {
97
+ expanded: state.expanded
98
+ });
99
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridQuickFilterRoot, (0, _extends2.default)({}, quickFilterProps, {
100
+ className: (0, _clsx.default)(classes.root, className),
101
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_quickFilter.QuickFilterTrigger, {
102
+ render: triggerProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, {
103
+ title: apiRef.current.getLocaleText('toolbarQuickFilterLabel'),
104
+ enterDelay: 0 // Prevents tooltip lagging behind transitioning trigger element
105
+ ,
106
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridQuickFilterTrigger, (0, _extends2.default)({
107
+ className: classes.trigger
108
+ }, triggerProps, {
109
+ ownerState: currentOwnerState,
110
+ color: "default",
111
+ "aria-disabled": state.expanded,
112
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterIcon, {
77
113
  fontSize: "small"
78
- }),
79
- endAdornment: controlProps.value ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_quickFilter.QuickFilterClear, {
80
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, {
81
- size: "small",
82
- edge: "end",
83
- "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
84
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterClearIcon, {
114
+ })
115
+ }))
116
+ })
117
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_quickFilter.QuickFilterControl, {
118
+ render: _ref => {
119
+ let {
120
+ ref,
121
+ slotProps: controlSlotProps
122
+ } = _ref,
123
+ controlProps = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded2);
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridQuickFilterTextField, (0, _extends2.default)({
125
+ as: rootProps.slots.baseTextField,
126
+ className: classes.control,
127
+ ownerState: currentOwnerState,
128
+ inputRef: ref,
129
+ "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterLabel'),
130
+ placeholder: apiRef.current.getLocaleText('toolbarQuickFilterPlaceholder'),
131
+ size: "small",
132
+ slotProps: (0, _extends2.default)({
133
+ input: (0, _extends2.default)({
134
+ startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterIcon, {
85
135
  fontSize: "small"
86
- })
87
- })
88
- }) : null
89
- }, controlSlotProps?.input)
90
- }, controlSlotProps)
91
- }, rootProps.slotProps?.baseTextField, controlProps, slotProps?.root, other));
92
- }
93
- })
136
+ }),
137
+ endAdornment: controlProps.value ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_quickFilter.QuickFilterClear, {
138
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, {
139
+ size: "small",
140
+ edge: "end",
141
+ "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
142
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterClearIcon, {
143
+ fontSize: "small"
144
+ })
145
+ })
146
+ }) : null
147
+ }, controlSlotProps?.input)
148
+ }, controlSlotProps)
149
+ }, rootProps.slotProps?.baseTextField, controlProps, slotProps?.root, other));
150
+ }
151
+ })]
152
+ }));
153
+ }
94
154
  });
95
155
  }
96
156
  process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
@@ -9,9 +9,9 @@ exports.GridToolbar = GridToolbar;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _Menu = _interopRequireDefault(require("@mui/material/Menu"));
13
12
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
14
13
  var _system = require("@mui/system");
14
+ var _GridMenu = require("../menu/GridMenu");
15
15
  var _Toolbar = require("./Toolbar");
16
16
  var _ToolbarButton = require("./ToolbarButton");
17
17
  var _filterPanel = require("../filterPanel");
@@ -82,30 +82,33 @@ function GridToolbar(props) {
82
82
  "aria-controls": exportMenuId,
83
83
  "aria-haspopup": "true",
84
84
  "aria-expanded": exportMenuOpen ? 'true' : undefined,
85
- onClick: () => setExportMenuOpen(true),
85
+ onClick: () => setExportMenuOpen(!exportMenuOpen),
86
86
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.exportIcon, {
87
87
  fontSize: "small"
88
88
  })
89
89
  })
90
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Menu.default, {
91
- id: exportMenuId,
92
- anchorEl: exportMenuTriggerRef.current,
90
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
91
+ target: exportMenuTriggerRef.current,
93
92
  open: exportMenuOpen,
94
93
  onClose: closeExportMenu,
95
- MenuListProps: {
96
- 'aria-labelledby': exportMenuTriggerId
97
- },
98
- children: [!printOptions?.disableToolbarButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(_export.ExportPrint, {
99
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, (0, _extends2.default)({}, rootProps.slotProps?.baseMenuItem)),
100
- options: printOptions,
101
- onClick: closeExportMenu,
102
- children: apiRef.current.getLocaleText('toolbarExportPrint')
103
- }), !csvOptions?.disableToolbarButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(_export.ExportCsv, {
104
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, (0, _extends2.default)({}, rootProps.slotProps?.baseMenuItem)),
105
- options: csvOptions,
106
- onClick: closeExportMenu,
107
- children: apiRef.current.getLocaleText('toolbarExportCSV')
108
- }), additionalExportMenuItems?.(closeExportMenu)]
94
+ position: "bottom-start",
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(rootProps.slots.baseMenuList, (0, _extends2.default)({
96
+ id: exportMenuId,
97
+ "aria-labelledby": exportMenuTriggerId,
98
+ autoFocusItem: true
99
+ }, rootProps.slotProps?.baseMenuList, {
100
+ children: [!printOptions?.disableToolbarButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(_export.ExportPrint, {
101
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, (0, _extends2.default)({}, rootProps.slotProps?.baseMenuItem)),
102
+ options: printOptions,
103
+ onClick: closeExportMenu,
104
+ children: apiRef.current.getLocaleText('toolbarExportPrint')
105
+ }), !csvOptions?.disableToolbarButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(_export.ExportCsv, {
106
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseMenuItem, (0, _extends2.default)({}, rootProps.slotProps?.baseMenuItem)),
107
+ options: csvOptions,
108
+ onClick: closeExportMenu,
109
+ children: apiRef.current.getLocaleText('toolbarExportCSV')
110
+ }), additionalExportMenuItems?.(closeExportMenu)]
111
+ }))
109
112
  })]
110
113
  }), showQuickFilter && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridToolbarQuickFilter.GridToolbarQuickFilter, (0, _extends2.default)({}, quickFilterProps))]
111
114
  });
@@ -8,7 +8,7 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
8
8
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
9
9
  };
10
10
  type OwnerState = DataGridProcessedProps;
11
- declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
11
+ declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme> & {
12
12
  ownerState: OwnerState;
13
13
  }, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
14
14
  /**
@@ -10,7 +10,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _styles = require("@mui/material/styles");
13
+ var _system = require("@mui/system");
14
14
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
15
  var _clsx = _interopRequireDefault(require("clsx"));
16
16
  var _forwardRef = require("@mui/x-internals/forwardRef");
@@ -30,7 +30,7 @@ const useUtilityClasses = ownerState => {
30
30
  };
31
31
  return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
32
32
  };
33
- const ToolbarRoot = (0, _styles.styled)('div', {
33
+ const ToolbarRoot = (0, _system.styled)('div', {
34
34
  name: 'MuiDataGrid',
35
35
  slot: 'Toolbar'
36
36
  })({
@@ -39,6 +39,8 @@ const ToolbarRoot = (0, _styles.styled)('div', {
39
39
  alignItems: 'center',
40
40
  gap: _cssVariables.vars.spacing(0.25),
41
41
  padding: _cssVariables.vars.spacing(0.75),
42
+ minHeight: 52,
43
+ boxSizing: 'border-box',
42
44
  borderBottom: `1px solid ${_cssVariables.vars.colors.border.base}`
43
45
  });
44
46
 
@@ -64,44 +66,95 @@ const Toolbar = exports.Toolbar = (0, _forwardRef.forwardRef)(function Toolbar(p
64
66
  const classes = useUtilityClasses(rootProps);
65
67
  const [focusableItemId, setFocusableItemId] = React.useState(null);
66
68
  const [items, setItems] = React.useState([]);
67
- const registerItem = React.useCallback(item => {
68
- setItems(prevItems => [...prevItems, item]);
69
+ const registerItem = React.useCallback((id, itemRef) => {
70
+ setItems(prevItems => [...prevItems, {
71
+ id,
72
+ ref: itemRef
73
+ }]);
69
74
  }, []);
70
- const unregisterItem = React.useCallback(item => {
71
- setItems(prevItems => prevItems.filter(i => i !== item));
72
- if (focusableItemId === item) {
75
+ const unregisterItem = React.useCallback(id => {
76
+ setItems(prevItems => prevItems.filter(i => i.id !== id));
77
+ if (focusableItemId === id) {
73
78
  setFocusableItemId(null);
74
79
  }
75
80
  }, [focusableItemId]);
81
+ const findEnabledItem = React.useCallback((startIndex, step, wrap = true) => {
82
+ let index = startIndex;
83
+ const itemCount = items.length;
84
+
85
+ // Look for enabled items in the specified direction
86
+ for (let i = 0; i < itemCount; i += 1) {
87
+ index += step;
88
+
89
+ // Handle wrapping around the ends
90
+ if (index >= itemCount) {
91
+ if (!wrap) {
92
+ return -1;
93
+ }
94
+ index = 0;
95
+ } else if (index < 0) {
96
+ if (!wrap) {
97
+ return -1;
98
+ }
99
+ index = itemCount - 1;
100
+ }
101
+
102
+ // Return if we found an enabled item
103
+ if (!items[index].ref.current?.disabled && items[index].ref.current?.ariaDisabled !== 'true') {
104
+ return index;
105
+ }
106
+ }
107
+
108
+ // If we've checked all items and found none enabled
109
+ return -1;
110
+ }, [items]);
76
111
  const onItemKeyDown = React.useCallback(event => {
77
112
  if (!focusableItemId) {
78
113
  return;
79
114
  }
115
+ const currentIndex = items.findIndex(item => item.id === focusableItemId);
116
+ let newIndex = -1;
80
117
  if (event.key === 'ArrowRight') {
81
118
  event.preventDefault();
82
- const nextIndex = items.indexOf(focusableItemId) + 1;
83
- setFocusableItemId(items[nextIndex < items.length ? nextIndex : 0]);
84
- }
85
- if (event.key === 'ArrowLeft') {
119
+ newIndex = findEnabledItem(currentIndex, 1);
120
+ } else if (event.key === 'ArrowLeft') {
86
121
  event.preventDefault();
87
- const prevIndex = items.indexOf(focusableItemId) - 1;
88
- setFocusableItemId(items[prevIndex < 0 ? items.length - 1 : prevIndex]);
89
- }
90
- if (event.key === 'Home') {
122
+ newIndex = findEnabledItem(currentIndex, -1);
123
+ } else if (event.key === 'Home') {
91
124
  event.preventDefault();
92
- setFocusableItemId(items[0]);
93
- }
94
- if (event.key === 'End') {
125
+ newIndex = findEnabledItem(-1, 1, false);
126
+ } else if (event.key === 'End') {
95
127
  event.preventDefault();
96
- setFocusableItemId(items[items.length - 1]);
128
+ newIndex = findEnabledItem(items.length, -1, false);
129
+ }
130
+ if (newIndex >= 0 && newIndex < items.length) {
131
+ const item = items[newIndex];
132
+ setFocusableItemId(item.id);
133
+ item.ref.current?.focus();
134
+ }
135
+ }, [items, focusableItemId, findEnabledItem]);
136
+ const onItemFocus = React.useCallback(id => {
137
+ if (focusableItemId !== id) {
138
+ setFocusableItemId(id);
139
+ }
140
+ }, [focusableItemId]);
141
+ const onItemDisabled = React.useCallback(id => {
142
+ const currentIndex = items.findIndex(item => item.id === id);
143
+ const newIndex = findEnabledItem(currentIndex, 1);
144
+ if (newIndex >= 0 && newIndex < items.length) {
145
+ const item = items[newIndex];
146
+ setFocusableItemId(item.id);
147
+ item.ref.current?.focus();
97
148
  }
98
- }, [items, focusableItemId]);
149
+ }, [items, findEnabledItem]);
99
150
  const contextValue = React.useMemo(() => ({
100
151
  focusableItemId,
101
152
  registerItem,
102
153
  unregisterItem,
103
- onItemKeyDown
104
- }), [registerItem, unregisterItem, focusableItemId, onItemKeyDown]);
154
+ onItemKeyDown,
155
+ onItemFocus,
156
+ onItemDisabled
157
+ }), [focusableItemId, registerItem, unregisterItem, onItemKeyDown, onItemFocus, onItemDisabled]);
105
158
  const element = (0, _useGridComponentRenderer.useGridComponentRenderer)(ToolbarRoot, render, (0, _extends2.default)({
106
159
  role: 'toolbar',
107
160
  'aria-orientation': 'horizontal',
@@ -112,7 +165,7 @@ const Toolbar = exports.Toolbar = (0, _forwardRef.forwardRef)(function Toolbar(p
112
165
  }));
113
166
  React.useEffect(() => {
114
167
  if (items.length > 0) {
115
- setFocusableItemId(items[0]);
168
+ setFocusableItemId(items[0].id);
116
169
  }
117
170
  }, [items]);
118
171
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolbarContext.ToolbarContext.Provider, {
@@ -17,7 +17,7 @@ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
17
  var _useGridComponentRenderer = require("../../hooks/utils/useGridComponentRenderer");
18
18
  var _ToolbarContext = require("./ToolbarContext");
19
19
  var _jsxRuntime = require("react/jsx-runtime");
20
- const _excluded = ["render"];
20
+ const _excluded = ["render", "onKeyDown", "onFocus", "disabled", "aria-disabled"];
21
21
  /**
22
22
  * A button for performing actions from the toolbar.
23
23
  * It renders the `baseIconButton` slot.
@@ -32,7 +32,11 @@ const _excluded = ["render"];
32
32
  */
33
33
  const ToolbarButton = exports.ToolbarButton = (0, _forwardRef.forwardRef)(function ToolbarButton(props, ref) {
34
34
  const {
35
- render
35
+ render,
36
+ onKeyDown,
37
+ onFocus,
38
+ disabled,
39
+ 'aria-disabled': ariaDisabled
36
40
  } = props,
37
41
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
38
42
  const id = (0, _useId.default)();
@@ -43,28 +47,44 @@ const ToolbarButton = exports.ToolbarButton = (0, _forwardRef.forwardRef)(functi
43
47
  focusableItemId,
44
48
  registerItem,
45
49
  unregisterItem,
46
- onItemKeyDown
50
+ onItemKeyDown,
51
+ onItemFocus,
52
+ onItemDisabled
47
53
  } = (0, _ToolbarContext.useToolbarContext)();
54
+ const handleKeyDown = event => {
55
+ onItemKeyDown(event);
56
+ onKeyDown?.(event);
57
+ };
58
+ const handleFocus = event => {
59
+ onItemFocus(id);
60
+ onFocus?.(event);
61
+ };
48
62
  React.useEffect(() => {
49
- registerItem(id);
63
+ registerItem(id, buttonRef);
50
64
  return () => unregisterItem(id);
51
65
  // eslint-disable-next-line react-hooks/exhaustive-deps
52
66
  }, []);
53
- const isInitialFocus = React.useRef(true);
67
+ const previousDisabled = React.useRef(disabled);
54
68
  React.useEffect(() => {
55
- // Do not focus the item on initial render
56
- if (focusableItemId && isInitialFocus.current) {
57
- isInitialFocus.current = false;
58
- return;
69
+ if (previousDisabled.current !== disabled && disabled === true) {
70
+ onItemDisabled(id, disabled);
59
71
  }
60
- if (focusableItemId === id) {
61
- buttonRef.current?.focus();
72
+ previousDisabled.current = disabled;
73
+ }, [disabled, id, onItemDisabled]);
74
+ const previousAriaDisabled = React.useRef(ariaDisabled);
75
+ React.useEffect(() => {
76
+ if (previousAriaDisabled.current !== ariaDisabled && ariaDisabled === true) {
77
+ onItemDisabled(id, true);
62
78
  }
63
- }, [focusableItemId, id]);
79
+ previousAriaDisabled.current = ariaDisabled;
80
+ }, [ariaDisabled, id, onItemDisabled]);
64
81
  const element = (0, _useGridComponentRenderer.useGridComponentRenderer)(rootProps.slots.baseIconButton, render, (0, _extends2.default)({}, rootProps.slotProps?.baseIconButton, {
65
- tabIndex: focusableItemId === id ? 0 : -1,
66
- onKeyDown: onItemKeyDown
82
+ tabIndex: focusableItemId === id ? 0 : -1
67
83
  }, other, {
84
+ disabled,
85
+ 'aria-disabled': ariaDisabled,
86
+ onKeyDown: handleKeyDown,
87
+ onFocus: handleFocus,
68
88
  ref: handleRef
69
89
  }));
70
90
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
@@ -1,9 +1,11 @@
1
1
  import * as React from 'react';
2
2
  export interface ToolbarContextValue {
3
3
  focusableItemId: string | null;
4
- registerItem: (itemId: string) => void;
5
- unregisterItem: (itemId: string) => void;
4
+ registerItem: (id: string, ref: React.RefObject<HTMLButtonElement | null>) => void;
5
+ unregisterItem: (id: string) => void;
6
6
  onItemKeyDown: (event: React.KeyboardEvent<HTMLButtonElement>) => void;
7
+ onItemFocus: (id: string) => void;
8
+ onItemDisabled: (id: string, disabled: boolean) => void;
7
9
  }
8
10
  export declare const ToolbarContext: React.Context<ToolbarContextValue | undefined>;
9
11
  export declare function useToolbarContext(): ToolbarContextValue;
@@ -631,6 +631,18 @@ export interface GridClasses {
631
631
  * Styles applied to the toolbar prompt control send button element.
632
632
  */
633
633
  toolbarPromptControlSendButton: string;
634
+ /**
635
+ * Styles applied to the toolbar quick filter root element.
636
+ */
637
+ toolbarQuickFilter: string;
638
+ /**
639
+ * Styles applied to the toolbar quick filter trigger element.
640
+ */
641
+ toolbarQuickFilterTrigger: string;
642
+ /**
643
+ * Styles applied to the toolbar quick filter control element.
644
+ */
645
+ toolbarQuickFilterControl: string;
634
646
  /**
635
647
  * Styles applied the grid if `showColumnVerticalBorder={true}`.
636
648
  */
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getDataGridUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
11
11
  }
12
- const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'container--top', 'container--bottom', 'detailPanel', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'shadowScrollArea', 'toolbarContainer', 'toolbarFilterList', 'toolbarPromptControl', 'toolbarPromptControl--recording', 'toolbarPromptControlRecordingIndicator', 'toolbarPromptControlRecordButton', 'toolbarPromptControlSendButton', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom']);
12
+ const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'container--top', 'container--bottom', 'detailPanel', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'shadowScrollArea', 'toolbarContainer', 'toolbarFilterList', 'toolbarPromptControl', 'toolbarPromptControl--recording', 'toolbarPromptControlRecordingIndicator', 'toolbarPromptControlRecordButton', 'toolbarPromptControlSendButton', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom']);
@@ -110,6 +110,7 @@ DataGridRaw.propTypes = {
110
110
  * Override or extend the styles applied to the component.
111
111
  */
112
112
  classes: PropTypes.object,
113
+ className: PropTypes.string,
113
114
  /**
114
115
  * The character used to separate cell values when copying to the clipboard.
115
116
  * @default '\t'
@@ -769,6 +770,7 @@ DataGridRaw.propTypes = {
769
770
  field: PropTypes.string.isRequired,
770
771
  sort: PropTypes.oneOf(['asc', 'desc'])
771
772
  })),
773
+ style: PropTypes.object,
772
774
  /**
773
775
  * The system prop that allows defining system overrides as well as additional CSS styles.
774
776
  */
@@ -23,7 +23,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../colDef/gridCheckboxSelection
23
23
  import { GRID_ACTIONS_COLUMN_TYPE } from "../colDef/gridActionsColDef.js";
24
24
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD, PinnedColumnPosition } from "../internals/constants.js";
25
25
  import { gridSortModelSelector } from "../hooks/features/sorting/gridSortingSelector.js";
26
- import { gridRowMaximumTreeDepthSelector } from "../hooks/features/rows/gridRowsSelector.js";
26
+ import { gridRowMaximumTreeDepthSelector, gridRowNodeSelector } from "../hooks/features/rows/gridRowsSelector.js";
27
27
  import { gridEditRowsStateSelector, gridRowIsEditingSelector } from "../hooks/features/editing/gridEditingSelectors.js";
28
28
  import { GridScrollbarFillerCell as ScrollbarFiller } from "./GridScrollbarFillerCell.js";
29
29
  import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
@@ -79,7 +79,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
79
79
  const rowReordering = rootProps.rowReordering;
80
80
  const isRowReorderingEnabled = useGridSelector(apiRef, isRowReorderingEnabledSelector, rowReordering);
81
81
  const handleRef = useForkRef(ref, refProp);
82
- const rowNode = apiRef.current.getRowNode(rowId);
82
+ const rowNode = gridRowNodeSelector(apiRef, rowId);
83
83
  const editing = useGridSelector(apiRef, gridRowIsEditingSelector, {
84
84
  rowId,
85
85
  editMode: rootProps.editMode
@@ -192,7 +192,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
192
192
  return rowStyle;
193
193
  }, [isNotVisible, rowHeight, styleProp, heightEntry, rootProps.rowSpacingType]);
194
194
  const rowClassNames = apiRef.current.unstable_applyPipeProcessors('rowClassName', [], rowId);
195
- const ariaAttributes = rowNode ? getRowAriaAttributes(rowNode, index) : undefined;
195
+ const ariaAttributes = getRowAriaAttributes(rowNode, index);
196
196
  if (typeof rootProps.getRowClassName === 'function') {
197
197
  const indexRelativeToCurrentPage = index - (currentPage.range?.firstRowIndex || 0);
198
198
  const rowParams = _extends({}, apiRef.current.getRowParams(rowId), {
@@ -202,11 +202,6 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
202
202
  });
203
203
  rowClassNames.push(rootProps.getRowClassName(rowParams));
204
204
  }
205
-
206
- /* Start of rendering */
207
- if (!rowNode) {
208
- return null;
209
- }
210
205
  const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
211
206
  const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
212
207
  if (cellColSpanInfo?.spannedByColSpan) {
@@ -215,7 +210,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
215
210
  const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
216
211
  const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
217
212
  const pinnedOffset = getPinnedCellOffset(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
218
- if (rowNode?.type === 'skeletonRow') {
213
+ if (rowNode.type === 'skeletonRow') {
219
214
  return /*#__PURE__*/_jsx(slots.skeletonCell, {
220
215
  type: column.type,
221
216
  width: width,