@mui/x-data-grid-pro 6.4.0 → 6.6.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 (156) hide show
  1. package/CHANGELOG.md +134 -2
  2. package/DataGridPro/DataGridPro.js +15 -3
  3. package/DataGridPro/useDataGridProComponent.js +3 -1
  4. package/DataGridPro/useDataGridProProps.js +7 -13
  5. package/README.md +2 -2
  6. package/components/DataGridProVirtualScroller.js +12 -12
  7. package/components/GridColumnHeaders.js +23 -3
  8. package/components/GridColumnMenuPinningItem.d.ts +2 -2
  9. package/components/GridDetailPanel.d.ts +1 -1
  10. package/components/GridDetailPanel.js +1 -1
  11. package/components/GridDetailPanelToggleCell.d.ts +2 -2
  12. package/components/GridRowReorderCell.d.ts +3 -3
  13. package/components/GridScrollArea.d.ts +10 -0
  14. package/components/GridScrollArea.js +140 -0
  15. package/components/GridTreeDataGroupingCell.d.ts +2 -2
  16. package/components/headerFiltering/GridHeaderFilterAdornment.d.ts +14 -0
  17. package/components/headerFiltering/GridHeaderFilterAdornment.js +99 -0
  18. package/components/headerFiltering/GridHeaderFilterCell.d.ts +20 -0
  19. package/components/headerFiltering/GridHeaderFilterCell.js +224 -0
  20. package/components/headerFiltering/GridHeaderFilterClearButton.d.ts +6 -0
  21. package/components/headerFiltering/GridHeaderFilterClearButton.js +25 -0
  22. package/components/headerFiltering/GridHeaderFilterMenu.d.ts +14 -0
  23. package/components/headerFiltering/GridHeaderFilterMenu.js +69 -0
  24. package/components/headerFiltering/constants.d.ts +3 -0
  25. package/components/headerFiltering/constants.js +30 -0
  26. package/components/headerFiltering/index.d.ts +2 -0
  27. package/components/headerFiltering/index.js +2 -0
  28. package/components/index.d.ts +1 -0
  29. package/components/index.js +2 -1
  30. package/constants/dataGridProDefaultSlotsComponents.js +5 -1
  31. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +21 -0
  32. package/hooks/features/columnHeaders/useGridColumnHeaders.js +111 -0
  33. package/hooks/features/columnResize/useGridColumnResize.js +23 -13
  34. package/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  35. package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  36. package/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  37. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  38. package/index.js +1 -1
  39. package/internals/index.d.ts +2 -1
  40. package/internals/index.js +5 -1
  41. package/legacy/DataGridPro/DataGridPro.js +15 -3
  42. package/legacy/DataGridPro/useDataGridProComponent.js +3 -1
  43. package/legacy/DataGridPro/useDataGridProProps.js +10 -9
  44. package/legacy/components/DataGridProVirtualScroller.js +12 -12
  45. package/legacy/components/GridColumnHeaders.js +23 -3
  46. package/legacy/components/GridDetailPanel.js +1 -1
  47. package/legacy/components/GridScrollArea.js +143 -0
  48. package/legacy/components/headerFiltering/GridHeaderFilterAdornment.js +97 -0
  49. package/legacy/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  50. package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  51. package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  52. package/legacy/components/headerFiltering/constants.js +30 -0
  53. package/legacy/components/headerFiltering/index.js +2 -0
  54. package/legacy/components/index.js +2 -1
  55. package/legacy/constants/dataGridProDefaultSlotsComponents.js +5 -1
  56. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  57. package/legacy/hooks/features/columnResize/useGridColumnResize.js +23 -13
  58. package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  59. package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  60. package/legacy/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  61. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  62. package/legacy/index.js +1 -1
  63. package/legacy/internals/index.js +5 -1
  64. package/legacy/material/icons.js +4 -1
  65. package/legacy/material/index.js +3 -2
  66. package/legacy/models/gridProSlotProps.js +1 -0
  67. package/legacy/utils/releaseInfo.js +1 -1
  68. package/legacy/utils/tree/createRowTree.js +1 -0
  69. package/legacy/utils/tree/insertDataRowInTree.js +4 -0
  70. package/legacy/utils/tree/removeDataRowFromTree.js +1 -0
  71. package/legacy/utils/tree/updateRowTree.js +2 -0
  72. package/legacy/utils/tree/utils.js +51 -12
  73. package/material/icons.d.ts +3 -0
  74. package/material/icons.js +4 -1
  75. package/material/index.d.ts +1 -0
  76. package/material/index.js +3 -2
  77. package/models/dataGridProProps.d.ts +16 -1
  78. package/models/gridProIconSlotsComponent.d.ts +5 -0
  79. package/models/gridProSlotProps.d.ts +9 -0
  80. package/models/gridProSlotProps.js +1 -0
  81. package/models/gridProSlotsComponent.d.ts +13 -2
  82. package/modern/DataGridPro/DataGridPro.js +15 -3
  83. package/modern/DataGridPro/useDataGridProComponent.js +3 -1
  84. package/modern/DataGridPro/useDataGridProProps.js +7 -13
  85. package/modern/components/DataGridProVirtualScroller.js +12 -12
  86. package/modern/components/GridColumnHeaders.js +23 -3
  87. package/modern/components/GridDetailPanel.js +1 -1
  88. package/modern/components/GridScrollArea.js +140 -0
  89. package/modern/components/headerFiltering/GridHeaderFilterAdornment.js +98 -0
  90. package/modern/components/headerFiltering/GridHeaderFilterCell.js +222 -0
  91. package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  92. package/modern/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  93. package/modern/components/headerFiltering/constants.js +30 -0
  94. package/modern/components/headerFiltering/index.js +2 -0
  95. package/modern/components/index.js +2 -1
  96. package/modern/constants/dataGridProDefaultSlotsComponents.js +5 -1
  97. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +110 -0
  98. package/modern/hooks/features/columnResize/useGridColumnResize.js +22 -12
  99. package/modern/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  100. package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  101. package/modern/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  102. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  103. package/modern/index.js +1 -1
  104. package/modern/internals/index.js +5 -1
  105. package/modern/material/icons.js +4 -1
  106. package/modern/material/index.js +3 -2
  107. package/modern/models/gridProSlotProps.js +1 -0
  108. package/modern/utils/releaseInfo.js +1 -1
  109. package/modern/utils/tree/createRowTree.js +1 -0
  110. package/modern/utils/tree/insertDataRowInTree.js +4 -0
  111. package/modern/utils/tree/removeDataRowFromTree.js +1 -0
  112. package/modern/utils/tree/updateRowTree.js +2 -0
  113. package/modern/utils/tree/utils.js +52 -14
  114. package/node/DataGridPro/DataGridPro.js +15 -3
  115. package/node/DataGridPro/useDataGridProComponent.js +2 -0
  116. package/node/DataGridPro/useDataGridProProps.js +6 -12
  117. package/node/components/DataGridProVirtualScroller.js +12 -12
  118. package/node/components/GridColumnHeaders.js +22 -3
  119. package/node/components/GridDetailPanel.js +2 -2
  120. package/node/components/GridScrollArea.js +149 -0
  121. package/node/components/headerFiltering/GridHeaderFilterAdornment.js +105 -0
  122. package/node/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  123. package/node/components/headerFiltering/GridHeaderFilterClearButton.js +32 -0
  124. package/node/components/headerFiltering/GridHeaderFilterMenu.js +75 -0
  125. package/node/components/headerFiltering/constants.js +37 -0
  126. package/node/components/headerFiltering/index.js +27 -0
  127. package/node/components/index.js +11 -0
  128. package/node/constants/dataGridProDefaultSlotsComponents.js +5 -1
  129. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  130. package/node/hooks/features/columnResize/useGridColumnResize.js +22 -12
  131. package/node/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  132. package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  133. package/node/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  134. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  135. package/node/index.js +1 -1
  136. package/node/internals/index.js +16 -1
  137. package/node/material/icons.js +6 -2
  138. package/node/material/index.js +2 -1
  139. package/node/models/gridProSlotProps.js +5 -0
  140. package/node/utils/releaseInfo.js +1 -1
  141. package/node/utils/tree/createRowTree.js +1 -0
  142. package/node/utils/tree/insertDataRowInTree.js +4 -0
  143. package/node/utils/tree/removeDataRowFromTree.js +1 -0
  144. package/node/utils/tree/updateRowTree.js +2 -0
  145. package/node/utils/tree/utils.js +54 -15
  146. package/package.json +6 -6
  147. package/typeOverloads/modules.d.ts +13 -1
  148. package/utils/releaseInfo.js +1 -1
  149. package/utils/tree/createRowTree.d.ts +2 -0
  150. package/utils/tree/createRowTree.js +1 -0
  151. package/utils/tree/insertDataRowInTree.d.ts +5 -1
  152. package/utils/tree/insertDataRowInTree.js +4 -0
  153. package/utils/tree/removeDataRowFromTree.js +1 -0
  154. package/utils/tree/updateRowTree.js +2 -0
  155. package/utils/tree/utils.d.ts +9 -3
  156. package/utils/tree/utils.js +52 -14
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GridHeaderFilterCell = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _clsx = _interopRequireDefault(require("clsx"));
13
+ var _utils = require("@mui/utils");
14
+ var _xDataGrid = require("@mui/x-data-grid");
15
+ var _internals = require("@mui/x-data-grid/internals");
16
+ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
+ var _GridHeaderFilterAdornment = require("./GridHeaderFilterAdornment");
18
+ var _GridHeaderFilterClearButton = require("./GridHeaderFilterClearButton");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ const _excluded = ["colIndex", "height", "hasFocus", "headerFilterComponent", "filterOperators", "width", "headerClassName", "colDef", "item", "headerFilterMenuRef", "InputComponentProps", "showClearIcon"];
21
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+ const useUtilityClasses = ownerState => {
24
+ const {
25
+ colDef,
26
+ classes,
27
+ showColumnVerticalBorder
28
+ } = ownerState;
29
+ const slots = {
30
+ root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', 'withBorderColor', showColumnVerticalBorder && 'columnHeader--withRightBorder']
31
+ };
32
+ return (0, _utils.unstable_composeClasses)(slots, _xDataGrid.getDataGridUtilityClass, classes);
33
+ };
34
+ const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
35
+ const {
36
+ colIndex,
37
+ height,
38
+ hasFocus,
39
+ headerFilterComponent,
40
+ filterOperators,
41
+ width,
42
+ headerClassName,
43
+ colDef,
44
+ item,
45
+ headerFilterMenuRef,
46
+ InputComponentProps,
47
+ showClearIcon = true
48
+ } = props,
49
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
50
+ const apiRef = (0, _internals.useGridPrivateApiContext)();
51
+ const columnFields = (0, _xDataGrid.gridVisibleColumnFieldsSelector)(apiRef);
52
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
53
+ const cellRef = React.useRef(null);
54
+ const handleRef = (0, _utils.unstable_useForkRef)(ref, cellRef);
55
+ const inputRef = React.useRef(null);
56
+ const buttonRef = React.useRef(null);
57
+ const isEditing = (0, _internals.unstable_gridHeaderFilteringEditFieldSelector)(apiRef) === colDef.field;
58
+ const isMenuOpen = (0, _internals.unstable_gridHeaderFilteringMenuSelector)(apiRef) === colDef.field;
59
+ const currentOperator = filterOperators[0];
60
+ const InputComponent = colDef.filterable ? currentOperator.InputComponent : null;
61
+ const applyFilterChanges = React.useCallback(updatedItem => {
62
+ if (item.value && !updatedItem.value) {
63
+ apiRef.current.deleteFilterItem(updatedItem);
64
+ return;
65
+ }
66
+ apiRef.current.upsertFilterItem(updatedItem);
67
+ }, [apiRef, item]);
68
+ const clearFilterItem = React.useCallback(() => {
69
+ apiRef.current.deleteFilterItem(item);
70
+ }, [apiRef, item]);
71
+ React.useLayoutEffect(() => {
72
+ if (hasFocus && !isMenuOpen) {
73
+ let focusableElement = cellRef.current.querySelector('[tabindex="0"]');
74
+ if (isEditing && InputComponent) {
75
+ focusableElement = inputRef.current;
76
+ }
77
+ const elementToFocus = focusableElement || cellRef.current;
78
+ elementToFocus?.focus();
79
+ apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
80
+ }
81
+ }, [InputComponent, apiRef, hasFocus, isEditing, isMenuOpen]);
82
+ const onKeyDown = React.useCallback(event => {
83
+ if (isMenuOpen || (0, _internals.isNavigationKey)(event.key)) {
84
+ return;
85
+ }
86
+ switch (event.key) {
87
+ case 'Escape':
88
+ if (isEditing) {
89
+ apiRef.current.stopHeaderFilterEditMode();
90
+ }
91
+ break;
92
+ case 'Enter':
93
+ if (isEditing) {
94
+ apiRef.current.stopHeaderFilterEditMode();
95
+ break;
96
+ }
97
+ if (event.metaKey || event.ctrlKey) {
98
+ headerFilterMenuRef.current = buttonRef.current;
99
+ apiRef.current.showHeaderFilterMenu(colDef.field);
100
+ break;
101
+ }
102
+ apiRef.current.startHeaderFilterEditMode(colDef.field);
103
+ break;
104
+ case 'Tab':
105
+ {
106
+ if (isEditing) {
107
+ const fieldToFocus = columnFields[colIndex + (event.shiftKey ? -1 : 1)] ?? null;
108
+ if (fieldToFocus) {
109
+ apiRef.current.startHeaderFilterEditMode(fieldToFocus);
110
+ apiRef.current.setColumnHeaderFilterFocus(fieldToFocus, event);
111
+ }
112
+ }
113
+ break;
114
+ }
115
+ default:
116
+ if (isEditing || event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
117
+ break;
118
+ }
119
+ apiRef.current.startHeaderFilterEditMode(colDef.field);
120
+ break;
121
+ }
122
+ }, [apiRef, colDef.field, colIndex, columnFields, headerFilterMenuRef, isEditing, isMenuOpen]);
123
+ const publish = React.useCallback((eventName, propHandler) => event => {
124
+ apiRef.current.publishEvent(eventName, apiRef.current.getColumnHeaderParams(colDef.field), event);
125
+ if (propHandler) {
126
+ propHandler(event);
127
+ }
128
+ }, [apiRef, colDef.field]);
129
+ const onMouseDown = React.useCallback(event => {
130
+ if (!hasFocus) {
131
+ if (inputRef.current) {
132
+ inputRef.current.focus();
133
+ }
134
+ apiRef.current.setColumnHeaderFilterFocus(colDef.field, event);
135
+ }
136
+ }, [apiRef, colDef.field, hasFocus]);
137
+ const mouseEventsHandlers = React.useMemo(() => ({
138
+ onKeyDown: publish('headerFilterKeyDown', onKeyDown),
139
+ onClick: publish('headerFilterClick'),
140
+ onMouseDown: publish('headerFilterMouseDown', onMouseDown)
141
+ }), [onMouseDown, onKeyDown, publish]);
142
+ const ownerState = (0, _extends2.default)({}, rootProps, {
143
+ colDef
144
+ });
145
+ const classes = useUtilityClasses(ownerState);
146
+ const isNoInputOperator = filterOperators?.find(({
147
+ value
148
+ }) => item.operator === value)?.requiresFilterValue === false;
149
+ const isApplied = Boolean(item?.value) || isNoInputOperator;
150
+ const label = currentOperator.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _utils.unstable_capitalize)(item.operator)}`);
151
+ const isFilterActive = isApplied || hasFocus;
152
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
153
+ className: (0, _clsx.default)(classes.root, headerClassName),
154
+ ref: handleRef,
155
+ style: {
156
+ height,
157
+ width,
158
+ minWidth: width,
159
+ maxWidth: width
160
+ },
161
+ role: "columnheader",
162
+ "aria-colindex": colIndex + 1,
163
+ "aria-label": headerFilterComponent == null ? colDef.headerName ?? colDef.field : undefined
164
+ }, other, mouseEventsHandlers, {
165
+ children: [headerFilterComponent, InputComponent && headerFilterComponent === undefined ? /*#__PURE__*/(0, _jsxRuntime.jsx)(InputComponent, (0, _extends2.default)({
166
+ apiRef: apiRef,
167
+ item: item,
168
+ inputRef: inputRef,
169
+ applyValue: applyFilterChanges,
170
+ onFocus: () => apiRef.current.startHeaderFilterEditMode(colDef.field),
171
+ onBlur: () => apiRef.current.stopHeaderFilterEditMode(),
172
+ placeholder: apiRef.current.getLocaleText('columnMenuFilter'),
173
+ label: isFilterActive ? (0, _utils.unstable_capitalize)(label) : ' ',
174
+ isFilterActive: isFilterActive,
175
+ headerFilterMenu: /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaderFilterAdornment.GridHeaderFilterAdornment, {
176
+ operators: filterOperators,
177
+ item: item,
178
+ field: colDef.field,
179
+ applyFilterChanges: applyFilterChanges,
180
+ headerFilterMenuRef: headerFilterMenuRef,
181
+ buttonRef: buttonRef
182
+ }),
183
+ clearButton: showClearIcon && isApplied ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaderFilterClearButton.GridHeaderFilterClearButton, {
184
+ onClick: clearFilterItem
185
+ }) : null,
186
+ disabled: isNoInputOperator,
187
+ tabIndex: -1
188
+ }, currentOperator?.InputComponentProps, InputComponentProps)) : null]
189
+ }));
190
+ });
191
+ exports.GridHeaderFilterCell = GridHeaderFilterCell;
192
+ process.env.NODE_ENV !== "production" ? GridHeaderFilterCell.propTypes = {
193
+ // ----------------------------- Warning --------------------------------
194
+ // | These PropTypes are generated from the TypeScript type definitions |
195
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
196
+ // ----------------------------------------------------------------------
197
+ colDef: _propTypes.default.object.isRequired,
198
+ colIndex: _propTypes.default.number.isRequired,
199
+ filterOperators: _propTypes.default.arrayOf(_propTypes.default.shape({
200
+ getApplyFilterFn: _propTypes.default.func.isRequired,
201
+ getValueAsString: _propTypes.default.func,
202
+ headerLabel: _propTypes.default.string,
203
+ InputComponent: _propTypes.default.elementType,
204
+ InputComponentProps: _propTypes.default.object,
205
+ label: _propTypes.default.string,
206
+ requiresFilterValue: _propTypes.default.bool,
207
+ value: _propTypes.default.string.isRequired
208
+ })),
209
+ hasFocus: _propTypes.default.bool,
210
+ /**
211
+ * Class name that will be added in the column header cell.
212
+ */
213
+ headerClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
214
+ headerFilterComponent: _propTypes.default.node,
215
+ headerFilterMenuRef: _propTypes.default.shape({
216
+ current: _propTypes.default.object
217
+ }).isRequired,
218
+ height: _propTypes.default.number.isRequired,
219
+ InputComponentProps: _propTypes.default.object,
220
+ item: _propTypes.default.shape({
221
+ field: _propTypes.default.string.isRequired,
222
+ id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
223
+ operator: _propTypes.default.string.isRequired,
224
+ value: _propTypes.default.any
225
+ }).isRequired,
226
+ showClearIcon: _propTypes.default.bool,
227
+ sortIndex: _propTypes.default.number,
228
+ tabIndex: _propTypes.default.oneOf([-1, 0]).isRequired,
229
+ width: _propTypes.default.number.isRequired
230
+ } : void 0;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GridHeaderFilterClearButton = GridHeaderFilterClearButton;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ const sx = {
15
+ padding: '2px'
16
+ };
17
+ function GridHeaderFilterClearButton({
18
+ onClick
19
+ }) {
20
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
21
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, (0, _extends2.default)({
22
+ tabIndex: -1,
23
+ "aria-label": "Clear filter",
24
+ size: "small",
25
+ onClick: onClick,
26
+ sx: sx
27
+ }, rootProps.slotProps?.baseIconButton, {
28
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.headerFilterClearIcon, {
29
+ fontSize: "inherit"
30
+ })
31
+ }));
32
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GridHeaderFilterMenu = GridHeaderFilterMenu;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
11
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
12
+ var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
13
+ var _ListItemText = _interopRequireDefault(require("@mui/material/ListItemText"));
14
+ var _utils = require("@mui/utils");
15
+ var _xDataGrid = require("@mui/x-data-grid");
16
+ var _constants = require("./constants");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+ function GridHeaderFilterMenu({
21
+ open,
22
+ field,
23
+ targetRef,
24
+ applyFilterChanges,
25
+ operators,
26
+ item,
27
+ id,
28
+ labelledBy
29
+ }) {
30
+ const apiRef = (0, _xDataGrid.useGridApiContext)();
31
+ const hideMenu = React.useCallback(() => {
32
+ apiRef.current.hideHeaderFilterMenu();
33
+ }, [apiRef]);
34
+ const handleListKeyDown = React.useCallback(event => {
35
+ if (event.key === 'Tab') {
36
+ event.preventDefault();
37
+ }
38
+ if (event.key === 'Escape' || event.key === 'Tab') {
39
+ hideMenu();
40
+ }
41
+ }, [hideMenu]);
42
+ if (!targetRef.current) {
43
+ return null;
44
+ }
45
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_xDataGrid.GridMenu, {
46
+ placement: "bottom-start",
47
+ open: open,
48
+ target: targetRef.current,
49
+ onClickAway: hideMenu,
50
+ onExited: hideMenu,
51
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
52
+ "aria-labelledby": labelledBy,
53
+ id: id,
54
+ onKeyDown: handleListKeyDown,
55
+ children: operators.map((op, i) => {
56
+ const label = op?.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _utils.unstable_capitalize)(op.value)}`);
57
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, {
58
+ onClick: () => {
59
+ applyFilterChanges((0, _extends2.default)({}, item, {
60
+ operator: op.value
61
+ }));
62
+ hideMenu();
63
+ },
64
+ autoFocus: i === 0 ? open : false,
65
+ selected: op.value === item.operator,
66
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
67
+ children: _constants.OPERATOR_SYMBOL_MAPPING[op.value]
68
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemText.default, {
69
+ children: label
70
+ })]
71
+ }, `${field}-${op.value}`);
72
+ })
73
+ })
74
+ });
75
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OPERATOR_SYMBOL_MAPPING = void 0;
7
+ const OPERATOR_SYMBOL_MAPPING = {
8
+ contains: '∋',
9
+ equals: '=',
10
+ '=': '=',
11
+ '!=': '≠',
12
+ '>': '>',
13
+ '>=': '≥',
14
+ '<': '<',
15
+ '<=': '≤',
16
+ startsWith: '⊃',
17
+ endsWith: '⊂',
18
+ is: '=',
19
+ not: '≠',
20
+ isNot: '≠',
21
+ isEmpty: '∅',
22
+ isNotEmpty: '∉',
23
+ isIn: '∈',
24
+ isNotIn: '∉',
25
+ isLessThan: '<',
26
+ isLessThanOrEqual: '≤',
27
+ isGreaterThan: '>',
28
+ isGreaterThanOrEqual: '≥',
29
+ isBetween: '∈',
30
+ isNotBetween: '∉',
31
+ isAnyOf: '∈',
32
+ after: '>',
33
+ onOrAfter: '≥',
34
+ before: '<',
35
+ onOrBefore: '≤'
36
+ };
37
+ exports.OPERATOR_SYMBOL_MAPPING = OPERATOR_SYMBOL_MAPPING;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _GridHeaderFilterAdornment = require("./GridHeaderFilterAdornment");
7
+ Object.keys(_GridHeaderFilterAdornment).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _GridHeaderFilterAdornment[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _GridHeaderFilterAdornment[key];
14
+ }
15
+ });
16
+ });
17
+ var _GridHeaderFilterCell = require("./GridHeaderFilterCell");
18
+ Object.keys(_GridHeaderFilterCell).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _GridHeaderFilterCell[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _GridHeaderFilterCell[key];
25
+ }
26
+ });
27
+ });
@@ -46,4 +46,15 @@ Object.keys(_icons).forEach(function (key) {
46
46
  return _icons[key];
47
47
  }
48
48
  });
