@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
@@ -6,54 +6,49 @@ var _excluded = ["displayOrder"];
6
6
  import * as React from 'react';
7
7
  import Divider from '@mui/material/Divider';
8
8
  import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';
9
- var camelize = function camelize(pascalCase) {
10
- var camelCase = pascalCase.split('');
11
- camelCase[0] = camelCase[0].toLowerCase();
12
- return camelCase.join('');
13
- };
14
- var useGridColumnMenuComponents = function useGridColumnMenuComponents(props) {
9
+ var useGridColumnMenuSlots = function useGridColumnMenuSlots(props) {
15
10
  var apiRef = useGridPrivateApiContext();
16
- var defaultComponents = props.defaultComponents,
17
- defaultComponentsProps = props.defaultComponentsProps,
18
- _props$components = props.components,
19
- components = _props$components === void 0 ? {} : _props$components,
20
- _props$componentsProp = props.componentsProps,
21
- componentsProps = _props$componentsProp === void 0 ? {} : _props$componentsProp,
11
+ var defaultSlots = props.defaultSlots,
12
+ defaultSlotProps = props.defaultSlotProps,
13
+ _props$slots = props.slots,
14
+ slots = _props$slots === void 0 ? {} : _props$slots,
15
+ _props$slotProps = props.slotProps,
16
+ slotProps = _props$slotProps === void 0 ? {} : _props$slotProps,
22
17
  hideMenu = props.hideMenu,
23
18
  colDef = props.colDef,
24
19
  _props$addDividers = props.addDividers,
25
20
  addDividers = _props$addDividers === void 0 ? true : _props$addDividers;
26
21
  var processedComponents = React.useMemo(function () {
27
- return _extends({}, defaultComponents, components);
28
- }, [defaultComponents, components]);
29
- var processedComponentsProps = React.useMemo(function () {
30
- if (!componentsProps || Object.keys(componentsProps).length === 0) {
31
- return defaultComponentsProps;
22
+ return _extends({}, defaultSlots, slots);
23
+ }, [defaultSlots, slots]);
24
+ var processedSlotProps = React.useMemo(function () {
25
+ if (!slotProps || Object.keys(slotProps).length === 0) {
26
+ return defaultSlotProps;
32
27
  }
33
- var mergedProps = _extends({}, componentsProps);
34
- Object.entries(defaultComponentsProps).forEach(function (_ref) {
28
+ var mergedProps = _extends({}, slotProps);
29
+ Object.entries(defaultSlotProps).forEach(function (_ref) {
35
30
  var _ref2 = _slicedToArray(_ref, 2),
36
31
  key = _ref2[0],
37
- currentComponentProps = _ref2[1];
38
- mergedProps[key] = _extends({}, currentComponentProps, componentsProps[key] || {});
32
+ currentSlotProps = _ref2[1];
33
+ mergedProps[key] = _extends({}, currentSlotProps, slotProps[key] || {});
39
34
  });
40
35
  return mergedProps;
41
- }, [defaultComponentsProps, componentsProps]);
36
+ }, [defaultSlotProps, slotProps]);
42
37
  var defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
43
38
  var userItems = React.useMemo(function () {
44
- var defaultComponentKeys = Object.keys(defaultComponents);
45
- return Object.keys(components).filter(function (key) {
39
+ var defaultComponentKeys = Object.keys(defaultSlots);
40
+ return Object.keys(slots).filter(function (key) {
46
41
  return !defaultComponentKeys.includes(key);
47
42
  });
48
- }, [components, defaultComponents]);
43
+ }, [slots, defaultSlots]);
49
44
  return React.useMemo(function () {
50
45
  var uniqueItems = Array.from(new Set([].concat(_toConsumableArray(defaultItems), _toConsumableArray(userItems))));
51
46
  var cleansedItems = uniqueItems.filter(function (key) {
52
47
  return processedComponents[key] != null;
53
48
  });
54
49
  var sorted = cleansedItems.sort(function (a, b) {
55
- var leftItemProps = processedComponentsProps[camelize(a)];
56
- var rightItemProps = processedComponentsProps[camelize(b)];
50
+ var leftItemProps = processedSlotProps[a];
51
+ var rightItemProps = processedSlotProps[b];
57
52
  var leftDisplayOrder = Number.isFinite(leftItemProps == null ? void 0 : leftItemProps.displayOrder) ? leftItemProps.displayOrder : 100;
58
53
  var rightDisplayOrder = Number.isFinite(rightItemProps == null ? void 0 : rightItemProps.displayOrder) ? rightItemProps.displayOrder : 100;
59
54
  return leftDisplayOrder - rightDisplayOrder;
@@ -63,7 +58,7 @@ var useGridColumnMenuComponents = function useGridColumnMenuComponents(props) {
63
58
  colDef: colDef,
64
59
  onClick: hideMenu
65
60
  };
66
- var processedComponentProps = processedComponentsProps[camelize(key)];
61
+ var processedComponentProps = processedSlotProps[key];
67
62
  if (processedComponentProps) {
68
63
  var displayOrder = processedComponentProps.displayOrder,
69
64
  customProps = _objectWithoutProperties(processedComponentProps, _excluded);
@@ -71,6 +66,6 @@ var useGridColumnMenuComponents = function useGridColumnMenuComponents(props) {
71
66
  }
72
67
  return addDividers && index !== sorted.length - 1 ? [].concat(_toConsumableArray(acc), [[processedComponents[key], itemProps], [Divider, {}]]) : [].concat(_toConsumableArray(acc), [[processedComponents[key], itemProps]]);
73
68
  }, []);
74
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedComponentsProps, userItems]);
69
+ }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
75
70
  };
76
- export { useGridColumnMenuComponents };
71
+ export { useGridColumnMenuSlots };
@@ -183,7 +183,7 @@ export var applyInitialState = function applyInitialState(columnsState, initialS
183
183
  return !orderedFieldsLookup[field];
184
184
  })));
