@mui/x-data-grid 6.0.3 → 6.1.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 (162) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/components/GridAutoSizer.js +3 -0
  3. package/components/GridPagination.d.ts +6 -6
  4. package/components/GridRow.js +4 -2
  5. package/components/cell/GridActionsCellItem.d.ts +2 -2
  6. package/components/cell/GridEditDateCell.js +37 -16
  7. package/components/columnHeaders/ColumnHeaderMenuIcon.js +20 -16
  8. package/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
  9. package/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
  10. package/components/menu/columnMenu/GridColumnMenu.d.ts +5 -5
  11. package/components/menu/columnMenu/GridColumnMenu.js +30 -30
  12. package/components/menu/columnMenu/GridColumnMenuProps.d.ts +1 -1
  13. package/components/panel/GridColumnsPanel.d.ts +8 -0
  14. package/components/panel/GridColumnsPanel.js +18 -6
  15. package/components/panel/GridPanel.d.ts +1 -1
  16. package/components/panel/filterPanel/GridFilterPanel.js +1 -1
  17. package/components/reexportable.d.ts +1 -1
  18. package/components/reexportable.js +1 -1
  19. package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
  20. package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
  21. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  22. package/hooks/core/useGridApiInitialization.js +3 -3
  23. package/hooks/features/columnMenu/columnMenuInterfaces.d.ts +11 -11
  24. package/hooks/features/columnMenu/{useGridColumnMenuComponents.d.ts → useGridColumnMenuSlots.d.ts} +4 -4
  25. package/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +21 -26
  26. package/hooks/features/columns/gridColumnsSelector.d.ts +3 -3
  27. package/hooks/features/columns/useGridColumns.js +1 -1
  28. package/hooks/features/editing/useGridCellEditing.js +5 -1
  29. package/hooks/features/editing/useGridEditing.js +1 -3
  30. package/hooks/features/editing/useGridRowEditing.js +5 -1
  31. package/hooks/features/filter/gridFilterState.js +6 -1
  32. package/hooks/features/filter/useGridFilter.js +6 -1
  33. package/hooks/features/sorting/useGridSorting.js +1 -1
  34. package/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
  35. package/index.d.ts +1 -1
  36. package/index.js +10 -2
  37. package/legacy/components/GridAutoSizer.js +3 -0
  38. package/legacy/components/GridRow.js +5 -2
  39. package/legacy/components/cell/GridEditBooleanCell.js +19 -21
  40. package/legacy/components/cell/GridEditDateCell.js +69 -39
  41. package/legacy/components/cell/GridEditInputCell.js +25 -27
  42. package/legacy/components/cell/GridEditSingleSelectCell.js +26 -28
  43. package/legacy/components/columnHeaders/ColumnHeaderMenuIcon.js +20 -16
  44. package/legacy/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
  45. package/legacy/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
  46. package/legacy/components/menu/columnMenu/GridColumnMenu.js +32 -32
  47. package/legacy/components/panel/GridColumnsPanel.js +19 -6
  48. package/legacy/components/panel/filterPanel/GridFilterPanel.js +1 -1
  49. package/legacy/components/reexportable.js +1 -1
  50. package/legacy/hooks/core/useGridApiInitialization.js +3 -3
  51. package/legacy/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +25 -30
  52. package/legacy/hooks/features/columns/gridColumnsUtils.js +2 -2
  53. package/legacy/hooks/features/columns/useGridColumns.js +1 -1
  54. package/legacy/hooks/features/editing/useGridCellEditing.js +120 -120
  55. package/legacy/hooks/features/editing/useGridEditing.js +17 -21
  56. package/legacy/hooks/features/editing/useGridRowEditing.js +5 -1
  57. package/legacy/hooks/features/export/useGridPrintExport.js +45 -47
  58. package/legacy/hooks/features/filter/gridFilterState.js +6 -1
  59. package/legacy/hooks/features/filter/useGridFilter.js +6 -1
  60. package/legacy/hooks/features/rows/gridRowsUtils.js +2 -2
  61. package/legacy/hooks/features/sorting/useGridSorting.js +1 -1
  62. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +7 -7
  63. package/legacy/index.js +10 -2
  64. package/legacy/locales/coreLocales.js +0 -1
  65. package/legacy/locales/daDK.js +16 -21
  66. package/legacy/locales/esES.js +1 -1
  67. package/legacy/locales/huHU.js +15 -20
  68. package/legacy/locales/jaJP.js +1 -1
  69. package/legacy/locales/nbNO.js +10 -12
  70. package/legacy/locales/nlNL.js +3 -3
  71. package/legacy/locales/ptBR.js +7 -9
  72. package/legacy/locales/ruRU.js +1 -1
  73. package/legacy/locales/svSE.js +2 -2
  74. package/legacy/models/gridColumnGrouping.js +4 -0
  75. package/legacy/models/params/gridRowParams.js +8 -0
  76. package/legacy/utils/createSelector.js +14 -22
  77. package/locales/coreLocales.js +0 -1
  78. package/locales/daDK.js +16 -21
  79. package/locales/esES.js +1 -1
  80. package/locales/huHU.js +15 -20
  81. package/locales/jaJP.js +1 -1
  82. package/locales/nbNO.js +10 -12
  83. package/locales/nlNL.js +3 -3
  84. package/locales/ptBR.js +7 -9
  85. package/locales/ruRU.js +1 -1
  86. package/locales/svSE.js +2 -2
  87. package/models/api/gridCoreApi.d.ts +3 -1
  88. package/models/api/gridEditingApi.d.ts +4 -0
  89. package/models/gridColumnGrouping.js +4 -0
  90. package/models/params/gridRowParams.js +8 -0
  91. package/modern/components/GridAutoSizer.js +3 -0
  92. package/modern/components/GridRow.js +4 -2
  93. package/modern/components/cell/GridEditDateCell.js +37 -16
  94. package/modern/components/columnHeaders/ColumnHeaderMenuIcon.js +19 -15
  95. package/modern/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
  96. package/modern/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
  97. package/modern/components/menu/columnMenu/GridColumnMenu.js +30 -30
  98. package/modern/components/panel/GridColumnsPanel.js +18 -6
  99. package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -1
  100. package/modern/components/reexportable.js +1 -1
  101. package/modern/hooks/core/useGridApiInitialization.js +3 -3
  102. package/modern/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +21 -26
  103. package/modern/hooks/features/columns/useGridColumns.js +1 -1
  104. package/modern/hooks/features/editing/useGridCellEditing.js +5 -1
  105. package/modern/hooks/features/editing/useGridEditing.js +1 -3
  106. package/modern/hooks/features/editing/useGridRowEditing.js +5 -1
  107. package/modern/hooks/features/filter/gridFilterState.js +6 -1
  108. package/modern/hooks/features/filter/useGridFilter.js +6 -1
  109. package/modern/hooks/features/sorting/useGridSorting.js +1 -1
  110. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
  111. package/modern/index.js +10 -2
  112. package/modern/locales/coreLocales.js +0 -1
  113. package/modern/locales/daDK.js +16 -21
  114. package/modern/locales/esES.js +1 -1
  115. package/modern/locales/huHU.js +15 -20
  116. package/modern/locales/jaJP.js +1 -1
  117. package/modern/locales/nbNO.js +10 -12
  118. package/modern/locales/nlNL.js +3 -3
  119. package/modern/locales/ptBR.js +7 -9
  120. package/modern/locales/ruRU.js +1 -1
  121. package/modern/locales/svSE.js +2 -2
  122. package/modern/models/gridColumnGrouping.js +4 -0
  123. package/modern/models/params/gridRowParams.js +8 -0
  124. package/modern/utils/createSelector.js +12 -22
  125. package/node/components/GridAutoSizer.js +3 -1
  126. package/node/components/GridRow.js +4 -2
  127. package/node/components/cell/GridCell.js +1 -0
  128. package/node/components/cell/GridEditDateCell.js +37 -16
  129. package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +19 -15
  130. package/node/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
  131. package/node/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
  132. package/node/components/menu/columnMenu/GridColumnMenu.js +33 -33
  133. package/node/components/panel/GridColumnsPanel.js +18 -6
  134. package/node/components/panel/filterPanel/GridFilterPanel.js +1 -1
  135. package/node/components/reexportable.js +4 -4
  136. package/node/hooks/core/useGridApiInitialization.js +3 -3
  137. package/node/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +22 -27
  138. package/node/hooks/features/columns/useGridColumns.js +1 -1
  139. package/node/hooks/features/editing/useGridCellEditing.js +5 -1
  140. package/node/hooks/features/editing/useGridEditing.js +1 -3
  141. package/node/hooks/features/editing/useGridRowEditing.js +5 -1
  142. package/node/hooks/features/filter/gridFilterState.js +5 -0
  143. package/node/hooks/features/filter/useGridFilter.js +6 -1
  144. package/node/hooks/features/sorting/useGridSorting.js +1 -1
  145. package/node/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
  146. package/node/index.js +7 -7
  147. package/node/locales/daDK.js +16 -21
  148. package/node/locales/esES.js +1 -1
  149. package/node/locales/huHU.js +15 -20
  150. package/node/locales/jaJP.js +1 -1
  151. package/node/locales/nbNO.js +10 -12
  152. package/node/locales/nlNL.js +3 -3
  153. package/node/locales/ptBR.js +7 -9
  154. package/node/locales/ruRU.js +1 -1
  155. package/node/locales/svSE.js +2 -2
  156. package/node/models/gridColumnGrouping.js +4 -0
  157. package/node/models/params/gridEditCellParams.js +1 -0
  158. package/node/models/params/gridRowParams.js +9 -0
  159. package/node/utils/createSelector.js +12 -22
  160. package/package.json +1 -1
  161. package/utils/createSelector.d.ts +4 -4
  162. package/utils/createSelector.js +14 -22