49
+ });
50
+ var _headerFiltering = require("./headerFiltering");
51
+ Object.keys(_headerFiltering).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _headerFiltering[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _headerFiltering[key];
58
+ }
59
+ });
49
60
  });
@@ -9,9 +9,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _internals = require("@mui/x-data-grid/internals");
10
10
  var _GridProColumnMenu = require("../components/GridProColumnMenu");
11
11
  var _GridColumnHeaders = require("../components/GridColumnHeaders");
12
+ var _GridHeaderFilterMenu = require("../components/headerFiltering/GridHeaderFilterMenu");
13
+ var _GridHeaderFilterCell = require("../components/headerFiltering/GridHeaderFilterCell");
12
14
  var _material = _interopRequireDefault(require("../material"));
13
15
  const DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = (0, _extends2.default)({}, _internals.DATA_GRID_DEFAULT_SLOTS_COMPONENTS, _material.default, {
14
16
  ColumnMenu: _GridProColumnMenu.GridProColumnMenu,
15
- ColumnHeaders: _GridColumnHeaders.GridColumnHeaders
17
+ ColumnHeaders: _GridColumnHeaders.GridColumnHeaders,
18
+ HeaderFilterCell: _GridHeaderFilterCell.GridHeaderFilterCell,
19
+ HeaderFilterMenu: _GridHeaderFilterMenu.GridHeaderFilterMenu
16
20
  });
