@mui/x-data-grid 5.11.0 → 5.12.1

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 (217) hide show
  1. package/CHANGELOG.md +237 -16
  2. package/DataGrid/DataGrid.js +26 -1
  3. package/README.md +3 -4
  4. package/components/GridRow.d.ts +1 -1
  5. package/components/GridRow.js +51 -12
  6. package/components/base/GridOverlays.js +1 -1
  7. package/components/cell/GridActionsCellItem.d.ts +1 -1
  8. package/components/cell/GridCell.d.ts +2 -1
  9. package/components/cell/GridCell.js +12 -7
  10. package/components/columnHeaders/GridColumnHeaderItem.js +4 -3
  11. package/components/containers/GridRoot.js +25 -5
  12. package/components/containers/GridRootStyles.js +7 -2
  13. package/components/menu/GridMenu.js +9 -2
  14. package/components/panel/GridColumnsPanel.js +10 -2
  15. package/components/panel/GridPanelWrapper.d.ts +1 -1
  16. package/components/panel/GridPanelWrapper.js +3 -3
  17. package/components/panel/filterPanel/GridFilterForm.d.ts +61 -4
  18. package/components/panel/filterPanel/GridFilterForm.js +88 -8
  19. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  20. package/components/panel/filterPanel/GridFilterPanel.d.ts +8 -5
  21. package/components/panel/filterPanel/GridFilterPanel.js +25 -9
  22. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  23. package/components/toolbar/GridToolbarQuickFilter.d.ts +7 -0
  24. package/components/toolbar/GridToolbarQuickFilter.js +58 -6
  25. package/constants/defaultGridSlotsComponents.js +4 -2
  26. package/constants/gridClasses.d.ts +16 -0
  27. package/constants/gridClasses.js +1 -1
  28. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +4 -0
  29. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  30. package/hooks/core/useGridStateInitialization.js +19 -6
  31. package/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  32. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -0
  33. package/hooks/features/columns/useGridColumns.js +13 -15
  34. package/hooks/features/editRows/useGridCellEditing.new.js +11 -4
  35. package/hooks/features/editRows/useGridEditing.old.js +1 -1
  36. package/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  37. package/hooks/features/events/useGridEvents.d.ts +1 -1
  38. package/hooks/features/events/useGridEvents.js +2 -0
  39. package/hooks/features/filter/gridFilterSelector.d.ts +5 -0
  40. package/hooks/features/filter/gridFilterSelector.js +6 -0
  41. package/hooks/features/filter/gridFilterUtils.d.ts +10 -2
  42. package/hooks/features/filter/gridFilterUtils.js +3 -6
  43. package/hooks/features/filter/useGridFilter.js +29 -12
  44. package/hooks/features/pagination/useGridPage.js +1 -1
  45. package/hooks/features/pagination/useGridPageSize.js +1 -1
  46. package/hooks/features/rows/gridRowsState.d.ts +14 -5
  47. package/hooks/features/rows/gridRowsUtils.d.ts +13 -1
  48. package/hooks/features/rows/gridRowsUtils.js +54 -0
  49. package/hooks/features/rows/useGridRows.js +63 -102
  50. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  51. package/hooks/features/rows/useGridRowsMeta.js +107 -43
  52. package/hooks/features/selection/useGridSelection.js +1 -1
  53. package/hooks/features/sorting/useGridSorting.js +1 -1
  54. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -0
  55. package/hooks/features/virtualization/useGridVirtualScroller.js +27 -7
  56. package/index.js +1 -1
  57. package/internals/index.d.ts +1 -0
  58. package/legacy/DataGrid/DataGrid.js +26 -1
  59. package/legacy/components/GridRow.js +56 -12
  60. package/legacy/components/base/GridOverlays.js +1 -1
  61. package/legacy/components/cell/GridCell.js +12 -7
  62. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +6 -3
  63. package/legacy/components/containers/GridRoot.js +23 -5
  64. package/legacy/components/containers/GridRootStyles.js +9 -6
  65. package/legacy/components/menu/GridMenu.js +9 -2
  66. package/legacy/components/panel/GridColumnsPanel.js +12 -2
  67. package/legacy/components/panel/GridPanelWrapper.js +3 -3
  68. package/legacy/components/panel/filterPanel/GridFilterForm.js +89 -8
  69. package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  70. package/legacy/components/panel/filterPanel/GridFilterPanel.js +27 -10
  71. package/legacy/components/toolbar/GridToolbarQuickFilter.js +68 -8
  72. package/legacy/constants/defaultGridSlotsComponents.js +4 -2
  73. package/legacy/constants/gridClasses.js +1 -1
  74. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -10
  75. package/legacy/hooks/core/useGridStateInitialization.js +18 -6
  76. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  77. package/legacy/hooks/features/columns/useGridColumns.js +13 -15
  78. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -7
  79. package/legacy/hooks/features/editRows/useGridEditing.old.js +1 -1
  80. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  81. package/legacy/hooks/features/events/useGridEvents.js +2 -0
  82. package/legacy/hooks/features/filter/gridFilterSelector.js +8 -0
  83. package/legacy/hooks/features/filter/gridFilterUtils.js +4 -7
  84. package/legacy/hooks/features/filter/useGridFilter.js +33 -12
  85. package/legacy/hooks/features/pagination/useGridPage.js +1 -1
  86. package/legacy/hooks/features/pagination/useGridPageSize.js +1 -1
  87. package/legacy/hooks/features/rows/gridRowsUtils.js +55 -0
  88. package/legacy/hooks/features/rows/useGridRows.js +75 -111
  89. package/legacy/hooks/features/rows/useGridRowsMeta.js +104 -41
  90. package/legacy/hooks/features/selection/useGridSelection.js +1 -1
  91. package/legacy/hooks/features/sorting/useGridSorting.js +1 -1
  92. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +46 -22
  93. package/legacy/index.js +1 -1
  94. package/legacy/locales/heIL.js +9 -9
  95. package/legacy/locales/jaJP.js +28 -24
  96. package/legacy/locales/nbNO.js +127 -0
  97. package/legacy/locales/ruRU.js +9 -9
  98. package/legacy/locales/trTR.js +7 -7
  99. package/legacy/models/events/gridEvents.js +2 -0
  100. package/legacy/models/gridApiCaches.js +1 -0
  101. package/legacy/models/params/gridMenuParams.js +1 -0
  102. package/legacy/models/params/index.js +2 -1
  103. package/locales/heIL.js +9 -9
  104. package/locales/jaJP.js +24 -24
  105. package/locales/nbNO.d.ts +2 -0
  106. package/locales/nbNO.js +115 -0
  107. package/locales/ruRU.js +9 -9
  108. package/locales/trTR.js +7 -7
  109. package/models/api/gridCallbackDetails.d.ts +6 -1
  110. package/models/api/gridCoreApi.d.ts +2 -6
  111. package/models/api/gridFilterApi.d.ts +8 -1
  112. package/models/api/gridRowsMetaApi.d.ts +24 -0
  113. package/models/api/gridStateApi.d.ts +14 -3
  114. package/models/colDef/gridColDef.d.ts +3 -3
  115. package/models/events/gridEventLookup.d.ts +16 -1
  116. package/models/events/gridEvents.d.ts +3 -1
  117. package/models/events/gridEvents.js +2 -0
  118. package/models/gridApiCaches.d.ts +6 -0
  119. package/models/gridApiCaches.js +1 -0
  120. package/models/gridIconSlotsComponent.d.ts +10 -0
  121. package/models/params/gridMenuParams.d.ts +7 -0
  122. package/models/params/gridMenuParams.js +1 -0
  123. package/models/params/gridRowParams.d.ts +1 -1
  124. package/models/params/index.d.ts +1 -0
  125. package/models/params/index.js +2 -1
  126. package/models/props/DataGridProps.d.ts +24 -2
  127. package/modern/DataGrid/DataGrid.js +26 -1
  128. package/modern/components/GridRow.js +51 -12
  129. package/modern/components/base/GridOverlays.js +1 -1
  130. package/modern/components/cell/GridCell.js +12 -7
  131. package/modern/components/columnHeaders/GridColumnHeaderItem.js +4 -3
  132. package/modern/components/containers/GridRoot.js +25 -3
  133. package/modern/components/containers/GridRootStyles.js +7 -2
  134. package/modern/components/menu/GridMenu.js +9 -2
  135. package/modern/components/panel/GridColumnsPanel.js +10 -2
  136. package/modern/components/panel/GridPanelWrapper.js +3 -3
  137. package/modern/components/panel/filterPanel/GridFilterForm.js +88 -8
  138. package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  139. package/modern/components/panel/filterPanel/GridFilterPanel.js +25 -9
  140. package/modern/components/toolbar/GridToolbarQuickFilter.js +58 -6
  141. package/modern/constants/defaultGridSlotsComponents.js +4 -2
  142. package/modern/constants/gridClasses.js +1 -1
  143. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  144. package/modern/hooks/core/useGridStateInitialization.js +19 -6
  145. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
  146. package/modern/hooks/features/columns/useGridColumns.js +12 -14
  147. package/modern/hooks/features/editRows/useGridCellEditing.new.js +10 -3
  148. package/modern/hooks/features/editRows/useGridEditing.old.js +1 -1
  149. package/modern/hooks/features/editRows/useGridRowEditing.new.js +9 -3
  150. package/modern/hooks/features/events/useGridEvents.js +2 -0
  151. package/modern/hooks/features/filter/gridFilterSelector.js +6 -0
  152. package/modern/hooks/features/filter/gridFilterUtils.js +3 -6
  153. package/modern/hooks/features/filter/useGridFilter.js +29 -12
  154. package/modern/hooks/features/pagination/useGridPage.js +1 -1
  155. package/modern/hooks/features/pagination/useGridPageSize.js +1 -1
  156. package/modern/hooks/features/rows/gridRowsUtils.js +54 -0
  157. package/modern/hooks/features/rows/useGridRows.js +63 -102
  158. package/modern/hooks/features/rows/useGridRowsMeta.js +105 -37
  159. package/modern/hooks/features/selection/useGridSelection.js +1 -1
  160. package/modern/hooks/features/sorting/useGridSorting.js +1 -1
  161. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +27 -7
  162. package/modern/index.js +1 -1
  163. package/modern/locales/heIL.js +9 -9
  164. package/modern/locales/jaJP.js +24 -24
  165. package/modern/locales/nbNO.js +115 -0
  166. package/modern/locales/ruRU.js +9 -9
  167. package/modern/locales/trTR.js +7 -7
  168. package/modern/models/events/gridEvents.js +2 -0
  169. package/modern/models/gridApiCaches.js +1 -0
  170. package/modern/models/params/gridMenuParams.js +1 -0
  171. package/modern/models/params/index.js +2 -1
  172. package/node/DataGrid/DataGrid.js +26 -1
  173. package/node/components/GridRow.js +53 -12
  174. package/node/components/base/GridOverlays.js +1 -1
  175. package/node/components/cell/GridCell.js +12 -7
  176. package/node/components/columnHeaders/GridColumnHeaderItem.js +4 -3
  177. package/node/components/containers/GridRoot.js +24 -3
  178. package/node/components/containers/GridRootStyles.js +7 -2
  179. package/node/components/menu/GridMenu.js +10 -2
  180. package/node/components/panel/GridColumnsPanel.js +10 -2
  181. package/node/components/panel/GridPanelWrapper.js +5 -3
  182. package/node/components/panel/filterPanel/GridFilterForm.js +91 -9
  183. package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  184. package/node/components/panel/filterPanel/GridFilterPanel.js +27 -9
  185. package/node/components/toolbar/GridToolbarQuickFilter.js +61 -6
  186. package/node/constants/defaultGridSlotsComponents.js +3 -1
  187. package/node/constants/gridClasses.js +1 -1
  188. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -8
  189. package/node/hooks/core/useGridStateInitialization.js +19 -6
  190. package/node/hooks/features/columnMenu/useGridColumnMenu.js +23 -0
  191. package/node/hooks/features/columns/useGridColumns.js +13 -15
  192. package/node/hooks/features/editRows/useGridCellEditing.new.js +11 -4
  193. package/node/hooks/features/editRows/useGridEditing.old.js +1 -1
  194. package/node/hooks/features/editRows/useGridRowEditing.new.js +10 -4
  195. package/node/hooks/features/events/useGridEvents.js +2 -0
  196. package/node/hooks/features/filter/gridFilterSelector.js +9 -2
  197. package/node/hooks/features/filter/gridFilterUtils.js +4 -5
  198. package/node/hooks/features/filter/useGridFilter.js +28 -11
  199. package/node/hooks/features/pagination/useGridPage.js +1 -1
  200. package/node/hooks/features/pagination/useGridPageSize.js +1 -1
  201. package/node/hooks/features/rows/gridRowsUtils.js +67 -1
  202. package/node/hooks/features/rows/useGridRows.js +63 -99
  203. package/node/hooks/features/rows/useGridRowsMeta.js +107 -43
  204. package/node/hooks/features/selection/useGridSelection.js +1 -1
  205. package/node/hooks/features/sorting/useGridSorting.js +1 -1
  206. package/node/hooks/features/virtualization/useGridVirtualScroller.js +27 -7
  207. package/node/index.js +1 -1
  208. package/node/locales/heIL.js +9 -9
  209. package/node/locales/jaJP.js +24 -24
  210. package/node/locales/nbNO.js +125 -0
  211. package/node/locales/ruRU.js +9 -9
  212. package/node/locales/trTR.js +7 -7
  213. package/node/models/events/gridEvents.js +2 -0
  214. package/node/models/gridApiCaches.js +5 -0
  215. package/node/models/params/gridMenuParams.js +5 -0
  216. package/node/models/params/index.js +13 -0
  217. package/package.json +7 -5