185
185
  var newColumnLookup = _extends({}, columnsState.lookup);
186
- var _loop = function _loop(_i) {
186
+ var _loop = function _loop() {
187
187
  var field = columnsWithUpdatedDimensions[_i];
188
188
  var newColDef = _extends({}, newColumnLookup[field], {
189
189
  hasBeenResized: true
@@ -197,7 +197,7 @@ export var applyInitialState = function applyInitialState(columnsState, initialS
197
197
  newColumnLookup[field] = newColDef;
198
198
  };
199
199
  for (var _i = 0; _i < columnsWithUpdatedDimensions.length; _i += 1) {
200
- _loop(_i);
200
+ _loop();
201
201
  }
202
202
  var newColumnsState = _extends({}, columnsState, {
203
203
  orderedFields: newOrderedFields,
@@ -245,7 +245,7 @@ export function useGridColumns(apiRef, props) {
245
245
  if (props.disableColumnSelector) {
246
246
  return columnMenuItems;
247
247
  }
248
- return [].concat(_toConsumableArray(columnMenuItems), ['ColumnMenuColumnsItem']);
248
+ return [].concat(_toConsumableArray(columnMenuItems), ['columnMenuColumnsItem']);
249
249
  }, [props.disableColumnSelector]);
250
250
  useGridRegisterPipeProcessor(apiRef, 'columnMenu', addColumnMenuItems);
251
251
  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
@@ -238,13 +238,17 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
238
238
  deleteValue = params.deleteValue,
239
239
  initialValue = params.initialValue;
240
240
  var newValue = apiRef.current.getCellValue(id, field);
241
+ // eslint-disable-next-line @typescript-eslint/naming-convention
242
+ var unstable_updateValueOnRender = false;
241
243
  if (deleteValue || initialValue) {
242
244
  newValue = deleteValue ? '' : initialValue;
245
+ unstable_updateValueOnRender = true;
243
246
  }
244
247
  var newProps = {
245
248
  value: newValue,
246
249
  error: false,
247
- isProcessingProps: false
250
+ isProcessingProps: false,
251
+ unstable_updateValueOnRender: unstable_updateValueOnRender
248
252
  };
249
253
  updateOrDeleteFieldState(id, field, newProps);
250
254
  apiRef.current.setCellFocus(id, field);
@@ -262,72 +266,70 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
262
266
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(params) {
263
267
  var id, field, ignoreModifications, _params$cellToFocusAf, cellToFocusAfter, finishCellEditMode, editingState, _editingState$id$fiel, error, isProcessingProps, rowUpdate, handleError, row;
264
268
  return _regeneratorRuntime.wrap(function _callee$(_context) {
265
- while (1) {
266
- switch (_context.prev = _context.next) {
267
- case 0:
268
- id = params.id, field = params.field, ignoreModifications = params.ignoreModifications, _params$cellToFocusAf = params.cellToFocusAfter, cellToFocusAfter = _params$cellToFocusAf === void 0 ? 'none' : _params$cellToFocusAf;
269
- throwIfNotInMode(id, field, GridCellModes.Edit);
270
- apiRef.current.runPendingEditCellValueMutation(id, field);
271
- finishCellEditMode = function finishCellEditMode() {
272
- updateOrDeleteFieldState(id, field, null);
273
- updateFieldInCellModesModel(id, field, null);
274
- if (cellToFocusAfter !== 'none') {
275
- apiRef.current.moveFocusToRelativeCell(id, field, cellToFocusAfter);
269
+ while (1) switch (_context.prev = _context.next) {
270
+ case 0:
271
+ id = params.id, field = params.field, ignoreModifications = params.ignoreModifications, _params$cellToFocusAf = params.cellToFocusAfter, cellToFocusAfter = _params$cellToFocusAf === void 0 ? 'none' : _params$cellToFocusAf;
272
+ throwIfNotInMode(id, field, GridCellModes.Edit);
273
+ apiRef.current.runPendingEditCellValueMutation(id, field);
274
+ finishCellEditMode = function finishCellEditMode() {
275
+ updateOrDeleteFieldState(id, field, null);
276
+ updateFieldInCellModesModel(id, field, null);
277
+ if (cellToFocusAfter !== 'none') {
278
+ apiRef.current.moveFocusToRelativeCell(id, field, cellToFocusAfter);
279
+ }
280
+ };
281
+ if (!ignoreModifications) {
282
+ _context.next = 7;
283
+ break;
284
+ }
285
+ finishCellEditMode();
286
+ return _context.abrupt("return");
287
+ case 7:
288
+ editingState = gridEditRowsStateSelector(apiRef.current.state);
289
+ _editingState$id$fiel = editingState[id][field], error = _editingState$id$fiel.error, isProcessingProps = _editingState$id$fiel.isProcessingProps;
290
+ if (!(error || isProcessingProps)) {
291
+ _context.next = 13;
292
+ break;
293
+ }
294
+ // Attempt to change cell mode to "view" was not successful
295
+ // Update previous mode to allow another attempt
296
+ prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
297
+ // Revert the mode in the cellModesModel prop back to "edit"
298
+ updateFieldInCellModesModel(id, field, {
299
+ mode: GridCellModes.Edit
300
+ });
301
+ return _context.abrupt("return");
302
+ case 13:
303
+ rowUpdate = apiRef.current.getRowWithUpdatedValuesFromCellEditing(id, field);
304
+ if (processRowUpdate) {
305
+ handleError = function handleError(errorThrown) {
306
+ prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
307
+ // Revert the mode in the cellModesModel prop back to "edit"
308
+ updateFieldInCellModesModel(id, field, {
309
+ mode: GridCellModes.Edit
310
+ });
311
+ if (onProcessRowUpdateError) {
312
+ onProcessRowUpdateError(errorThrown);
313
+ } else {
314
+ missingOnProcessRowUpdateErrorWarning();
276
315
  }
277
316
  };
278
- if (!ignoreModifications) {
279
- _context.next = 7;
280
- break;
317
+ try {
318
+ row = apiRef.current.getRow(id);
319
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
320
+ apiRef.current.updateRows([finalRowUpdate]);
321
+ finishCellEditMode();
322
+ }).catch(handleError);
323
+ } catch (errorThrown) {
324
+ handleError(errorThrown);
281
325
  }
326
+ } else {
327
+ apiRef.current.updateRows([rowUpdate]);
282
328
  finishCellEditMode();
283
- return _context.abrupt("return");
284
- case 7:
285
- editingState = gridEditRowsStateSelector(apiRef.current.state);
286
- _editingState$id$fiel = editingState[id][field], error = _editingState$id$fiel.error, isProcessingProps = _editingState$id$fiel.isProcessingProps;
287
- if (!(error || isProcessingProps)) {
288
- _context.next = 13;
289
- break;
290
- }
291
- // Attempt to change cell mode to "view" was not successful
292
- // Update previous mode to allow another attempt
293
- prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
294
- // Revert the mode in the cellModesModel prop back to "edit"
295
- updateFieldInCellModesModel(id, field, {
296
- mode: GridCellModes.Edit
297
- });
298
- return _context.abrupt("return");
299
- case 13:
300
- rowUpdate = apiRef.current.getRowWithUpdatedValuesFromCellEditing(id, field);
301
- if (processRowUpdate) {
302
- handleError = function handleError(errorThrown) {
303
- prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
304
- // Revert the mode in the cellModesModel prop back to "edit"
305
- updateFieldInCellModesModel(id, field, {
306
- mode: GridCellModes.Edit
307
- });
308
- if (onProcessRowUpdateError) {
309
- onProcessRowUpdateError(errorThrown);
310
- } else {
311
- missingOnProcessRowUpdateErrorWarning();
312
- }
313
- };
314
- try {
315
- row = apiRef.current.getRow(id);
316
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
317
- apiRef.current.updateRows([finalRowUpdate]);
318
- finishCellEditMode();
319
- }).catch(handleError);
320
- } catch (errorThrown) {
321
- handleError(errorThrown);
322
- }
323
- } else {
324
- apiRef.current.updateRows([rowUpdate]);
325
- finishCellEditMode();
326
- }
327
- case 15:
328
- case "end":
329
- return _context.stop();
330
- }
329
+ }
330
+ case 15:
331
+ case "end":
332
+ return _context.stop();
331
333
  }
332
334
  }, _callee);
333
335
  }));
@@ -340,63 +342,61 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
340
342
  var _editingState$id, _editingState$id$fiel2;
341
343
  var id, field, value, debounceMs, skipValueParser, column, row, parsedValue, editingState, newProps, hasChanged;
342
344
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
343
- while (1) {
344
- switch (_context2.prev = _context2.next) {
345
- case 0:
346
- id = params.id, field = params.field, value = params.value, debounceMs = params.debounceMs, skipValueParser = params.unstable_skipValueParser;
347
- throwIfNotEditable(id, field);
348
- throwIfNotInMode(id, field, GridCellModes.Edit);
349
- column = apiRef.current.getColumn(field);
350
- row = apiRef.current.getRow(id);
351
- parsedValue = value;
352
- if (column.valueParser && !skipValueParser) {
353
- parsedValue = column.valueParser(value, apiRef.current.getCellParams(id, field));
354
- }
355
- editingState = gridEditRowsStateSelector(apiRef.current.state);
356
- newProps = _extends({}, editingState[id][field], {
357
- value: parsedValue,
358
- changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'
359
- });
360
- if (!column.preProcessEditCellProps) {
361
- _context2.next = 16;
362
- break;
363
- }
364
- hasChanged = value !== editingState[id][field].value;
365
- newProps = _extends({}, newProps, {
366
- isProcessingProps: true
367
- });
368
- updateOrDeleteFieldState(id, field, newProps);
369
- _context2.next = 15;
370
- return Promise.resolve(column.preProcessEditCellProps({
371
- id: id,
372
- row: row,
373
- props: newProps,
374
- hasChanged: hasChanged
375
- }));
376
- case 15:
377
- newProps = _context2.sent;
378
- case 16:
379
- if (!(apiRef.current.getCellMode(id, field) === GridCellModes.View)) {
380
- _context2.next = 18;
381
- break;
382
- }
383
- return _context2.abrupt("return", false);
384
- case 18:
385
- editingState = gridEditRowsStateSelector(apiRef.current.state);
386
- newProps = _extends({}, newProps, {
387
- isProcessingProps: false
388
- });
389
- // We don't update the value with the one coming from the props pre-processing
390
- // because when the promise resolves it may be already outdated. The only
391
- // exception to this rule is when there's no pre-processing.
392
- newProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;
393
- updateOrDeleteFieldState(id, field, newProps);
394
- editingState = gridEditRowsStateSelector(apiRef.current.state);
395
- return _context2.abrupt("return", !((_editingState$id = editingState[id]) != null && (_editingState$id$fiel2 = _editingState$id[field]) != null && _editingState$id$fiel2.error));
396
- case 24:
397
- case "end":
398
- return _context2.stop();
399
- }
345
+ while (1) switch (_context2.prev = _context2.next) {
346
+ case 0:
347
+ id = params.id, field = params.field, value = params.value, debounceMs = params.debounceMs, skipValueParser = params.unstable_skipValueParser;
348
+ throwIfNotEditable(id, field);
349
+ throwIfNotInMode(id, field, GridCellModes.Edit);
350
+ column = apiRef.current.getColumn(field);
351
+ row = apiRef.current.getRow(id);
352
+ parsedValue = value;
353
+ if (column.valueParser && !skipValueParser) {
354
+ parsedValue = column.valueParser(value, apiRef.current.getCellParams(id, field));
355
+ }
356
+ editingState = gridEditRowsStateSelector(apiRef.current.state);
357
+ newProps = _extends({}, editingState[id][field], {
358
+ value: parsedValue,
359
+ changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'
360
+ });
361
+ if (!column.preProcessEditCellProps) {
362
+ _context2.next = 16;
363
+ break;
364
+ }
365
+ hasChanged = value !== editingState[id][field].value;
366
+ newProps = _extends({}, newProps, {
367
+ isProcessingProps: true
368
+ });
369
+ updateOrDeleteFieldState(id, field, newProps);
370
+ _context2.next = 15;
371
+ return Promise.resolve(column.preProcessEditCellProps({
372
+ id: id,
373
+ row: row,
374
+ props: newProps,
375
+ hasChanged: hasChanged
376
+ }));
377
+ case 15:
378
+ newProps = _context2.sent;
379
+ case 16:
380
+ if (!(apiRef.current.getCellMode(id, field) === GridCellModes.View)) {
381
+ _context2.next = 18;
382
+ break;
383
+ }
384
+ return _context2.abrupt("return", false);
385
+ case 18:
386
+ editingState = gridEditRowsStateSelector(apiRef.current.state);
387
+ newProps = _extends({}, newProps, {
388
+ isProcessingProps: false
389
+ });
390
+ // We don't update the value with the one coming from the props pre-processing
391
+ // because when the promise resolves it may be already outdated. The only
392
+ // exception to this rule is when there's no pre-processing.
393
+ newProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;
394
+ updateOrDeleteFieldState(id, field, newProps);
395
+ editingState = gridEditRowsStateSelector(apiRef.current.state);
396
+ return _context2.abrupt("return", !((_editingState$id = editingState[id]) != null && (_editingState$id$fiel2 = _editingState$id[field]) != null && _editingState$id$fiel2.error));
397
+ case 24:
398
+ case "end":
399
+ return _context2.stop();
400
400
  }
401
401
  }, _callee2);
402
402
  }));