@@ -29,7 +29,7 @@ var _utils2 = require("../utils/utils");
29
29
  var _gridEditingSelectors = require("../hooks/features/editing/gridEditingSelectors");
30
30
  var _jsxRuntime = require("react/jsx-runtime");
31
31
  const _excluded = ["selected", "rowId", "row", "index", "style", "position", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "isLastVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave"],
32
- _excluded2 = ["changeReason"];
32
+ _excluded2 = ["changeReason", "unstable_updateValueOnRender"];
33
33
  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); }
34
34
  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; }
35
35
  const useUtilityClasses = ownerState => {
@@ -56,7 +56,7 @@ function EmptyCell({
56
56
  width
57
57
  };
58
58
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
59
- className: "MuiDataGrid-cell MuiDataGrid-withBorderColor",
59
+ className: `${_gridClasses.gridClasses.cell} ${_gridClasses.gridClasses.withBorderColor}`,
60
60
  style: style
61
61
  }); // TODO change to .MuiDataGrid-emptyCell or .MuiDataGrid-rowFiller
62
62
  }
@@ -218,6 +218,8 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
218
218
  }
219
219
  if (editCellState != null && column.renderEditCell) {
220
220
  const updatedRow = apiRef.current.getRowWithUpdatedValues(rowId, column.field);
221
+
222
+ // eslint-disable-next-line @typescript-eslint/naming-convention
221
223
  const editCellStateRest = (0, _objectWithoutPropertiesLoose2.default)(editCellState, _excluded2);
222
224
  const params = (0, _extends2.default)({}, cellParams, {
223
225
  row: updatedRow
@@ -18,6 +18,7 @@ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
18
18
  var _gridFocusStateSelector = require("../../hooks/features/focus/gridFocusStateSelector");
19
19
  var _jsxRuntime = require("react/jsx-runtime");
20
20
  const _excluded = ["align", "children", "colIndex", "colDef", "cellMode", "field", "formattedValue", "hasFocus", "height", "isEditable", "isSelected", "rowId", "tabIndex", "value", "width", "className", "showRightBorder", "extendRowFullWidth", "row", "colSpan", "disableDragEvents", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"];
21
+ /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
21
22
  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
23
  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
24
  // Based on https://stackoverflow.com/a/59518678
@@ -73,22 +73,25 @@ function GridEditDateCell(props) {
73
73
  classes: rootProps.classes
74
74
  };
75
75
  const classes = useUtilityClasses(ownerState);
76
+ const hasUpdatedEditValueOnMount = React.useRef(false);
77
+ const parseValueToDate = React.useCallback(value => {
78
+ if (value === '') {
79
+ return null;
80
+ }
81
+ const [date, time] = value.split('T');
82
+ const [year, month, day] = date.split('-');
83
+ const parsedDate = new Date();
84
+ parsedDate.setFullYear(Number(year), Number(month) - 1, Number(day));
85
+ parsedDate.setHours(0, 0, 0, 0);
86
+ if (time) {
87
+ const [hours, minutes] = time.split(':');
88
+ parsedDate.setHours(Number(hours), Number(minutes), 0, 0);
89
+ }
90
+ return parsedDate;
91
+ }, []);
76
92
  const handleChange = React.useCallback(async event => {
77
93
  const newFormattedDate = event.target.value;
78
- let newParsedDate;
79
- if (newFormattedDate === '') {
80
- newParsedDate = null;
81
- } else {
82
- const [date, time] = newFormattedDate.split('T');
83
- const [year, month, day] = date.split('-');
84
- newParsedDate = new Date();
85
- newParsedDate.setFullYear(Number(year), Number(month) - 1, Number(day));
86
- newParsedDate.setHours(0, 0, 0, 0);
87
- if (time) {
88
- const [hours, minutes] = time.split(':');
89
- newParsedDate.setHours(Number(hours), Number(minutes), 0, 0);
90
- }
91
- }
94
+ const newParsedDate = parseValueToDate(newFormattedDate);
92
95
  if (onValueChange) {
93
96
  await onValueChange(event, newParsedDate);
94
97
  }
@@ -101,7 +104,7 @@ function GridEditDateCell(props) {
101
104
  field,
102
105
  value: newParsedDate
103
106
  }, event);
104
- }, [apiRef, field, id, onValueChange]);
107
+ }, [apiRef, field, id, onValueChange, parseValueToDate]);
105
108
  React.useEffect(() => {
106
109
  setValueState(state => {
107
110
  if (valueTransformed.parsed !== state.parsed && valueTransformed.parsed?.getTime() !== state.parsed?.getTime()) {
@@ -115,8 +118,26 @@ function GridEditDateCell(props) {
115
118
  inputRef.current.focus();
116
119
  }
117
120
  }, [hasFocus]);
121
+ const meta = apiRef.current.unstable_getEditCellMeta(id, field);
122
+ const handleInputRef = el => {
123
+ inputRef.current = el;
124
+ if (meta.unstable_updateValueOnRender && !hasUpdatedEditValueOnMount.current) {
125
+ const inputValue = inputRef.current.value;
126
+ const parsedDate = parseValueToDate(inputValue);
127
+ setValueState({
128
+ parsed: parsedDate,
129
+ formatted: inputValue
130
+ });
131
+ apiRef.current.setEditCellValue({
132
+ id,
133
+ field,
134
+ value: parsedDate
135
+ });
136
+ hasUpdatedEditValueOnMount.current = true;
137
+ }
138
+ };
118
139
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledInputBase, (0, _extends2.default)({
119
- inputRef: inputRef,
140
+ inputRef: handleInputRef,
120
141
  fullWidth: true,
121
142
  className: classes.root,
122
143
  type: isDateTime ? 'datetime-local' : 'date',
@@ -46,22 +46,26 @@ const ColumnHeaderMenuIcon = /*#__PURE__*/React.memo(props => {
46
46
  }, [apiRef, colDef.field]);
47
47
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
48
48
  className: classes.root,
49
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, (0, _extends2.default)({
50
- ref: iconButtonRef,
51
- tabIndex: -1,
52
- className: classes.button,
53
- "aria-label": apiRef.current.getLocaleText('columnMenuLabel'),
49
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, (0, _extends2.default)({
54
50
  title: apiRef.current.getLocaleText('columnMenuLabel'),
55
- size: "small",
56
- onClick: handleMenuIconClick,
57
- "aria-expanded": open ? 'true' : undefined,
58
- "aria-haspopup": "true",
59
- "aria-controls": columnMenuId,
60
- id: columnMenuButtonId
61
- }, rootProps.slotProps?.baseIconButton, {
62
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnMenuIcon, {
63
- fontSize: "small"
64
- })
51
+ enterDelay: 1000
52
+ }, rootProps.slotProps?.baseTooltip, {
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, (0, _extends2.default)({
54
+ ref: iconButtonRef,
55
+ tabIndex: -1,
56
+ className: classes.button,
57
+ "aria-label": apiRef.current.getLocaleText('columnMenuLabel'),
58
+ size: "small",
59
+ onClick: handleMenuIconClick,
60
+ "aria-expanded": open ? 'true' : undefined,
61
+ "aria-haspopup": "true",
62
+ "aria-controls": columnMenuId,
63
+ id: columnMenuButtonId
64
+ }, rootProps.slotProps?.baseIconButton, {
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnMenuIcon, {
66
+ fontSize: "small"
67
+ })
68
+ }))
65
69
  }))
66
70
  });
67
71
  });