@@ -19,6 +19,8 @@ var _clsx = _interopRequireDefault(require("clsx"));
19
19
 
20
20
  var _utils = require("@mui/material/utils");
21
21
 
22
+ var _material = require("@mui/material");
23
+
22
24
  var _GridRootStyles = require("./GridRootStyles");
23
25
 
24
26
  var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
@@ -33,6 +35,8 @@ var _gridClasses = require("../../constants/gridClasses");
33
35
 
34
36
  var _gridRowsSelector = require("../../hooks/features/rows/gridRowsSelector");
35
37
 
38
+ var _densitySelector = require("../../hooks/features/density/densitySelector");
39
+
36
40
  var _jsxRuntime = require("react/jsx-runtime");
37
41
 
38
42
  const _excluded = ["children", "className"];
@@ -41,9 +45,19 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
41
45
 
42
46
  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; }
43
47
 
44
- const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
45
- var _rootProps$classes;
48
+ const useUtilityClasses = ownerState => {
49
+ const {
50
+ autoHeight,
51
+ density,
52
+ classes
53
+ } = ownerState;
54
+ const slots = {
55
+ root: ['root', autoHeight && 'autoHeight', `root--density${(0, _utils.capitalize)(density)}`]
56
+ };
57
+ return (0, _material.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
58
+ };
46
59
 
60
+ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
47
61
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
48
62
  const {
49
63
  children,
@@ -53,8 +67,15 @@ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
53
67
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
54
68
  const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
55
69
  const totalRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowCountSelector);
70
+ const densityValue = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityValueSelector);
56
71
  const rootContainerRef = React.useRef(null);