@@ -105,24 +105,22 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
105
105
  maybeDebounce(id, field, debounceMs, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
106
106
  var setEditCellValueToCall, result;
107
107
  return _regeneratorRuntime.wrap(function _callee$(_context) {
108
- while (1) {
109
- switch (_context.prev = _context.next) {
110
- case 0:
111
- setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.setRowEditingEditCellValue : apiRef.current.setCellEditingEditCellValue; // Check if the cell is in edit mode
112
- // By the time this callback runs the user may have cancelled the editing
113
- if (!(apiRef.current.getCellMode(id, field) === GridCellModes.Edit)) {
114
- _context.next = 6;
115
- break;
116
- }
117
- _context.next = 4;
118
- return setEditCellValueToCall(params);
119
- case 4:
120
- result = _context.sent;
121
- resolve(result);
122
- case 6:
123
- case "end":
124
- return _context.stop();
125
- }
108
+ while (1) switch (_context.prev = _context.next) {
109
+ case 0:
110
+ setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.setRowEditingEditCellValue : apiRef.current.setCellEditingEditCellValue; // Check if the cell is in edit mode
111
+ // By the time this callback runs the user may have cancelled the editing
112
+ if (!(apiRef.current.getCellMode(id, field) === GridCellModes.Edit)) {
113
+ _context.next = 6;
114
+ break;
115
+ }
116
+ _context.next = 4;
117
+ return setEditCellValueToCall(params);
118
+ case 4:
119
+ result = _context.sent;
120
+ resolve(result);
121
+ case 6:
122
+ case "end":
123
+ return _context.stop();
126
124
  }
127
125
  }, _callee);
128
126
  })));