@@ -55,14 +55,13 @@ const ColumnHeaderInnerTitle = /*#__PURE__*/React.forwardRef(function ColumnHead
55
55
  function GridColumnHeaderTitle(props) {
56
56
  const {
57
57
  label,
58
- description,
59
- columnWidth
58
+ description
60
59
  } = props;
61
60
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
62
61
  const titleRef = React.useRef(null);
63
62
  const [tooltip, setTooltip] = React.useState('');
64
- React.useEffect(() => {
65
- if (!description && titleRef && titleRef.current) {
63
+ const handleMouseOver = React.useCallback(() => {
64
+ if (!description && titleRef?.current) {
66
65
  const isOver = (0, _domUtils.isOverflown)(titleRef.current);
67
66
  if (isOver) {
68
67
  setTooltip(label);
@@ -70,11 +69,12 @@ function GridColumnHeaderTitle(props) {
70
69
  setTooltip('');
71
70
  }
72
71
  }
73
- }, [titleRef, columnWidth, description, label]);
72
+ }, [description, label]);
74
73
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, (0, _extends2.default)({
75
74
  title: description || tooltip
76
75
  }, rootProps.slotProps?.baseTooltip, {
77
76
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ColumnHeaderInnerTitle, {
77
+ onMouseOver: handleMouseOver,
78
78
  ref: titleRef,
79
79
  children: label
80
80
  })
@@ -29,8 +29,10 @@ function GridColumnHeaderMenu({
29
29
  const hideMenu = React.useCallback(event => {
30
30
  // Prevent triggering the sorting
31
31
  event.stopPropagation();
32
- apiRef.current.hideColumnMenu();
33
- }, [apiRef]);
32
+ if (!target?.contains(event.target)) {
33
+ apiRef.current.hideColumnMenu();
34
+ }
35
+ }, [apiRef, target]);
34
36
  if (!target) {
35
37
  return null;
36
38
  }
@@ -4,27 +4,27 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.GridGenericColumnMenu = exports.GridColumnMenu = exports.GRID_COLUMN_MENU_COMPONENTS_PROPS = exports.GRID_COLUMN_MENU_COMPONENTS = void 0;
7
+ exports.GridGenericColumnMenu = exports.GridColumnMenu = exports.GRID_COLUMN_MENU_SLOT_PROPS = exports.GRID_COLUMN_MENU_SLOTS = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _useGridColumnMenuComponents = require("../../../hooks/features/columnMenu/useGridColumnMenuComponents");
12
+ var _useGridColumnMenuSlots = require("../../../hooks/features/columnMenu/useGridColumnMenuSlots");
13
13
  var _GridColumnMenuContainer = require("./GridColumnMenuContainer");
14
14
  var _GridColumnMenuColumnsItem = require("./menuItems/GridColumnMenuColumnsItem");
15
15
  var _GridColumnMenuFilterItem = require("./menuItems/GridColumnMenuFilterItem");
16
16
  var _GridColumnMenuSortItem = require("./menuItems/GridColumnMenuSortItem");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
18
- const _excluded = ["defaultComponents", "defaultComponentsProps", "components", "componentsProps"];
18
+ const _excluded = ["defaultSlots", "defaultSlotProps", "slots", "slotProps"];
19
19
  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); }
20
20
  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; }
21
- const GRID_COLUMN_MENU_COMPONENTS = {
22
- ColumnMenuSortItem: _GridColumnMenuSortItem.GridColumnMenuSortItem,
23
- ColumnMenuFilterItem: _GridColumnMenuFilterItem.GridColumnMenuFilterItem,
24
- ColumnMenuColumnsItem: _GridColumnMenuColumnsItem.GridColumnMenuColumnsItem
21
+ const GRID_COLUMN_MENU_SLOTS = {
22
+ columnMenuSortItem: _GridColumnMenuSortItem.GridColumnMenuSortItem,
23
+ columnMenuFilterItem: _GridColumnMenuFilterItem.GridColumnMenuFilterItem,
24
+ columnMenuColumnsItem: _GridColumnMenuColumnsItem.GridColumnMenuColumnsItem
25
25
  };
26
- exports.GRID_COLUMN_MENU_COMPONENTS = GRID_COLUMN_MENU_COMPONENTS;
27
- const GRID_COLUMN_MENU_COMPONENTS_PROPS = {
26
+ exports.GRID_COLUMN_MENU_SLOTS = GRID_COLUMN_MENU_SLOTS;
27
+ const GRID_COLUMN_MENU_SLOT_PROPS = {
28
28
  columnMenuSortItem: {
29
29
  displayOrder: 10
30
30
  },
@@ -35,33 +35,33 @@ const GRID_COLUMN_MENU_COMPONENTS_PROPS = {
35
35
  displayOrder: 30
36
36
  }
37
37
  };
38
- exports.GRID_COLUMN_MENU_COMPONENTS_PROPS = GRID_COLUMN_MENU_COMPONENTS_PROPS;
38
+ exports.GRID_COLUMN_MENU_SLOT_PROPS = GRID_COLUMN_MENU_SLOT_PROPS;
39
39
  const GridGenericColumnMenu = /*#__PURE__*/React.forwardRef(function GridGenericColumnMenu(props, ref) {
40
40
  const {
41
- defaultComponents,
42
- defaultComponentsProps,
43
- components,
44
- componentsProps
41
+ defaultSlots,
42
+ defaultSlotProps,
43
+ slots,
44
+ slotProps
45
45
  } = props,
46
46
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
47
- const orderedComponents = (0, _useGridColumnMenuComponents.useGridColumnMenuComponents)((0, _extends2.default)({}, other, {
48
- defaultComponents,
49
- defaultComponentsProps,
50
- components,
51
- componentsProps
47
+ const orderedSlots = (0, _useGridColumnMenuSlots.useGridColumnMenuSlots)((0, _extends2.default)({}, other, {
48
+ defaultSlots,
49
+ defaultSlotProps,
50
+ slots,
51
+ slotProps
52
52
  }));
53
53
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnMenuContainer.GridColumnMenuContainer, (0, _extends2.default)({
54
54
  ref: ref
55
55
  }, other, {
56
- children: orderedComponents.map(([Component, componentProps], index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, (0, _extends2.default)({}, componentProps), index))
56
+ children: orderedSlots.map(([Component, otherProps], index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, (0, _extends2.default)({}, otherProps), index))
57
57
  }));
58
58
  });
59
59
  exports.GridGenericColumnMenu = GridGenericColumnMenu;
60
60
  const GridColumnMenu = /*#__PURE__*/React.forwardRef(function GridColumnMenu(props, ref) {
61
61
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridGenericColumnMenu, (0, _extends2.default)({}, props, {
62
62
  ref: ref,
63
- defaultComponents: GRID_COLUMN_MENU_COMPONENTS,
64
- defaultComponentsProps: GRID_COLUMN_MENU_COMPONENTS_PROPS
63
+ defaultSlots: GRID_COLUMN_MENU_SLOTS,
64
+ defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS
65
65
  }));
66
66
  });
67
67
  exports.GridColumnMenu = GridColumnMenu;
@@ -71,19 +71,19 @@ process.env.NODE_ENV !== "production" ? GridColumnMenu.propTypes = {
71
71
  // | To update them edit the TypeScript types and run "yarn proptypes" |
72
72
  // ----------------------------------------------------------------------
73
73
  colDef: _propTypes.default.object.isRequired,
74
- /**
75
- * `components` could be used to add new and (or) override default column menu items
76
- * If you register a nee component you must pass it's `displayOrder` in `componentsProps`
77
- * or it will be placed in the end of the list
78
- */
79
- components: _propTypes.default.object,
74
+ hideMenu: _propTypes.default.func.isRequired,
75
+ id: _propTypes.default.string,
76
+ labelledby: _propTypes.default.string,
77
+ open: _propTypes.default.bool.isRequired,
80
78
  /**
81
79
  * Could be used to pass new props or override props specific to a column menu component
82
80
  * e.g. `displayOrder`
83
81
  */
84
- componentsProps: _propTypes.default.object,
85
- hideMenu: _propTypes.default.func.isRequired,
86
- id: _propTypes.default.string,
87
- labelledby: _propTypes.default.string,
88
- open: _propTypes.default.bool.isRequired
82
+ slotProps: _propTypes.default.object,
83
+ /**
84
+ * `slots` could be used to add new and (or) override default column menu items
85
+ * If you register a nee component you must pass it's `displayOrder` in `slotProps`
86
+ * or it will be placed in the end of the list
87
+ */
88
+ slots: _propTypes.default.object
89
89
  } : void 0;
@@ -25,7 +25,7 @@ var _envConstants = require("../../constants/envConstants");
25
25
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
26
26
  var _gridClasses = require("../../constants/gridClasses");
27
27
  var _jsxRuntime = require("react/jsx-runtime");
28
- const _excluded = ["sort", "searchPredicate", "autoFocusSearchField", "disableHideAllButton", "disableShowAllButton"];
28
+ const _excluded = ["sort", "searchPredicate", "autoFocusSearchField", "disableHideAllButton", "disableShowAllButton", "getTogglableColumns"];
29
29
  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); }
30
30
  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; }
31
31
  const useUtilityClasses = ownerState => {
@@ -79,7 +79,8 @@ function GridColumnsPanel(props) {
79
79
  searchPredicate = defaultSearchPredicate,
80
80
  autoFocusSearchField = true,
81
81
  disableHideAllButton = false,
82
- disableShowAllButton = false
82
+ disableShowAllButton = false,
83
+ getTogglableColumns
83
84
  } = props,
84
85
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
85
86
  const sortedColumns = React.useMemo(() => {
@@ -117,12 +118,15 @@ function GridColumnsPanel(props) {
117
118
  setSearchValue(event.target.value);
118
119
  }, []);
119
120
  const currentColumns = React.useMemo(() => {
121
+ const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
122
+ const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
123
+ field
124
+ }) => togglableColumns.includes(field)) : sortedColumns;
120
125
  if (!searchValue) {
121
- return sortedColumns;
126
+ return togglableSortedColumns;
122
127
  }
123
- const searchValueToCheck = searchValue.toLowerCase();
124
- return sortedColumns.filter(column => searchPredicate(column, searchValueToCheck));
125
- }, [sortedColumns, searchValue, searchPredicate]);
128
+ return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
129
+ }, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
126
130
  const firstSwitchRef = React.useRef(null);