57
72
  const handleRef = (0, _utils.useForkRef)(rootContainerRef, ref);
73
+ const ownerState = {
74
+ density: densityValue,
75
+ classes: rootProps.classes,
76
+ autoHeight: rootProps.autoHeight
77
+ };
78
+ const classes = useUtilityClasses(ownerState);
58
79
  apiRef.current.rootElementRef = rootContainerRef; // Our implementation of <NoSsr />
59
80
 
60
81
  const [mountedState, setMountedState] = React.useState(false);
@@ -73,7 +94,7 @@ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
73
94
 
74
95
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridRootStyles.GridRootStyles, (0, _extends2.default)({
75
96
  ref: handleRef,
76
- className: (0, _clsx.default)(className, (_rootProps$classes = rootProps.classes) == null ? void 0 : _rootProps$classes.root, _gridClasses.gridClasses.root, rootProps.autoHeight && _gridClasses.gridClasses.autoHeight),
97
+ className: (0, _clsx.default)(className, classes.root),
77
98
  role: "grid",
78
99
  "aria-colcount": visibleColumns.length,
79
100
  "aria-rowcount": totalRowCount,
@@ -232,6 +232,9 @@ const GridRootStyles = (0, _styles.styled)('div', {
232
232
  },
233
233
  [`&.${_gridClasses.gridClasses['columnSeparator--resizing']}`]: {
234
234
  color: theme.palette.text.primary
235
+ },
236
+ '& svg': {
237
+ pointerEvents: 'none'
235
238
  }
236
239
  },
237
240
  [`& .${_gridClasses.gridClasses.iconSeparator}`]: {
@@ -285,10 +288,12 @@ const GridRootStyles = (0, _styles.styled)('div', {
285
288
  [`& .${_gridClasses.gridClasses.cell}`]: {
286
289
  display: 'flex',
287
290
  alignItems: 'center',
288
- overflow: 'hidden',
289
- whiteSpace: 'nowrap',
290
291
  borderBottom: `1px solid ${borderColor}`
291
292
  },
293
+ [`& .${_gridClasses.gridClasses.row}:not(.${_gridClasses.gridClasses['row--dynamicHeight']}) > .${_gridClasses.gridClasses.cell}`]: {
294
+ overflow: 'hidden',
295
+ whiteSpace: 'nowrap'
296
+ },
292
297
  [`& .${_gridClasses.gridClasses.cellContent}`]: {
293
298
  overflow: 'hidden',
294
299
  textOverflow: 'ellipsis'
@@ -35,6 +35,8 @@ var _gridClasses = require("../../constants/gridClasses");
35
35
 
36
36
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
37
37
 
38
+ var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
39
+
38
40
  var _jsxRuntime = require("react/jsx-runtime");
39
41
 
40
42
  const _excluded = ["open", "target", "onClickAway", "children", "position", "className", "onExited"];
@@ -83,6 +85,7 @@ const GridMenu = props => {
83
85
  onExited
84
86
  } = props,
85
87
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
88
+ const apiRef = (0, _useGridApiContext.useGridApiContext)();
86
89
  const prevTarget = React.useRef(target);
87
90
  const prevOpen = React.useRef(open);
88
91
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
@@ -93,11 +96,16 @@ const GridMenu = props => {
93
96
  React.useEffect(() => {
94
97
  if (prevOpen.current && prevTarget.current) {
95
98
  prevTarget.current.focus();
96
- }
99
+ } // Emit menuOpen or menuClose events
100
+
97
101
 
102
+ const eventName = open ? 'menuOpen' : 'menuClose';
103
+ apiRef.current.publishEvent(eventName, {
104
+ target
105
+ });
98
106
  prevOpen.current = open;
99
107
  prevTarget.current = target;
100
- }, [open, target]);
108
+ }, [apiRef, open, target]);
101
109
 
102
110
  const handleExited = popperOnExited => node => {
103
111
  if (popperOnExited) {
@@ -107,8 +107,16 @@ function GridColumnsPanel(props) {
107
107
  };
108
108
 
109
109
  const toggleAllColumns = React.useCallback(isVisible => {
110
- // TODO v6: call `setColumnVisibilityModel` directly
111
- apiRef.current.updateColumns(columns.map(col => {
110
+ if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
111
+ if (isVisible) {
112
+ return apiRef.current.setColumnVisibilityModel({});
113
+ }
114
+
115
+ return apiRef.current.setColumnVisibilityModel(Object.fromEntries(columns.map(col => [col.field, false])));
116
+ } // TODO v6: Remove
117
+
118
+
119
+ return apiRef.current.updateColumns(columns.map(col => {
112
120
  if (col.hideable !== false) {
113
121
  return {
114
122
  field: col.field,
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.GridPanelWrapper = GridPanelWrapper;
8
+ exports.GridPanelWrapper = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -58,7 +58,7 @@ const GridPanelWrapperRoot = (0, _styles.styled)('div', {
58
58
 
59
59
  const isEnabled = () => true;
60
60
 
61
- function GridPanelWrapper(props) {
61
+ const GridPanelWrapper = /*#__PURE__*/React.forwardRef(function GridPanelWrapper(props, ref) {
62
62
  const {
63
63
  className
64
64
  } = props,
@@ -73,8 +73,10 @@ function GridPanelWrapper(props) {
73
73
  disableEnforceFocus: true,
74
74
  isEnabled: isEnabled,
75
75
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridPanelWrapperRoot, (0, _extends2.default)({
76
+ ref: ref,
76
77
  tabIndex: -1,
77
78
  className: (0, _clsx.default)(className, classes.root)
78
79
  }, other))
79
80
  });
80
- }
81
+ });
82
+ exports.GridPanelWrapper = GridPanelWrapper;
@@ -5,10 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.GridFilterForm = GridFilterForm;
8
+ exports.GridFilterForm = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
12
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
+
12
14
  var React = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -43,6 +45,8 @@ var _gridClasses = require("../../../constants/gridClasses");
43
45
 
44
46
  var _jsxRuntime = require("react/jsx-runtime");
45
47
 
48
+ const _excluded = ["item", "hasMultipleFilters", "deleteFilter", "applyFilterChanges", "multiFilterOperator", "showMultiFilterOperators", "disableMultiFilterOperator", "applyMultiFilterOperatorChanges", "focusElementRef", "linkOperators", "columnsSort", "deleteIconProps", "linkOperatorInputProps", "operatorInputProps", "columnInputProps", "valueInputProps", "children"];
49
+
46
50
  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); }
47
51
 
48
52
  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; }
@@ -131,8 +135,7 @@ const getLinkOperatorLocaleKey = linkOperator => {
131
135
  const getColumnLabel = col => col.headerName || col.field;
132
136
 
133
137
  const collator = new Intl.Collator();
134
-
135
- function GridFilterForm(props) {
138
+ const GridFilterForm = /*#__PURE__*/React.forwardRef(function GridFilterForm(props, ref) {
136
139
  var _rootProps$components, _rootProps$components2, _baseSelectProps$nati, _rootProps$components3, _rootProps$components4, _rootProps$components5, _currentColumn$filter2;
137
140
 
138
141
  const {
@@ -152,7 +155,8 @@ function GridFilterForm(props) {
152
155
  operatorInputProps = {},
153
156
  columnInputProps = {},
154
157
  valueInputProps = {}
155
- } = props;
158
+ } = props,
159
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
156
160
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
157
161
  const filterableColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridFilterableColumnDefinitionsSelector);
158
162
  const columnSelectId = (0, _utils.unstable_useId)();
@@ -252,8 +256,10 @@ function GridFilterForm(props) {
252
256
  }
253
257
  }
254
258
  }), [currentOperator]);
255
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridFilterFormRoot, {
256
- className: classes.root,
259
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridFilterFormRoot, (0, _extends2.default)({
260
+ ref: ref,
261
+ className: classes.root
262
+ }, other, {
257
263
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(FilterFormDeleteIcon, (0, _extends2.default)({
258
264
  variant: "standard",
259
265
  as: rootProps.components.BaseFormControl
@@ -348,35 +354,111 @@ function GridFilterForm(props) {
348
354
  focusElementRef: valueRef
349
355
  }, currentOperator.InputComponentProps)) : null
350
356
  }))]
351
- });
352
- }
353
-
357
+ }));
358
+ });
359
+ exports.GridFilterForm = GridFilterForm;
354
360
  process.env.NODE_ENV !== "production" ? GridFilterForm.propTypes = {
355
361
  // ----------------------------- Warning --------------------------------
356
362
  // | These PropTypes are generated from the TypeScript type definitions |
357
363
  // | To update them edit the TypeScript types and run "yarn proptypes" |
358
364
  // ----------------------------------------------------------------------
365
+
366
+ /**
367
+ * Callback called when the operator, column field or value is changed.
368
+ * @param {GridFilterItem} item The updated [[GridFilterItem]].
369
+ */
359
370
  applyFilterChanges: _propTypes.default.func.isRequired,
371
+
372
+ /**
373
+ * Callback called when the logic operator is changed.
374
+ * @param {GridLinkOperator} operator The new logic operator.
375
+ */
360
376
  applyMultiFilterOperatorChanges: _propTypes.default.func.isRequired,
377
+
378
+ /**
379
+ * Props passed to the column input component.
380
+ * @default {}
381
+ */
361
382
  columnInputProps: _propTypes.default.any,
383
+
384
+ /**
385
+ * Changes how the options in the columns selector should be ordered.
386
+ * If not specified, the order is derived from the `columns` prop.
387
+ */
362
388
  columnsSort: _propTypes.default.oneOf(['asc', 'desc']),
389
+
390
+ /**
391
+ * Callback called when the delete button is clicked.
392
+ * @param {GridFilterItem} item The deleted [[GridFilterItem]].
393
+ */
363
394
  deleteFilter: _propTypes.default.func.isRequired,
395
+
396
+ /**
397
+ * Props passed to the delete icon.
398
+ * @default {}
399
+ */
364
400
  deleteIconProps: _propTypes.default.any,
401
+
402
+ /**
403
+ * If `true`, disables the logic operator field but still renders it.
404
+ */
365
405
  disableMultiFilterOperator: _propTypes.default.bool,
406
+
407
+ /**
408
+ * A ref allowing to set imperative focus.
409
+ * It can be passed to the el
410
+ */
366
411
  focusElementRef: _propTypes.default
367
412
  /* @typescript-to-proptypes-ignore */
368
413
  .oneOfType([_propTypes.default.func, _propTypes.default.object]),
414
+
415
+ /**
416
+ * If `true`, the logic operator field is rendered.
417
+ * The field will be invisible if `showMultiFilterOperators` is also `true`.
418
+ */
369
419
  hasMultipleFilters: _propTypes.default.bool.isRequired,
420
+
421
+ /**
422
+ * The [[GridFilterItem]] representing this form.
423
+ */
370
424
  item: _propTypes.default.shape({
371
425
  columnField: _propTypes.default.string.isRequired,
372
426
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
373
427
  operatorValue: _propTypes.default.string,
374
428
  value: _propTypes.default.any
375
429
  }).isRequired,
430
+
431
+ /**
432
+ * Props passed to the logic operator input component.
433
+ * @default {}
434
+ */
376
435
  linkOperatorInputProps: _propTypes.default.any,
436
+
437
+ /**
438
+ * Sets the available logic operators.
439
+ * @default [GridLinkOperator.And, GridLinkOperator.Or]
440
+ */
377
441
  linkOperators: _propTypes.default.arrayOf(_propTypes.default.oneOf(['and', 'or']).isRequired),
442
+
443
+ /**
444
+ * The current logic operator applied.
445
+ */
378
446
  multiFilterOperator: _propTypes.default.oneOf(['and', 'or']),
447
+
448
+ /**
449
+ * Props passed to the operator input component.
450
+ * @default {}
451
+ */
379
452
  operatorInputProps: _propTypes.default.any,
453
+
454
+ /**
455
+ * If `true`, the logic operator field is visible.
456
+ */
380
457
  showMultiFilterOperators: _propTypes.default.bool,
458
+
459
+ /**
460
+ * Props passed to the value input component.
461
+ * @default {}
462
+ */
381
463
  valueInputProps: _propTypes.default.any
382
464
  } : void 0;
@@ -106,7 +106,6 @@ function GridFilterInputMultipleSingleSelect(props) {
106
106
  }, [applyValue, item]);
107
107
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Autocomplete.default, (0, _extends2.default)({
108
108
  multiple: true,
109
- freeSolo: false,
110
109
  limitTags: 1,
111
110
  options: resolvedValueOptions // TODO: avoid `any`?
112
111
  ,
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.GridFilterPanel = GridFilterPanel;
8
+ exports.GridFilterPanel = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -39,13 +39,13 @@ var _gridColumnsSelector = require("../../../hooks/features/columns/gridColumnsS
39
39
 
40
40
  var _jsxRuntime = require("react/jsx-runtime");
41
41
 
42
- const _excluded = ["linkOperators", "columnsSort", "filterFormProps"];
42
+ const _excluded = ["linkOperators", "columnsSort", "filterFormProps", "children"];
43
43
 
44
44
  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); }
45
45
 
46
46
  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; }
47
47
 
48
- function GridFilterPanel(props) {
48
+ const GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(props, ref) {
49
49
  var _rootProps$components;
50
50
 
51
51
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
@@ -99,9 +99,7 @@ function GridFilterPanel(props) {
99
99
  return;
100
100
  }
101
101
 
102
- apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
103
- items: [...items, defaultItem]
104
- }));
102
+ apiRef.current.upsertFilterItems([...items, defaultItem]);
105
103
  };