@@ -133,9 +131,7 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
133
131
  }, [apiRef, props.editMode]);
134
132
  var getEditCellMeta = React.useCallback(function (id, field) {
135
133
  var editingState = gridEditRowsStateSelector(apiRef.current.state);
136
- return {
137
- changeReason: editingState[id][field].changeReason
138
- };
134
+ return editingState[id][field];
139
135
  }, [apiRef]);
140
136
  var editingSharedApi = {
141
137
  isCellEditable: isCellEditable,
@@ -310,13 +310,17 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
310
310
  return acc;
311
311
  }
312
312
  var newValue = apiRef.current.getCellValue(id, field);
313
+ // eslint-disable-next-line @typescript-eslint/naming-convention
314
+ var unstable_updateValueOnRender = false;
313
315
  if (fieldToFocus === field && (deleteValue || initialValue)) {
314
316
  newValue = deleteValue ? '' : initialValue;
317
+ unstable_updateValueOnRender = true;
315
318
  }
316
319
  acc[field] = {
317
320
  value: newValue,
318
321
  error: false,
319
- isProcessingProps: false
322
+ isProcessingProps: false,
323
+ unstable_updateValueOnRender: unstable_updateValueOnRender
320
324
  };
321
325
  return acc;
322
326
  }, {});
@@ -190,54 +190,52 @@ export var useGridPrintExport = function useGridPrintExport(apiRef, props) {
190
190
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(options) {
191
191
  var visibleRowCount, printWindow;
192
192
  return _regeneratorRuntime.wrap(function _callee$(_context) {
193
- while (1) {
194
- switch (_context.prev = _context.next) {
195
- case 0:
196
- logger.debug("Export data as Print");
197
- if (apiRef.current.rootElementRef.current) {
198
- _context.next = 3;
199
- break;
200
- }
201
- throw new Error('MUI: No grid root element available.');
202
- case 3:
203
- previousGridState.current = apiRef.current.exportState();
204
- // It appends that the visibility model is not exported, especially if columnVisibility is not controlled
205
- previousColumnVisibility.current = gridColumnVisibilityModelSelector(apiRef);
206
- if (props.pagination) {
207
- visibleRowCount = gridExpandedRowCountSelector(apiRef);
208
- apiRef.current.setPageSize(visibleRowCount);
209
- }
210
- _context.next = 8;
211
- return updateGridColumnsForPrint(options == null ? void 0 : options.fields, options == null ? void 0 : options.allColumns);
212
- case 8:
213
- apiRef.current.unstable_disableVirtualization();
214
- _context.next = 11;
215
- return raf();
216
- case 11:
217
- // wait for the state changes to take action
218
- printWindow = buildPrintWindow(options == null ? void 0 : options.fileName);
219
- if (process.env.NODE_ENV === 'test') {
220
- doc.current.body.appendChild(printWindow);
221
- // In test env, run the all pipeline without waiting for loading
193
+ while (1) switch (_context.prev = _context.next) {
194
+ case 0:
195
+ logger.debug("Export data as Print");
196
+ if (apiRef.current.rootElementRef.current) {
197
+ _context.next = 3;
198
+ break;
199
+ }
200
+ throw new Error('MUI: No grid root element available.');
201
+ case 3:
202
+ previousGridState.current = apiRef.current.exportState();
203
+ // It appends that the visibility model is not exported, especially if columnVisibility is not controlled
204
+ previousColumnVisibility.current = gridColumnVisibilityModelSelector(apiRef);
205
+ if (props.pagination) {
206
+ visibleRowCount = gridExpandedRowCountSelector(apiRef);
207
+ apiRef.current.setPageSize(visibleRowCount);
208
+ }
209
+ _context.next = 8;
210
+ return updateGridColumnsForPrint(options == null ? void 0 : options.fields, options == null ? void 0 : options.allColumns);
211
+ case 8:
212
+ apiRef.current.unstable_disableVirtualization();
213
+ _context.next = 11;
214
+ return raf();
215
+ case 11:
216
+ // wait for the state changes to take action
217
+ printWindow = buildPrintWindow(options == null ? void 0 : options.fileName);
218
+ if (process.env.NODE_ENV === 'test') {
219
+ doc.current.body.appendChild(printWindow);
220
+ // In test env, run the all pipeline without waiting for loading
221
+ handlePrintWindowLoad(printWindow, options);
222
+ handlePrintWindowAfterPrint(printWindow);
223
+ } else {
224
+ printWindow.onload = function () {
222
225
  handlePrintWindowLoad(printWindow, options);
223
- handlePrintWindowAfterPrint(printWindow);
224
- } else {
225
- printWindow.onload = function () {
226
- handlePrintWindowLoad(printWindow, options);
227
- var mediaQueryList = printWindow.contentWindow.matchMedia('print');
228
- mediaQueryList.addEventListener('change', function (mql) {
229
- var isAfterPrint = mql.matches === false;
230
- if (isAfterPrint) {
231
- handlePrintWindowAfterPrint(printWindow);
232
- }
233
- });
234
- };
235
- doc.current.body.appendChild(printWindow);
236
- }
237
- case 13:
238
- case "end":
239
- return _context.stop();
240
- }
226
+ var mediaQueryList = printWindow.contentWindow.matchMedia('print');
227
+ mediaQueryList.addEventListener('change', function (mql) {
228
+ var isAfterPrint = mql.matches === false;
229
+ if (isAfterPrint) {
230
+ handlePrintWindowAfterPrint(printWindow);
231
+ }
232
+ });
233
+ };
234
+ doc.current.body.appendChild(printWindow);
235
+ }
236
+ case 13:
237
+ case "end":
238
+ return _context.stop();
241
239
  }
242
240
  }, _callee);
243
241
  }));