127
131
  React.useEffect(() => {
128
132
  if (autoFocusSearchField) {
@@ -200,6 +204,14 @@ process.env.NODE_ENV !== "production" ? GridColumnsPanel.propTypes = {
200
204
  autoFocusSearchField: _propTypes.default.bool,
201
205
  disableHideAllButton: _propTypes.default.bool,
202
206
  disableShowAllButton: _propTypes.default.bool,
207
+ /**
208
+ * Returns the list of togglable columns.
209
+ * If used, only those columns will be displayed in the panel
210
+ * which are passed as the return value of the function.
211
+ * @param {GridColDef[]} columns The `ColDef` list of all columns.
212
+ * @returns {GridColDef['field'][]} The list of togglable columns' field names.
213
+ */
214
+ getTogglableColumns: _propTypes.default.func,
203
215
  searchPredicate: _propTypes.default.func,
204
216
  slotProps: _propTypes.default.object,
205
217
  sort: _propTypes.default.oneOf(['asc', 'desc'])
@@ -151,7 +151,7 @@ const GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(p
151
151
  logicOperators: logicOperators,
152
152
  columnsSort: columnsSort
153
153
  }, filterFormProps), item.id == null ? index : item.id))
154
- }), !rootProps.disableMultipleColumnsFiltering && !disableAddFilterButton && !disableRemoveAllButton ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelFooter.GridPanelFooter, {
154
+ }), !rootProps.disableMultipleColumnsFiltering && !(disableAddFilterButton && disableRemoveAllButton) ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelFooter.GridPanelFooter, {
155
155
  children: [!disableAddFilterButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
156
156
  onClick: addNewFilter,
157
157
  startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.filterPanelAddIcon, {})
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "GRID_COLUMN_MENU_COMPONENTS", {
6
+ Object.defineProperty(exports, "GRID_COLUMN_MENU_SLOTS", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _GridColumnMenu.GRID_COLUMN_MENU_COMPONENTS;
9
+ return _GridColumnMenu.GRID_COLUMN_MENU_SLOTS;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "GRID_COLUMN_MENU_COMPONENTS_PROPS", {
12
+ Object.defineProperty(exports, "GRID_COLUMN_MENU_SLOT_PROPS", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _GridColumnMenu.GRID_COLUMN_MENU_COMPONENTS_PROPS;
15
+ return _GridColumnMenu.GRID_COLUMN_MENU_SLOT_PROPS;
16
16
  }
17
17
  });
18
18
  Object.defineProperty(exports, "GridColumnMenu", {
@@ -8,7 +8,6 @@ var React = _interopRequireWildcard(require("react"));
8
8
  var _useGridApiMethod = require("../utils/useGridApiMethod");
9
9
  var _useGridApiEventHandler = require("../utils/useGridApiEventHandler");
10
10
  var _EventManager = require("../../utils/EventManager");
11
- var _createSelector = require("../../utils/createSelector");
12
11
  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
12
  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
13
  const isSyntheticEvent = event => {
@@ -46,7 +45,9 @@ function useGridApiInitialization(inputApiRef, props) {
46
45
  if (!publicApiRef.current) {
47
46
  publicApiRef.current = {
48
47
  state: {},
49
- instanceId: globalId
48
+ instanceId: {
49
+ id: globalId
50
+ }
50
51
  };
51
52
  globalId += 1;
52
53
  }
@@ -84,7 +85,6 @@ function useGridApiInitialization(inputApiRef, props) {
84
85
  React.useEffect(() => {
85
86
  const api = privateApiRef.current;
86
87
  return () => {
87
- (0, _createSelector.unstable_resetCreateSelectorCache)(api.instanceId);
88
88
  api.publishEvent('unmount');
89
89
  };
90
90
  }, [privateApiRef]);
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useGridColumnMenuComponents = void 0;
7
+ exports.useGridColumnMenuSlots = void 0;
8
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
@@ -13,44 +13,39 @@ var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
13
13
  const _excluded = ["displayOrder"];
14
14
  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); }
15
15
  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; }
16
- const camelize = pascalCase => {
17
- const camelCase = pascalCase.split('');
18
- camelCase[0] = camelCase[0].toLowerCase();
19
- return camelCase.join('');
20
- };
21
- const useGridColumnMenuComponents = props => {
16
+ const useGridColumnMenuSlots = props => {
22
17
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
23
18
  const {
24
- defaultComponents,
25
- defaultComponentsProps,
26
- components = {},
27
- componentsProps = {},
19
+ defaultSlots,
20
+ defaultSlotProps,
21
+ slots = {},
22
+ slotProps = {},
28
23
  hideMenu,
29
24
  colDef,
30
25
  addDividers = true
31
26
  } = props;
32
- const processedComponents = React.useMemo(() => (0, _extends2.default)({}, defaultComponents, components), [defaultComponents, components]);
33
- const processedComponentsProps = React.useMemo(() => {
34
- if (!componentsProps || Object.keys(componentsProps).length === 0) {
35
- return defaultComponentsProps;
27
+ const processedComponents = React.useMemo(() => (0, _extends2.default)({}, defaultSlots, slots), [defaultSlots, slots]);
28
+ const processedSlotProps = React.useMemo(() => {
29
+ if (!slotProps || Object.keys(slotProps).length === 0) {
30
+ return defaultSlotProps;
36
31
  }
37
- const mergedProps = (0, _extends2.default)({}, componentsProps);
38
- Object.entries(defaultComponentsProps).forEach(([key, currentComponentProps]) => {
39
- mergedProps[key] = (0, _extends2.default)({}, currentComponentProps, componentsProps[key] || {});
32
+ const mergedProps = (0, _extends2.default)({}, slotProps);
33
+ Object.entries(defaultSlotProps).forEach(([key, currentSlotProps]) => {
34
+ mergedProps[key] = (0, _extends2.default)({}, currentSlotProps, slotProps[key] || {});
40
35
  });
41
36
  return mergedProps;
42
- }, [defaultComponentsProps, componentsProps]);
37
+ }, [defaultSlotProps, slotProps]);
43
38
  const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
44
39
  const userItems = React.useMemo(() => {
45
- const defaultComponentKeys = Object.keys(defaultComponents);
46
- return Object.keys(components).filter(key => !defaultComponentKeys.includes(key));
47
- }, [components, defaultComponents]);
40
+ const defaultComponentKeys = Object.keys(defaultSlots);
41
+ return Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
42
+ }, [slots, defaultSlots]);
48
43
  return React.useMemo(() => {
49
44
  const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
50
45
  const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
51
46
  const sorted = cleansedItems.sort((a, b) => {
52
- const leftItemProps = processedComponentsProps[camelize(a)];
53
- const rightItemProps = processedComponentsProps[camelize(b)];
47
+ const leftItemProps = processedSlotProps[a];
48
+ const rightItemProps = processedSlotProps[b];
54
49
  const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
55
50
  const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
56
51
  return leftDisplayOrder - rightDisplayOrder;
@@ -60,13 +55,13 @@ const useGridColumnMenuComponents = props => {
60
55
  colDef,
61
56
  onClick: hideMenu
62
57
  };
63
- const processedComponentProps = processedComponentsProps[camelize(key)];
58
+ const processedComponentProps = processedSlotProps[key];
64
59
  if (processedComponentProps) {
65
60
  const customProps = (0, _objectWithoutPropertiesLoose2.default)(processedComponentProps, _excluded);
66
61
  itemProps = (0, _extends2.default)({}, itemProps, customProps);
67
62
  }
68
63
  return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [_Divider.default, {}]] : [...acc, [processedComponents[key], itemProps]];
69
64
  }, []);
70
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedComponentsProps, userItems]);
65
+ }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
71
66
  };
72
- exports.useGridColumnMenuComponents = useGridColumnMenuComponents;
67
+ exports.useGridColumnMenuSlots = useGridColumnMenuSlots;
@@ -237,7 +237,7 @@ function useGridColumns(apiRef, props) {
237
237
  if (props.disableColumnSelector) {
238
238
  return columnMenuItems;
239
239
  }
240
- return [...columnMenuItems, 'ColumnMenuColumnsItem'];
240
+ return [...columnMenuItems, 'columnMenuColumnsItem'];
241
241
  }, [props.disableColumnSelector]);
242
242
  (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'columnMenu', addColumnMenuItems);
243
243
  (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
@@ -251,13 +251,17 @@ const useGridCellEditing = (apiRef, props) => {
251
251
  initialValue
252
252
  } = params;
253
253
  let newValue = apiRef.current.getCellValue(id, field);
254
+ // eslint-disable-next-line @typescript-eslint/naming-convention
255
+ let unstable_updateValueOnRender = false;
254
256
  if (deleteValue || initialValue) {
255
257
  newValue = deleteValue ? '' : initialValue;
258
+ unstable_updateValueOnRender = true;
256
259
  }
257
260
  const newProps = {
258
261
  value: newValue,
259
262
  error: false,
260
- isProcessingProps: false
263
+ isProcessingProps: false,
264
+ unstable_updateValueOnRender
261
265
  };
262
266
  updateOrDeleteFieldState(id, field, newProps);
263
267
  apiRef.current.setCellFocus(id, field);
@@ -120,9 +120,7 @@ const useGridEditing = (apiRef, props) => {
120
120
  }, [apiRef, props.editMode]);
121
121
  const getEditCellMeta = React.useCallback((id, field) => {
122
122
  const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef.current.state);
123
- return {
124
- changeReason: editingState[id][field].changeReason
125
- };
123
+ return editingState[id][field];
126
124
  }, [apiRef]);
127
125
  const editingSharedApi = {
128
126
  isCellEditable,
@@ -319,13 +319,17 @@ const useGridRowEditing = (apiRef, props) => {
319
319
  return acc;
320
320
  }
321
321
  let newValue = apiRef.current.getCellValue(id, field);
322
+ // eslint-disable-next-line @typescript-eslint/naming-convention
323
+ let unstable_updateValueOnRender = false;
322
324
  if (fieldToFocus === field && (deleteValue || initialValue)) {
323
325
  newValue = deleteValue ? '' : initialValue;
326
+ unstable_updateValueOnRender = true;
324
327
  }
325
328
  acc[field] = {
326
329
  value: newValue,
327
330
  error: false,
328
- isProcessingProps: false
331
+ isProcessingProps: false,
332
+ unstable_updateValueOnRender
329
333
  };
330
334
  return acc;
331
335
  }, {});
@@ -11,4 +11,9 @@ const getDefaultGridFilterModel = () => ({
11
11
  quickFilterValues: [],
12
12
  quickFilterLogicOperator: _gridFilterItem.GridLogicOperator.And
13
13
  });
14
+
15
+ /**
16
+ * @param {GridRowId} rowId The id of the row we want to filter.
17
+ * @param {(filterItem: GridFilterItem) => boolean} shouldApplyItem An optional callback to allow the filtering engine to only apply some items.
18
+ */
14
19
  exports.getDefaultGridFilterModel = getDefaultGridFilterModel;
@@ -67,7 +67,7 @@ const useGridFilter = (apiRef, props) => {
67
67
  if (colDef == null || colDef.filterable === false || props.disableColumnFilter) {
68
68
  return columnMenuItems;
69
69
  }
70
- return [...columnMenuItems, 'ColumnMenuFilterItem'];
70
+ return [...columnMenuItems, 'columnMenuFilterItem'];
71
71
  }, [props.disableColumnFilter]);
72
72
 
73
73
  /**
@@ -121,6 +121,11 @@ const useGridFilter = (apiRef, props) => {
121
121
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
122
122
  const filterItemsWithValue = filterModel.items.filter(item => {
123
123
  if (item.value !== undefined) {
124
+ // Some filters like `isAnyOf` support array as `item.value`.
125
+ // If array is empty, we want to remove it from the filter model.
126
+ if (Array.isArray(item.value) && item.value.length === 0) {
127
+ return false;
128
+ }
124
129
  return true;
125
130
  }
126
131
  const column = apiRef.current.getColumn(item.field);
@@ -80,7 +80,7 @@ const useGridSorting = (apiRef, props) => {
80
80
  }
81
81
  const sortingOrder = colDef.sortingOrder || props.sortingOrder;
82
82
  if (sortingOrder.some(item => !!item)) {
83
- return [...columnMenuItems, 'ColumnMenuSortItem'];
83
+ return [...columnMenuItems, 'columnMenuSortItem'];
84
84
  }
85
85
  return columnMenuItems;
86
86
  }, [props.sortingOrder]);