106
104
 
107
105
  const deleteFilter = React.useCallback(item => {
@@ -122,7 +120,9 @@ function GridFilterPanel(props) {
122
120
  lastFilterRef.current.focus();
123
121
  }
124
122
  }, [items.length]);
125
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({}, other, {
123
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({
124
+ ref: ref
125
+ }, other, {
126
126
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridPanelContent.GridPanelContent, {
127
127
  children: items.map((item, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridFilterForm.GridFilterForm, (0, _extends2.default)({
128
128
  item: item,
@@ -147,14 +147,23 @@ function GridFilterPanel(props) {
147
147
  }))
148
148
  })]
149
149
  }));
150
- }
151
-
150
+ });
151
+ exports.GridFilterPanel = GridFilterPanel;
152
152
  process.env.NODE_ENV !== "production" ? GridFilterPanel.propTypes = {
153
153
  // ----------------------------- Warning --------------------------------
154
154
  // | These PropTypes are generated from the TypeScript type definitions |
155
155
  // | To update them edit the TypeScript types and run "yarn proptypes" |
156
156
  // ----------------------------------------------------------------------
157
+
158
+ /**
159
+ * Changes how the options in the columns selector should be ordered.
160
+ * If not specified, the order is derived from the `columns` prop.
161
+ */
157
162
  columnsSort: _propTypes.default.oneOf(['asc', 'desc']),
163
+
164
+ /**
165
+ * Props passed to each filter form.
166
+ */
158
167
  filterFormProps: _propTypes.default.shape({
159
168
  columnInputProps: _propTypes.default.any,
160
169
  columnsSort: _propTypes.default.oneOf(['asc', 'desc']),
@@ -163,6 +172,15 @@ process.env.NODE_ENV !== "production" ? GridFilterPanel.propTypes = {
163
172
  operatorInputProps: _propTypes.default.any,
164
173
  valueInputProps: _propTypes.default.any
165
174
  }),
175
+
176
+ /**
177
+ * Sets the available logic operators.
178
+ * @default [GridLinkOperator.And, GridLinkOperator.Or]
179
+ */
166
180
  linkOperators: _propTypes.default.arrayOf(_propTypes.default.oneOf(['and', 'or']).isRequired),
181
+
182
+ /**
183
+ * The system prop that allows defining system overrides as well as additional CSS styles.
184
+ */
167
185
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
168
186
  } : void 0;
@@ -17,7 +17,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
18
  var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
19
19
 
20
- var _Search = _interopRequireDefault(require("@mui/icons-material/Search"));
20
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
21
21
 
22
22
  var _styles = require("@mui/material/styles");
23
23
 
@@ -27,9 +27,15 @@ var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
27
27
 
28
28
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
29
29
 
30
+ var _useGridSelector = require("../../hooks/utils/useGridSelector");
31
+
32
+ var _filter = require("../../hooks/features/filter");
33
+
34
+ var _utils2 = require("../../utils/utils");
35
+
30
36
  var _jsxRuntime = require("react/jsx-runtime");
31
37
 
32
- const _excluded = ["quickFilterParser", "debounceMs"];
38
+ const _excluded = ["quickFilterParser", "quickFilterFormatter", "debounceMs"];
33
39
 
34
40
  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); }