17
21
  exports.DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useGridColumnHeaders = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _xDataGrid = require("@mui/x-data-grid");
12
+ var _system = require("@mui/system");
13
+ var _internals = require("@mui/x-data-grid/internals");
14
+ var _useGridRootProps = require("../../utils/useGridRootProps");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ const _excluded = ["getColumnsToRender", "getRootProps"];
17
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+ const GridHeaderFilterRow = (0, _system.styled)('div', {
20
+ name: 'MuiDataGrid',
21
+ slot: 'HeaderFilterRow',
22
+ overridesResolver: (props, styles) => styles.headerFilterRow
23
+ })(() => ({
24
+ display: 'flex',
25
+ borderTop: '1px solid rgba(224, 224, 224, 1)'
26
+ }));
27
+ const useGridColumnHeaders = props => {
28
+ const apiRef = (0, _internals.useGridPrivateApiContext)();
29
+ const {
30
+ headerGroupingMaxDepth,
31
+ hasOtherElementInTabSequence
32
+ } = props;
33
+ const columnHeaderFilterTabIndexState = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridTabIndexColumnHeaderFilterSelector);
34
+ const _useGridColumnHeaders = (0, _internals.useGridColumnHeaders)((0, _extends2.default)({}, props, {
35
+ hasOtherElementInTabSequence: hasOtherElementInTabSequence || columnHeaderFilterTabIndexState !== null
36
+ })),
37
+ {
38
+ getColumnsToRender,
39
+ getRootProps
40
+ } = _useGridColumnHeaders,
41
+ otherProps = (0, _objectWithoutPropertiesLoose2.default)(_useGridColumnHeaders, _excluded);
42
+ const headerFiltersRef = React.useRef(null);
43
+ apiRef.current.register('private', {
44
+ headerFiltersElementRef: headerFiltersRef
45
+ });
46
+ const headerFilterMenuRef = React.useRef(null);
47
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
48
+ const disableHeaderFiltering = !rootProps.unstable_headerFilters;
49
+ const headerHeight = Math.floor(rootProps.columnHeaderHeight * props.densityFactor);
50
+ const filterModel = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.gridFilterModelSelector);
51
+ const totalHeaderHeight = (0, _internals.getTotalHeaderHeight)(apiRef, rootProps.columnHeaderHeight) + (disableHeaderFiltering ? 0 : headerHeight);
52
+ const columnHeaderFilterFocus = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridFocusColumnHeaderFilterSelector);
53
+ const getColumnFilters = (params, other = {}) => {
54
+ if (disableHeaderFiltering) {
55
+ return null;
56
+ }
57
+ const columnsToRender = getColumnsToRender(params);
58
+ if (columnsToRender == null) {
59
+ return null;
60
+ }
61
+ const {
62
+ renderedColumns,
63
+ firstColumnToRender
64
+ } = columnsToRender;
65
+ const filters = [];
66
+ for (let i = 0; i < renderedColumns.length; i += 1) {
67
+ const colDef = renderedColumns[i];
68
+ const columnIndex = firstColumnToRender + i;
69
+ const hasFocus = columnHeaderFilterFocus?.field === colDef.field;
70
+ const isFirstColumn = columnIndex === 0;
71
+ const tabIndexField = columnHeaderFilterTabIndexState?.field;
72
+ const tabIndex = tabIndexField === colDef.field || isFirstColumn && !props.hasOtherElementInTabSequence ? 0 : -1;
73
+ let headerFilterComponent;
74
+ if (colDef.renderHeaderFilter) {
75
+ headerFilterComponent = colDef.renderHeaderFilter(apiRef.current.getColumnHeaderParams(colDef.field));
76
+ }
77
+ const headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({
78
+ field: colDef.field,
79
+ colDef
80
+ }) : colDef.headerClassName;
81
+
82
+ // TODO: Support for `isAnyOf` operator
83
+ const filterOperators = colDef.filterOperators?.filter(operator => operator.value !== 'isAnyOf') ?? [];
84
+ const item = filterModel?.items.find(it => it.field === colDef.field && it.operator !== 'isAnyOf') ?? (0, _internals.getGridFilter)(colDef);
85
+ filters.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.headerFilterCell, (0, _extends2.default)({
86
+ colIndex: columnIndex,
87
+ height: headerHeight,
88
+ width: colDef.computedWidth,
89
+ colDef: colDef,
90
+ hasFocus: hasFocus,
91
+ tabIndex: tabIndex,
92
+ headerFilterMenuRef: headerFilterMenuRef,
93
+ headerFilterComponent: headerFilterComponent,
94
+ headerClassName: headerClassName,
95
+ filterOperators: filterOperators,
96
+ "data-field": colDef.field,
97
+ item: item
98
+ }, rootProps.slotProps?.headerFilterCell, other), `${colDef.field}-filter`));
99
+ }
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridHeaderFilterRow, {
101
+ ref: headerFiltersRef,
102
+ ownerState: rootProps,
103
+ role: "row",
104
+ "aria-rowindex": headerGroupingMaxDepth + 2,
105
+ children: filters
106
+ });
107
+ };
108
+ const rootStyle = {
109
+ minHeight: totalHeaderHeight,
110
+ maxHeight: totalHeaderHeight,
111
+ lineHeight: `${headerHeight}px`
112
+ };
113
+ return (0, _extends2.default)({}, otherProps, {
114
+ getColumnFilters,
115
+ getRootProps: disableHeaderFiltering ? getRootProps : (other = {}) => (0, _extends2.default)({
116
+ style: rootStyle
117
+ }, other)
118
+ });
119
+ };
120
+ exports.useGridColumnHeaders = useGridColumnHeaders;
@@ -97,6 +97,7 @@ const useGridColumnResize = (apiRef, props) => {
97
97
  const logger = (0, _xDataGrid.useGridLogger)(apiRef, 'useGridColumnResize');
98
98
  const colDefRef = React.useRef();
99
99
  const colElementRef = React.useRef();
100
+ const headerFilterElementRef = React.useRef();
100
101
  const colGroupingElementRef = React.useRef();
101
102
  const colCellElementsRef = React.useRef();
102
103
  const theme = (0, _styles.useTheme)();
@@ -118,6 +119,12 @@ const useGridColumnResize = (apiRef, props) => {
118
119
  colElementRef.current.style.width = `${newWidth}px`;
119
120
  colElementRef.current.style.minWidth = `${newWidth}px`;
120
121
  colElementRef.current.style.maxWidth = `${newWidth}px`;
122
+ const headerFilterElement = headerFilterElementRef.current;
123
+ if (headerFilterElement) {
124
+ headerFilterElement.style.width = `${newWidth}px`;
125
+ headerFilterElement.style.minWidth = `${newWidth}px`;
126
+ headerFilterElement.style.maxWidth = `${newWidth}px`;
127
+ }
121
128
  [...colCellElementsRef.current, ...colGroupingElementRef.current].forEach(element => {
122
129
  const div = element;
123
130
  let finalWidth;
@@ -133,7 +140,7 @@ const useGridColumnResize = (apiRef, props) => {
133
140
  div.style.maxWidth = finalWidth;
134
141
  });
135
142
  };
136
- const handleResizeMouseUp = (0, _utils.unstable_useEventCallback)(nativeEvent => {
143
+ const finishResize = nativeEvent => {
137
144
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
138
145
  stopListening();
139
146
  apiRef.current.updateColumns([colDefRef.current]);
@@ -149,7 +156,8 @@ const useGridColumnResize = (apiRef, props) => {
149
156
  }
150
157
  });
151
158
  logger.debug(`Updating col ${colDefRef.current.field} with new width: ${colDefRef.current.width}`);
152
- });
159
+ };
160
+ const handleResizeMouseUp = (0, _utils.unstable_useEventCallback)(finishResize);
153
161
  const handleResizeMouseMove = (0, _utils.unstable_useEventCallback)(nativeEvent => {
154
162
  // Cancel move in case some other element consumed a mouseup event and it was not fired.
155
163
  if (nativeEvent.buttons === 0) {
@@ -187,6 +195,10 @@ const useGridColumnResize = (apiRef, props) => {
187
195
  }, event);
188
196
  colDefRef.current = colDef;
189
197
  colElementRef.current = apiRef.current.columnHeadersContainerElementRef?.current.querySelector(`[data-field="${colDef.field}"]`);
198
+ const headerFilterRowElement = apiRef.current.headerFiltersElementRef?.current;
199
+ if (headerFilterRowElement) {
200
+ headerFilterElementRef.current = headerFilterRowElement.querySelector(`[data-field="${colDef.field}"]`);
201
+ }
190
202
  colGroupingElementRef.current = (0, _domUtils.findGroupHeaderElementsFromField)(apiRef.current.columnHeadersContainerElementRef?.current, colDef.field);
191
203
  colCellElementsRef.current = (0, _domUtils.findGridCellElementsFromCol)(colElementRef.current, apiRef.current);
192
204
  const doc = (0, _utils.unstable_ownerDocument)(apiRef.current.rootElementRef.current);
@@ -195,21 +207,16 @@ const useGridColumnResize = (apiRef, props) => {
195
207
  initialOffsetToSeparator.current = computeOffsetToSeparator(event.clientX, colElementRef.current.getBoundingClientRect(), resizeDirection.current);
196
208
  doc.addEventListener('mousemove', handleResizeMouseMove);
197
209
  doc.addEventListener('mouseup', handleResizeMouseUp);
210
+
211
+ // Fixes https://github.com/mui/mui-x/issues/4777
212
+ colElementRef.current.style.pointerEvents = 'none';
198
213
  });
199
214
  const handleTouchEnd = (0, _utils.unstable_useEventCallback)(nativeEvent => {
200
215
  const finger = trackFinger(nativeEvent, touchId.current);
201
216
  if (!finger) {
202
217
  return;
203
218
  }
204
-
205
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
206
- stopListening();
207
- apiRef.current.updateColumns([colDefRef.current]);
208
- clearTimeout(stopResizeEventTimeout.current);
209
- stopResizeEventTimeout.current = setTimeout(() => {
210
- apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);
211
- });
212
- logger.debug(`Updating col ${colDefRef.current.field} with new width: ${colDefRef.current.width}`);
219
+ finishResize(nativeEvent);
213
220
  });
