@mui/x-data-grid 6.2.1 → 6.3.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 (58) hide show
  1. package/CHANGELOG.md +118 -3
  2. package/components/GridPagination.js +3 -1
  3. package/components/base/GridBody.d.ts +1 -0
  4. package/components/base/GridBody.js +12 -3
  5. package/components/cell/GridActionsCell.d.ts +2 -3
  6. package/components/cell/GridActionsCell.js +9 -1
  7. package/components/containers/GridRootStyles.js +3 -1
  8. package/components/panel/GridPanel.d.ts +3 -2
  9. package/components/toolbar/GridToolbarFilterButton.js +3 -1
  10. package/constants/gridClasses.js +1 -1
  11. package/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  12. package/hooks/features/focus/useGridFocus.js +2 -2
  13. package/index.js +1 -1
  14. package/joy/joySlots.js +234 -24
  15. package/legacy/components/GridPagination.js +3 -1
  16. package/legacy/components/base/GridBody.js +12 -3
  17. package/legacy/components/cell/GridActionsCell.js +11 -2
  18. package/legacy/components/containers/GridRootStyles.js +3 -1
  19. package/legacy/components/toolbar/GridToolbarFilterButton.js +3 -1
  20. package/legacy/constants/gridClasses.js +1 -1
  21. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  22. package/legacy/hooks/features/focus/useGridFocus.js +2 -2
  23. package/legacy/index.js +1 -1
  24. package/legacy/joy/joySlots.js +229 -17
  25. package/legacy/locales/frFR.js +2 -2
  26. package/legacy/locales/trTR.js +2 -2
  27. package/legacy/locales/zhCN.js +2 -2
  28. package/locales/frFR.js +2 -2
  29. package/locales/trTR.js +2 -2
  30. package/locales/zhCN.js +2 -2
  31. package/material/index.d.ts +3 -2
  32. package/modern/components/GridPagination.js +2 -1
  33. package/modern/components/base/GridBody.js +12 -3
  34. package/modern/components/cell/GridActionsCell.js +9 -1
  35. package/modern/components/containers/GridRootStyles.js +3 -1
  36. package/modern/components/toolbar/GridToolbarFilterButton.js +3 -1
  37. package/modern/constants/gridClasses.js +1 -1
  38. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +21 -14
  39. package/modern/hooks/features/focus/useGridFocus.js +2 -2
  40. package/modern/index.js +1 -1
  41. package/modern/joy/joySlots.js +231 -24
  42. package/modern/locales/frFR.js +2 -2
  43. package/modern/locales/trTR.js +2 -2
  44. package/modern/locales/zhCN.js +2 -2
  45. package/node/components/GridPagination.js +2 -1
  46. package/node/components/base/GridBody.js +12 -3
  47. package/node/components/cell/GridActionsCell.js +9 -1
  48. package/node/components/containers/GridRootStyles.js +3 -1
  49. package/node/components/toolbar/GridToolbarFilterButton.js +3 -1
  50. package/node/constants/gridClasses.js +1 -1
  51. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +20 -11
  52. package/node/hooks/features/focus/useGridFocus.js +2 -2
  53. package/node/index.js +1 -1
  54. package/node/joy/joySlots.js +231 -24
  55. package/node/locales/frFR.js +2 -2
  56. package/node/locales/trTR.js +2 -2
  57. package/node/locales/zhCN.js +2 -2
  58. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,121 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 6.3.1