35
41
 
@@ -44,27 +50,54 @@ const GridToolbarQuickFilterRoot = (0, _styles.styled)(_TextField.default, {
44
50
  }) => ({
45
51
  width: 'auto',
46
52
  paddingBottom: theme.spacing(0.5),
47
- '& .MuiSvgIcon-root': {
48
- marginRight: theme.spacing(0.5)
53
+ '& input': {
54
+ marginLeft: theme.spacing(0.5)
49
55
  },
50
56
  '& .MuiInput-underline:before': {
51
57
  borderBottom: `1px solid ${theme.palette.divider}`
58
+ },
59
+ [`& input[type=search]::-ms-clear,
60
+ & input[type=search]::-ms-reveal`]: {
61
+ /* clears the 'X' icon from IE */
62
+ display: 'none',
63
+ width: 0,
64
+ height: 0
65
+ },
66
+ [`& input[type="search"]::-webkit-search-decoration,
67
+ & input[type="search"]::-webkit-search-cancel-button,
68
+ & input[type="search"]::-webkit-search-results-button,
69
+ & input[type="search"]::-webkit-search-results-decoration`]: {
70
+ /* clears the 'X' icon from Chrome */
71
+ display: 'none'
52
72
  }
53
73
  }));
54
74
 
55
75
  const defaultSearchValueParser = searchText => searchText.split(' ').filter(word => word !== '');