214
221
  const handleTouchMove = (0, _utils.unstable_useEventCallback)(nativeEvent => {
215
222
  const finger = trackFinger(nativeEvent, touchId.current);
@@ -271,7 +278,10 @@ const useGridColumnResize = (apiRef, props) => {
271
278
  doc.removeEventListener('mouseup', handleResizeMouseUp);
272
279
  doc.removeEventListener('touchmove', handleTouchMove);
273
280
  doc.removeEventListener('touchend', handleTouchEnd);
274
- }, [apiRef, handleResizeMouseMove, handleResizeMouseUp, handleTouchMove, handleTouchEnd]);
281
+ if (colElementRef.current) {
282
+ colElementRef.current.style.pointerEvents = 'unset';
283
+ }
284
+ }, [apiRef, colElementRef, handleResizeMouseMove, handleResizeMouseUp, handleTouchMove, handleTouchEnd]);
275
285
  const handleResizeStart = React.useCallback(({
276
286
  field
277
287
  }) => {
@@ -176,15 +176,13 @@ const useGridDetailPanel = (apiRef, props) => {
176
176
  }, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
177
177
  const addDetailHeight = React.useCallback((initialValue, row) => {
178
178
  if (!expandedRowIds || expandedRowIds.length === 0 || !expandedRowIds.includes(row.id)) {
179
- return (0, _extends2.default)({}, initialValue, {
180
- detail: 0
181
- });
179
+ initialValue.detail = 0;
180
+ return initialValue;
182
181
  }
183
182
  updateCachesIfNeeded();
184
183
  const heightCache = (0, _gridDetailPanelSelector.gridDetailPanelExpandedRowsHeightCacheSelector)(apiRef);
185
- return (0, _extends2.default)({}, initialValue, {
186
- detail: heightCache[row.id] ?? 0 // Fallback to zero because the cache might not be ready yet (e.g. page was changed)
187
- });
184
+ initialValue.detail = heightCache[row.id] ?? 0; // Fallback to zero because the cache might not be ready yet (e.g. page was changed)
185
+ return initialValue;
188
186
  }, [apiRef, expandedRowIds, updateCachesIfNeeded]);
189
187
  (0, _internals.useGridRegisterPipeProcessor)(apiRef, 'rowHeight', addDetailHeight);
190
188
  const isFirstRender = React.useRef(true);