7
+
8
+ _May 5, 2023_
9
+
10
+ We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🐞 Bugfixes
13
+ - 📚 Documentation improvements
14
+
15
+ ### `@mui/x-data-grid@v6.3.1` / `@mui/x-data-grid-pro@v6.3.1` / `@mui/x-data-grid-premium@v6.3.1`
16
+
17
+ #### Changes
18
+
19
+ - [DataGrid] Fix broken filtering in the value formatter demo (#8621) @cherniavskii
20
+ - [DataGrid] Fix falsy filter values not showing in filter button tooltip (#8550) @ithrforu
21
+ - [DataGrid] Fix missing watermark in Pro and Premium packages (#8797) @cherniavskii
22
+ - [DataGrid] Remove unwarranted warning log (#8847) @romgrk
23
+ - [DataGrid] Add Joy UI slots (`Select`, `SelectOption`, `InputLabel`, `FormControl`) (#8747) @cherniavskii
24
+ - [DataGridPremium] Fix expanded groups being collapsed after calling `updateRows` (#8823) @cherniavskii
25
+
26
+ ### `@mui/x-date-pickers@v6.3.1` / `@mui/x-date-pickers-pro@v6.3.1`
27
+
28
+ #### Changes
29
+
30
+ - [pickers] Fix `minutesStep` validation prop behavior (#8794) @LukasTy
31
+ - [pickers] Fix time picker `viewRenderers` overriding (#8830) @LukasTy
32
+ - [pickers] Remove last additional character when using LTR (#8848) @alexfauquette
33
+
34
+ ### Docs
35
+
36
+ - [docs] Fix controlled mode demo on Editing page (#8800) @yaredtsy
37
+ - [docs] Fix scrolling demo not working with React 18 (#6489) @cherniavskii
38
+ - [docs] Update demo to support agregation on popular feature cell (#8617) @BalaM314
39
+ - [docs] Clarify what `<path>` is (#8764) @alexfauquette
40
+
41
+ ### Core
42
+
43
+ - [core] Do not include playground pages in `yarn typescript` script (#8822) @cherniavskii
44
+ - [core] Limit `typescript:ci` step memory limit (#8796) @LukasTy
45
+ - [core] Upgrade monorepo (#8835) @cherniavskii
46
+ - [test] Use `fake` clock on `MobileDateRangePicker` (#8861) @LukasTy
47
+ - [charts] Clean some styling (#8778) @alexfauquette
48
+ - [charts] Improve tooltip (#8792) @alexfauquette
49
+ - [charts] Improvement and docs on axis (#8654) @alexfauquette
50
+ - [charts] Defaultize attributes (#8788) @alexfauquette
51
+
52
+ ## 6.3.0
53
+
54
+ _Apr 28, 2023_
55
+
56
+ We'd like to offer a big thanks to the 15 contributors who made this release possible. Here are some highlights ✨:
57
+
58
+ - 🚀 New [time-picking UI](https://mui.com/x/react-date-pickers/digital-clock/) designed for desktops (#7958) @LukasTy
59
+
60
+ <img src="https://user-images.githubusercontent.com/4941090/235072007-de39a397-e4a4-4c98-8e10-5ee4ad440108.gif" width="494" />
61
+
62
+ - ✨ Picker fields [now always include a leading zero](https://mui.com/x/react-date-pickers/adapters-locale/#respect-leading-zeros-in-fields) on digit sections (#8527) @flaviendelangle
63
+ - 🌍 Improve Chinese (zh-CN), French (fr-FR), and Turkish (tr-TR) locales
64
+ - 🐞 Bugfixes
65
+ - 📚 Documentation improvements
66
+
67
+ ### `@mui/x-data-grid@v6.3.0` / `@mui/x-data-grid-pro@v6.3.0` / `@mui/x-data-grid-premium@v6.3.0`
68
+
69
+ #### Changes
70
+
71
+ - [DataGrid] Add overlay classes to `gridClasses` (#8686) @lindapaiste
72
+ - [DataGrid] Avoid passing `api` prop to div (#8679) @someden
73
+ - [DataGrid] Fix 'ResizeObserver loop limit exceeded' error (#8744) @m4theushw
74
+ - [DataGrid] Add Joy UI slots (button and switch) (#8699) @siriwatknp
75
+ - [DataGrid] Fix aggregation label alignment (#8694) @joserodolfofreitas
76
+ - [DataGridPremium] Fix infinite loop when updating grouped rows (#8693) @cherniavskii
77
+ - [DataGridPro] Fix error after updating `columns` and `columnGroupingModel` at once (#8730) @cherniavskii
78
+ - [l10n] Improve Chinese (zh-CN) locale (#8753) @SakumyZ
79
+ - [l10n] Improve French (fr-FR) locale (#8704) @Jul13nT
80
+ - [l10n] Improve Turkish (tr-TR) locale (#8783) @cccaaannn
81
+
82
+ ### `@mui/x-date-pickers@v6.3.0` / `@mui/x-date-pickers-pro@v6.3.0`
83
+
84
+ #### Changes
85
+
86
+ - [fields] Always add leading zeroes on digit sections (#8527) @flaviendelangle
87
+ - [fields] Pass the `readOnly` prop to `InputProps` instead of `inputProps` (#8659) @flaviendelangle
88
+ - [pickers] Add missing export for `caES` locale (#8782) @flaviendelangle
89
+ - [pickers] Add new `DigitalClock` desktop time picking experience (#7958) @LukasTy
90
+ - [pickers] Do not use `instanceOf DateTime` in `AdapterLuxon` (#8734) @flaviendelangle
91
+ - [pickers] Fix date calendar `selected` & `disabled` day style (#8773) @LukasTy
92
+ - [pickers] Migrate `AdapterDateFns` to our repository (#8736) @flaviendelangle
93
+ - [pickers] Migrate `AdapterLuxon` to our repository (#8600) @flaviendelangle
94
+ - [pickers] Migrate `AdapterMomentHijri` to our repository (#8776) @flaviendelangle
95
+ - [pickers] Migrate `AdapterMomentJalaali` and `AdapterDateFnsJalali` to our repository (#8741) @flaviendelangle
96
+ - [pickers] Migrate `AdapterMoment` to our repository (#8700) @flaviendelangle
97
+ - [pickers] Refactor the validation files (#8622) @flaviendelangle
98
+ - [pickers] Use `en dash` instead of `em dash` in multi input range fields (#8738) @flaviendelangle
99
+ - [l10n] Improve Chinese (zh-CN) locale (#8753) @SakumyZ
100
+ - [l10n] Improve Turkish (tr-TR) locale (#8783) @cccaaannn
101
+
102
+ ### Docs
103
+
104
+ - [docs] Add icons for charts menu (#8752) @alexfauquette
105
+ - [docs] Document the supported formats (#8746) @flaviendelangle
106
+ - [docs] Fix Hijri demo (#8698) @alexfauquette
107
+ - [docs] Fix `x-codemod` package version in changelog (#8690) @MBilalShafi
108
+ - [docs] Fix columns special properties code example (#8414) @mikkelhl
109
+ - [docs] Fix error in `minDateTime` `validation` page section (#8777) @LukasTy
110
+ - [docs] Update custom field pickers using theme scoping (#8609) @siriwatknp
111
+ - [docs] Use community version of data grid for column grouping demo (#7346) @ASchwad
112
+ - [docs] Use new `slots` / `slotProps` props in the pickers migration guide (#8341) @flaviendelangle
113
+
114
+ ### Core
115
+
116
+ - [core] Cleanup picker tests (#8652) @flaviendelangle
117
+ - [core] Use `adapter.lib` instead of `adapterName` in `describeAdapters` (#8779) @flaviendelangle
118
+ - [charts] Adapt line and scatter plot to the "band" scale type (#8701) @alexfauquette
119
+ - [charts] Link the Gantt Charts issue in the docs (#8739) @flaviendelangle
120
+
6
121
  ## 6.2.1
7
122
 
8
123
  _Apr 20, 2023_
@@ -31,7 +146,7 @@ We'd like to offer a big thanks to the 9 contributors who made this release poss
31
146
  - [pickers] Do not include the time in date components when going to today (#8657) @flaviendelangle
32
147
  - [pickers] Sync internal state with controlled value (#8674) @alexfauquette
33
148
 
34
- ### `@mui/x-codemod@v6.0.6`
149
+ ### `@mui/x-codemod@v6.2.1`
35
150
 
36
151
  #### Changes
37
152
 
@@ -195,9 +310,9 @@ We'd like to offer a big thanks to the 9 contributors who made this release poss
195
310
 
196
311
  - [fields] Add missing tokens to `AdapterDateFnsJalali` (#8402) @flaviendelangle
197
312
  - [fields] Clean the active date manager (#8370) @flaviendelangle
198
- - [fields] Cleanup `useFieldState` (#8292) @flaviendelangle
313
+ - [fields] Cleanup `useFieldState` (#8292) @flaviendelangle
199
314
  - [fields] Only add RTL characters when needed (#8325) @flaviendelangle
200
- - [pickers] Add support for single input fields in range pickers (#7927) @flaviendelangle
315
+ - [pickers] Add support for single input fields in range pickers (#7927) @flaviendelangle
201
316
  - [pickers] Allows non token characters in format (#8256) @alexfauquette
202
317
  - [pickers] Avoid root imports and move public models to the models folder (#8337) @flaviendelangle
203
318
  - [pickers] Update `view` when `views` or `openTo` changes (#8361) @LukasTy
@@ -43,9 +43,11 @@ export const GridPagination = /*#__PURE__*/React.forwardRef(function GridPaginat
43
43
  apiRef.current.setPage(page);
44
44
  }, [apiRef]);
45
45
  if (process.env.NODE_ENV !== 'production') {
46
+ var _rootProps$pagination, _rootProps$pagination2;
46
47
  // eslint-disable-next-line react-hooks/rules-of-hooks
47
48
  const warnedOnceMissingInPageSizeOptions = React.useRef(false);
48
- if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !rootProps.pageSizeOptions.includes(paginationModel.pageSize)) {
49
+ const pageSize = (_rootProps$pagination = (_rootProps$pagination2 = rootProps.paginationModel) == null ? void 0 : _rootProps$pagination2.pageSize) != null ? _rootProps$pagination : paginationModel.pageSize;
50
+ if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !rootProps.pageSizeOptions.includes(pageSize)) {
49
51
  console.warn([`MUI: The page size \`${paginationModel.pageSize}\` is not preset in the \`pageSizeOptions\``, `Add it to show the pagination select.`].join('\n'));
50
52
  warnedOnceMissingInPageSizeOptions.current = true;
51
53
  }
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  interface GridBodyProps {
3
+ children?: React.ReactNode;
3
4
  ColumnHeadersProps?: Record<string, any>;
4
5
  VirtualScrollerComponent: React.JSXElementConstructor<React.HTMLAttributes<HTMLDivElement> & {
5
6
  ref: React.Ref<HTMLDivElement>;
@@ -18,7 +18,8 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
18
18
  function GridBody(props) {
19
19
  const {
20
20
  VirtualScrollerComponent,
21
- ColumnHeadersProps
21
+ ColumnHeadersProps,
22
+ children
22
23
  } = props;
23
24
  const apiRef = useGridPrivateApiContext();
24
25
  const rootProps = useGridRootProps();
@@ -45,13 +46,20 @@ function GridBody(props) {
45
46
  if (typeof ResizeObserver === 'undefined') {
46
47
  return () => {};
47
48
  }
49
+ let animationFrame;
48
50
  const observer = new ResizeObserver(() => {
49
- apiRef.current.computeSizeAndPublishResizeEvent();
51
+ // See https://github.com/mui/mui-x/issues/8733
52
+ animationFrame = window.requestAnimationFrame(() => {
53
+ apiRef.current.computeSizeAndPublishResizeEvent();
54
+ });
50
55
  });
51
56
  if (elementToObserve) {
52
57
  observer.observe(elementToObserve);
53
58
  }
54
59
  return () => {
60
+ if (animationFrame) {
61
+ window.cancelAnimationFrame(animationFrame);
62
+ }
55
63
  if (elementToObserve) {
56
64
  observer.unobserve(elementToObserve);
57
65
  }
@@ -112,7 +120,7 @@ function GridBody(props) {
112
120
  , {
113
121
  ref: virtualScrollerRef,
114
122
  disableVirtualization: isVirtualizationDisabled
115
- })]
123
+ }), children]
116
124
  });
117
125
  }
118
126
  process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
@@ -120,6 +128,7 @@ process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
120
128
  // | These PropTypes are generated from the TypeScript type definitions |
121
129
  // | To update them edit the TypeScript types and run "yarn proptypes" |
122
130
  // ----------------------------------------------------------------------
131
+ children: PropTypes.node,
123
132
  ColumnHeadersProps: PropTypes.object,
124
133
  VirtualScrollerComponent: PropTypes.elementType.isRequired
125
134
  } : void 0;
@@ -1,9 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  import { GridRenderCellParams } from '../../models/params/gridCellParams';
3
3
  import { GridMenuProps } from '../menu/GridMenu';
4
- interface GridActionsCellProps extends Omit<GridRenderCellParams, 'value' | 'formattedValue' | 'api'> {
5
- value?: GridRenderCellParams['value'];
6
- formattedValue?: GridRenderCellParams['formattedValue'];
4
+ interface GridActionsCellProps extends Omit<GridRenderCellParams, 'api'> {
5
+ api?: GridRenderCellParams['api'];
7
6
  position?: GridMenuProps['position'];
8
7
  }
9
8
  declare function GridActionsCell(props: GridActionsCellProps): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
3
+ const _excluded = ["api", "colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import MenuList from '@mui/material/MenuList';
@@ -189,6 +189,7 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
189
189
  // | These PropTypes are generated from the TypeScript type definitions |
190
190
  // | To update them edit the TypeScript types and run "yarn proptypes" |
191
191
  // ----------------------------------------------------------------------
192
+ api: PropTypes.object,
192
193
  /**
193
194
  * The mode of the cell.
194
195
  */
@@ -211,6 +212,9 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
211
212
  focus: PropTypes.func.isRequired
212
213
  })
213
214
  })]),
215
+ /**
216
+ * The cell value formatted with the column valueFormatter.
217
+ */
214
218
  formattedValue: PropTypes.any,
215
219
  /**
216
220
  * If true, the cell is the active element.
@@ -237,6 +241,10 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
237
241
  * the tabIndex value.
238
242
  */
239
243
  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,
244
+ /**
245
+ * The cell value.
246
+ * If the column has `valueGetter`, use `params.row` to directly access the fields.
247
+ */
240
248
  value: PropTypes.any
241
249
  } : void 0;
242
250
  export { GridActionsCell };
@@ -204,7 +204,9 @@ export const GridRootStyles = styled('div', {
204
204
  minWidth: 0,
205
205
  flex: 1,
206
206
  whiteSpace: 'nowrap',
207
- overflow: 'hidden'
207
+ overflow: 'hidden',
208
+ // to anchor the aggregation label
209
+ position: 'relative'
208
210
  },
209
211
  [`& .${gridClasses.columnHeaderTitleContainerContent}`]: {
210
212
  overflow: 'hidden',
@@ -16,12 +16,13 @@ export interface GridPanelProps extends Partial<React.ComponentProps<typeof Grid
16
16
  open: boolean;
17
17
  }
18
18
  export declare const gridPanelClasses: Record<keyof GridPanelClasses, string>;
19
- declare const GridPanelRoot: import("@emotion/styled").StyledComponent<Pick<Omit<import("@mui/base").PopperUnstyledProps<"div", {}>, "direction"> & {
19
+ declare const GridPanelRoot: import("@emotion/styled").StyledComponent<Pick<Omit<import("@mui/base").PopperProps<"div">, "direction"> & {
20
+ component?: React.ElementType<any> | undefined;
20
21
  components?: {
21
22
  Root?: React.ElementType<any> | undefined;
22
23
  } | undefined;
23
24
  componentsProps?: {
24
- root?: import("@mui/base").SlotComponentProps<"div", import("@mui/base").PopperUnstyledRootSlotPropsOverrides, import("@mui/base").PopperUnstyledOwnProps> | undefined;
25
+ root?: import("@mui/base").SlotComponentProps<"div", import("@mui/base").PopperRootSlotPropsOverrides, import("@mui/base").PopperOwnProps> | undefined;
25
26
  } | undefined;
26
27
  sx?: import("@mui/material/styles").SxProps<import("@mui/material/styles").Theme> | undefined;
27
28
  } & React.RefAttributes<HTMLDivElement>, "hidden" | "color" | "content" | "style" | "open" | "translate" | "container" | "transition" | "slot" | "title" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoFocus" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "nonce" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "component" | "sx" | "components" | "placement" | "disablePortal" | "modifiers" | "anchorEl" | "keepMounted" | "popperOptions" | "popperRef" | "slotProps" | "slots" | "componentsProps" | keyof React.RefAttributes<HTMLDivElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
@@ -69,7 +69,9 @@ const GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolb
69
69
  children: activeFilters.map((item, index) => _extends({}, lookup[item.field] && /*#__PURE__*/_jsx("li", {
70
70
  children: `${lookup[item.field].headerName || item.field}
71
71
  ${getOperatorLabel(item)}
72
- ${item.value ? getFilterItemValue(item) : ''}`
72
+ ${
73
+ // implicit check for null and undefined
74
+ item.value != null ? getFilterItemValue(item) : ''}`
73
75
  }, index)))
74
76
  })]
75
77
  });
@@ -2,4 +2,4 @@ import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_gen
2
2
  export function getDataGridUtilityClass(slot) {
3
3
  return generateUtilityClass('MuiDataGrid', slot);
4
4
  }
5
- export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', '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', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', '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', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
5
+ export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', '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', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', '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', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -7,10 +7,7 @@ import { gridColumnGroupsLookupSelector, gridColumnGroupsUnwrappedModelSelector
7
7
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
8
8
  import { getColumnGroupsHeaderStructure, unwrapGroupingColumnModel } from './gridColumnGroupsUtils';
9
9
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
10
- import { gridColumnFieldsSelector,
11
- // GridColumnsState,
12
- gridVisibleColumnFieldsSelector } from '../columns';
13
- import { useGridSelector } from '../../utils/useGridSelector';
10
+ import { gridColumnFieldsSelector, gridVisibleColumnFieldsSelector } from '../columns';
14
11
  const createGroupLookup = columnGroupingModel => {
15
12
  let groupLookup = {};
16
13
  columnGroupingModel.forEach(node => {
@@ -102,19 +99,15 @@ export const useGridColumnGrouping = (apiRef, props) => {
102
99
  });
103
100
  });
104
101
  }, [apiRef, props.columnGroupingModel]);
105
- useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);
106
- const columnFields = useGridSelector(apiRef, gridColumnFieldsSelector);
107
- const visibleColumnFields = useGridSelector(apiRef, gridVisibleColumnFieldsSelector);
108
- /**
109
- * EFFECTS
110
- */
111
- React.useEffect(() => {
112
- var _props$experimentalFe2, _props$columnGrouping4, _props$columnGrouping5;
102
+ const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
103
+ var _props$experimentalFe2;
113
104
  if (!((_props$experimentalFe2 = props.experimentalFeatures) != null && _props$experimentalFe2.columnGrouping)) {
114
105
  return;
115
106
  }
116
- const groupLookup = createGroupLookup((_props$columnGrouping4 = props.columnGroupingModel) != null ? _props$columnGrouping4 : []);
117
- const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping5 = props.columnGroupingModel) != null ? _props$columnGrouping5 : []);
107
+ const columnFields = gridColumnFieldsSelector(apiRef);
108
+ const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
109
+ const groupLookup = createGroupLookup(columnGroupingModel != null ? columnGroupingModel : []);
110
+ const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel != null ? columnGroupingModel : []);
118
111
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel);
119
112
  const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
120
113
  var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
@@ -130,5 +123,19 @@ export const useGridColumnGrouping = (apiRef, props) => {
130
123
  }
131
124
  });
132
125
  });
133
- }, [apiRef, columnFields, visibleColumnFields, props.columnGroupingModel, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
126
+ }, [apiRef, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
127
+ useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);
128
+ useGridApiEventHandler(apiRef, 'columnsChange', () => {
129
+ updateColumnGroupingState(props.columnGroupingModel);
130
+ });
131
+ useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', () => {
132
+ updateColumnGroupingState(props.columnGroupingModel);
133
+ });
134
+
135
+ /**
136
+ * EFFECTS
137
+ */
138
+ React.useEffect(() => {
139
+ updateColumnGroupingState(props.columnGroupingModel);
140
+ }, [updateColumnGroupingState, props.columnGroupingModel]);
134
141
  };
@@ -298,9 +298,9 @@ export const useGridFocus = (apiRef, props) => {
298
298
  useGridApiMethod(apiRef, focusPrivateApi, 'private');
299
299
  React.useEffect(() => {
300
300
  const doc = ownerDocument(apiRef.current.rootElementRef.current);
301
- doc.addEventListener('click', handleDocumentClick);
301
+ doc.addEventListener('mouseup', handleDocumentClick);
302
302
  return () => {
303
- doc.removeEventListener('click', handleDocumentClick);
303
+ doc.removeEventListener('mouseup', handleDocumentClick);
304
304
  };
305
305
  }, [apiRef, handleDocumentClick]);
306
306
  useGridApiEventHandler(apiRef, 'columnHeaderBlur', handleBlur);
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v6.2.1
2
+ * @mui/x-data-grid v6.3.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the