56
76
 
77
+ const defaultSearchValueFormatter = values => values.join(' ');
78
+
57
79
  function GridToolbarQuickFilter(props) {
58
80
  var _rootProps$components;
59
81
 
60
82
  const {
61
83
  quickFilterParser = defaultSearchValueParser,
84
+ quickFilterFormatter = defaultSearchValueFormatter,
62
85
  debounceMs = 500
63
86
  } = props,
64
87
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
65
88
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
66
89
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
67
- const [searchValue, setSearchValue] = React.useState('');
90
+ const quickFilterValues = (0, _useGridSelector.useGridSelector)(apiRef, _filter.gridQuickFilterValuesSelector);
91
+ const [searchValue, setSearchValue] = React.useState(() => quickFilterFormatter(quickFilterValues != null ? quickFilterValues : []));
92
+ const [prevQuickFilterValues, setPrevQuickFilterValues] = React.useState(quickFilterValues);
93
+ React.useEffect(() => {
94
+ if (!(0, _utils2.isDeepEqual)(prevQuickFilterValues, quickFilterValues)) {
95
+ // The model of quick filter value has been updated
96
+ setPrevQuickFilterValues(quickFilterValues); // Update the input value if needed to match the new model
97
+
98
+ setSearchValue(prevSearchValue => (0, _utils2.isDeepEqual)(quickFilterParser(prevSearchValue), quickFilterValues) ? prevSearchValue : quickFilterFormatter(quickFilterValues != null ? quickFilterValues : []));
99
+ }
100
+ }, [prevQuickFilterValues, quickFilterValues, quickFilterFormatter, quickFilterParser]);
68
101
  const updateSearchValue = React.useCallback(newSearchValue => {
69
102
  apiRef.current.setQuickFilterValues(quickFilterParser(newSearchValue));
70
103
  }, [apiRef, quickFilterParser]);
@@ -74,6 +107,10 @@ function GridToolbarQuickFilter(props) {
74
107
  setSearchValue(newSearchValue);
75
108
  debouncedUpdateSearchValue(newSearchValue);
76
109
  }, [debouncedUpdateSearchValue]);