@@ -6,4 +6,9 @@ export var getDefaultGridFilterModel = function getDefaultGridFilterModel() {
6
6
  quickFilterValues: [],
7
7
  quickFilterLogicOperator: GridLogicOperator.And
8
8
  };
9
- };
9
+ };
10
+
11
+ /**
12
+ * @param {GridRowId} rowId The id of the row we want to filter.
13
+ * @param {(filterItem: GridFilterItem) => boolean} shouldApplyItem An optional callback to allow the filtering engine to only apply some items.
14
+ */
@@ -60,7 +60,7 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
60
60
  if (colDef == null || colDef.filterable === false || props.disableColumnFilter) {
61
61
  return columnMenuItems;
62
62
  }
63
- return [].concat(_toConsumableArray(columnMenuItems), ['ColumnMenuFilterItem']);
63
+ return [].concat(_toConsumableArray(columnMenuItems), ['columnMenuFilterItem']);
64
64
  }, [props.disableColumnFilter]);
65
65
 
66
66
  /**
@@ -121,6 +121,11 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
121
121
  var filterItemsWithValue = filterModel.items.filter(function (item) {
122
122
  var _column$filterOperato;
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
  var column = apiRef.current.getColumn(item.field);
@@ -247,7 +247,7 @@ export var updateCacheWithNewRows = function updateCacheWithNewRows(_ref4) {
247
247
  dataRowIdToIdLookup[id] = id;
248
248
  });
249
249
  var actionTypeWithActionsToRemove = Object.keys(alreadyAppliedActionsToRemove);
250
- var _loop = function _loop(i) {
250
+ var _loop = function _loop() {
251
251
  var actionType = actionTypeWithActionsToRemove[i];
252
252
  var idsToRemove = alreadyAppliedActionsToRemove[actionType];
253
253
  if (Object.keys(idsToRemove).length > 0) {
@@ -257,7 +257,7 @@ export var updateCacheWithNewRows = function updateCacheWithNewRows(_ref4) {
257
257
  }
258
258
  };
259
259
  for (var i = 0; i < actionTypeWithActionsToRemove.length; i += 1) {
260
- _loop(i);
260
+ _loop();
261
261
  }
262
262
  return {
263
263
  dataRowIdToModelLookup: dataRowIdToModelLookup,
@@ -81,7 +81,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
81
81
  if (sortingOrder.some(function (item) {
82
82
  return !!item;
83
83
  })) {
84
- return [].concat(_toConsumableArray(columnMenuItems), ['ColumnMenuSortItem']);
84
+ return [].concat(_toConsumableArray(columnMenuItems), ['columnMenuSortItem']);
85
85
  }
86
86
  return columnMenuItems;
87
87
  }, [props.sortingOrder]);