110
+ const handleSearchReset = React.useCallback(() => {
111
+ setSearchValue('');
112
+ updateSearchValue('');
113
+ }, [updateSearchValue]);
77
114
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridToolbarQuickFilterRoot, (0, _extends2.default)({
78
115
  as: rootProps.components.BaseTextField,
79
116
  variant: "standard",
@@ -83,8 +120,19 @@ function GridToolbarQuickFilter(props) {
83
120
  "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterLabel'),
84
121
  type: "search",
85
122
  InputProps: {
86
- startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Search.default, {
123
+ startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.QuickFilterIcon, {
87
124
  fontSize: "small"
125
+ }),
126
+ endAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
127
+ "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
128
+ size: "small",
129
+ sx: {
130
+ visibility: searchValue ? 'visible' : 'hidden'
131
+ },
132
+ onClick: handleSearchReset,
133
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.QuickFilterClearIcon, {
134
+ fontSize: "small"
135
+ })
88
136
  })
89
137
  }
90
138
  }, other, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.baseTextField));
@@ -102,6 +150,13 @@ process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
102
150
  */
103
151
  debounceMs: _propTypes.default.number,
104
152
 
153
+ /**
154
+ * Function responsible for formatting values of quick filter in a string when the model is modified
155
+ * @param {any[]} values The new values passed to the quick filter model
156
+ * @returns {string} The string to display in the text field
157
+ */
158
+ quickFilterFormatter: _propTypes.default.func,
159
+
105
160
  /**
106
161
  * Function responsible for parsing text input in an array of independent values for quick filtering.
107
162
  * @param {string} input The value entered by the user
@@ -56,7 +56,9 @@ const DEFAULT_GRID_ICON_SLOTS_COMPONENTS = {
56
56
  GroupingCriteriaExpandIcon: _components.GridKeyboardArrowRight,
57
57
  DetailPanelExpandIcon: _components.GridAddIcon,
58
58
  DetailPanelCollapseIcon: _components.GridRemoveIcon,
59
- RowReorderIcon: _components.GridDragIcon
59
+ RowReorderIcon: _components.GridDragIcon,
60
+ QuickFilterIcon: _components.GridSearchIcon,
61
+ QuickFilterClearIcon: _components.GridCloseIcon
60
62
  };
61
63
  /**
62
64
  * TODO: Differentiate community and pro value and interface
@@ -12,5 +12,5 @@ function getDataGridUtilityClass(slot) {
12
12
  return (0, _material.generateUtilityClass)('MuiDataGrid', slot);
13
13
  }
14
14
 
15
- const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle']);
15
+ const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle']);
16
16
  exports.gridClasses = gridClasses;
@@ -62,29 +62,27 @@ const useGridPipeProcessing = apiRef => {
62
62
  const registerPipeProcessor = React.useCallback((group, id, processor) => {
63
63
  if (!processorsCache.current[group]) {
64
64
  processorsCache.current[group] = {
65
- processors: {},
65
+ processors: new Map(),
66
66
  appliers: {}
67
67
  };
68
68
  }
69
69
 
70
70
  const groupCache = processorsCache.current[group];
71
- const oldProcessor = groupCache.processors[id];
71
+ const oldProcessor = groupCache.processors.get(id);
72
72
 
73
73
  if (oldProcessor !== processor) {
74
- groupCache.processors[id] = processor;
74
+ groupCache.processors.set(id, processor);
75
75
  runAppliers(groupCache);
76
76
  }
77
77
 
78
78
  return () => {
79
- const _processors = processorsCache.current[group].processors,
80
- otherProcessors = (0, _objectWithoutPropertiesLoose2.default)(_processors, [id].map(_toPropertyKey2.default));
81
- processorsCache.current[group].processors = otherProcessors;
79
+ processorsCache.current[group].processors.set(id, null);
82
80
  };
83
81
  }, [runAppliers]);
84
82
  const registerPipeApplier = React.useCallback((group, id, applier) => {
85
83
  if (!processorsCache.current[group]) {
86
84
  processorsCache.current[group] = {
87
- processors: {},
85
+ processors: new Map(),
88
86
  appliers: {}
89
87
  };
90
88
  }
@@ -107,8 +105,12 @@ const useGridPipeProcessing = apiRef => {
107
105
  return value;
108
106
  }
109
107
 
110
- const preProcessors = Object.values(processorsCache.current[group].processors);
108
+ const preProcessors = Array.from(processorsCache.current[group].processors.values());
111
109
  return preProcessors.reduce((acc, preProcessor) => {
110
+ if (!preProcessor) {
111
+ return acc;
112
+ }
113
+
112
114
  return preProcessor(acc, context);
113
115
  }, value);
114
116
  }, []);