@mui/x-data-grid 6.2.1 → 6.3.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 (45) hide show
  1. package/CHANGELOG.md +70 -1
  2. package/components/base/GridBody.js +8 -1
  3. package/components/cell/GridActionsCell.d.ts +2 -3
  4. package/components/cell/GridActionsCell.js +9 -1
  5. package/components/containers/GridRootStyles.js +3 -1
  6. package/components/panel/GridPanel.d.ts +2 -2
  7. package/constants/gridClasses.js +1 -1
  8. package/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  9. package/index.js +1 -1
  10. package/joy/joySlots.js +114 -6
  11. package/legacy/components/base/GridBody.js +8 -1
  12. package/legacy/components/cell/GridActionsCell.js +11 -2
  13. package/legacy/components/containers/GridRootStyles.js +3 -1
  14. package/legacy/constants/gridClasses.js +1 -1
  15. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  16. package/legacy/index.js +1 -1
  17. package/legacy/joy/joySlots.js +113 -6
  18. package/legacy/locales/frFR.js +2 -2
  19. package/legacy/locales/trTR.js +2 -2
  20. package/legacy/locales/zhCN.js +2 -2
  21. package/locales/frFR.js +2 -2
  22. package/locales/trTR.js +2 -2
  23. package/locales/zhCN.js +2 -2
  24. package/material/index.d.ts +2 -2
  25. package/modern/components/base/GridBody.js +8 -1
  26. package/modern/components/cell/GridActionsCell.js +9 -1
  27. package/modern/components/containers/GridRootStyles.js +3 -1
  28. package/modern/constants/gridClasses.js +1 -1
  29. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +21 -14
  30. package/modern/index.js +1 -1
  31. package/modern/joy/joySlots.js +112 -6
  32. package/modern/locales/frFR.js +2 -2
  33. package/modern/locales/trTR.js +2 -2
  34. package/modern/locales/zhCN.js +2 -2
  35. package/node/components/base/GridBody.js +8 -1
  36. package/node/components/cell/GridActionsCell.js +9 -1
  37. package/node/components/containers/GridRootStyles.js +3 -1
  38. package/node/constants/gridClasses.js +1 -1
  39. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +20 -11
  40. package/node/index.js +1 -1
  41. package/node/joy/joySlots.js +112 -6
  42. package/node/locales/frFR.js +2 -2
  43. package/node/locales/trTR.js +2 -2
  44. package/node/locales/zhCN.js +2 -2
  45. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,75 @@
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.0
7
+
8
+ _Apr 28, 2023_
9
+
10
+ We'd like to offer a big thanks to the 15 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🚀 New [time-picking UI](https://mui.com/x/react-date-pickers/digital-clock/) designed for desktops (#7958) @LukasTy
13
+
14
+ <img src="https://user-images.githubusercontent.com/4941090/235072007-de39a397-e4a4-4c98-8e10-5ee4ad440108.gif" width="494" />
15
+
16
+ - ✨ 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
17
+ - 🌍 Improve Chinese (zh-CN), French (fr-FR), and Turkish (tr-TR) locales
18
+ - 🐞 Bugfixes
19
+ - 📚 Documentation improvements
20
+
21
+ ### `@mui/x-data-grid@v6.3.0` / `@mui/x-data-grid-pro@v6.3.0` / `@mui/x-data-grid-premium@v6.3.0`
22
+
23
+ #### Changes
24
+
25
+ - [DataGrid] Add overlay classes to `gridClasses` (#8686) @lindapaiste
26
+ - [DataGrid] Avoid passing `api` prop to div (#8679) @someden
27
+ - [DataGrid] Fix 'ResizeObserver loop limit exceeded' error (#8744) @m4theushw
28
+ - [DataGrid] Add Joy UI slots (button and switch) (#8699) @siriwatknp
29
+ - [DataGrid] Fix aggregation label alignment (#8694) @joserodolfofreitas
30
+ - [DataGridPremium] Fix infinite loop when updating grouped rows (#8693) @cherniavskii
31
+ - [DataGridPro] Fix error after updating `columns` and `columnGroupingModel` at once (#8730) @cherniavskii
32
+ - [l10n] Improve Chinese (zh-CN) locale (#8753) @SakumyZ
33
+ - [l10n] Improve French (fr-FR) locale (#8704) @Jul13nT
34
+ - [l10n] Improve Turkish (tr-TR) locale (#8783) @cccaaannn
35
+
36
+ ### `@mui/x-date-pickers@v6.3.0` / `@mui/x-date-pickers-pro@v6.3.0`
37
+
38
+ #### Changes
39
+
40
+ - [fields] Always add leading zeroes on digit sections (#8527) @flaviendelangle
41
+ - [fields] Pass the `readOnly` prop to `InputProps` instead of `inputProps` (#8659) @flaviendelangle
42
+ - [pickers] Add missing export for `caES` locale (#8782) @flaviendelangle
43
+ - [pickers] Add new `DigitalClock` desktop time picking experience (#7958) @LukasTy
44
+ - [pickers] Do not use `instanceOf DateTime` in `AdapterLuxon` (#8734) @flaviendelangle
45
+ - [pickers] Fix date calendar `selected` & `disabled` day style (#8773) @LukasTy
46
+ - [pickers] Migrate `AdapterDateFns` to our repository (#8736) @flaviendelangle
47
+ - [pickers] Migrate `AdapterLuxon` to our repository (#8600) @flaviendelangle
48
+ - [pickers] Migrate `AdapterMomentHijri` to our repository (#8776) @flaviendelangle
49
+ - [pickers] Migrate `AdapterMomentJalaali` and `AdapterDateFnsJalali` to our repository (#8741) @flaviendelangle
50
+ - [pickers] Migrate `AdapterMoment` to our repository (#8700) @flaviendelangle
51
+ - [pickers] Refactor the validation files (#8622) @flaviendelangle
52
+ - [pickers] Use `en dash` instead of `em dash` in multi input range fields (#8738) @flaviendelangle
53
+ - [l10n] Improve Chinese (zh-CN) locale (#8753) @SakumyZ
54
+ - [l10n] Improve Turkish (tr-TR) locale (#8783) @cccaaannn
55
+
56
+ ### Docs
57
+
58
+ - [docs] Add icons for charts menu (#8752) @alexfauquette
59
+ - [docs] Document the supported formats (#8746) @flaviendelangle
60
+ - [docs] Fix Hijri demo (#8698) @alexfauquette
61
+ - [docs] Fix `x-codemod` package version in changelog (#8690) @MBilalShafi
62
+ - [docs] Fix columns special properties code example (#8414) @mikkelhl
63
+ - [docs] Fix error in `minDateTime` `validation` page section (#8777) @LukasTy
64
+ - [docs] Update custom field pickers using theme scoping (#8609) @siriwatknp
65
+ - [docs] Use community version of data grid for column grouping demo (#7346) @ASchwad
66
+ - [docs] Use new `slots` / `slotProps` props in the pickers migration guide (#8341) @flaviendelangle
67
+
68
+ ### Core
69
+
70
+ - [core] Cleanup picker tests (#8652) @flaviendelangle
71
+ - [core] Use `adapter.lib` instead of `adapterName` in `describeAdapters` (#8779) @flaviendelangle
72
+ - [charts] Adapt line and scatter plot to the "band" scale type (#8701) @alexfauquette
73
+ - [charts] Link the Gantt Charts issue in the docs (#8739) @flaviendelangle
74
+
6
75
  ## 6.2.1
7
76
 
8
77
  _Apr 20, 2023_
@@ -31,7 +100,7 @@ We'd like to offer a big thanks to the 9 contributors who made this release poss
31
100
  - [pickers] Do not include the time in date components when going to today (#8657) @flaviendelangle
32
101
  - [pickers] Sync internal state with controlled value (#8674) @alexfauquette
33
102
 
34
- ### `@mui/x-codemod@v6.0.6`
103
+ ### `@mui/x-codemod@v6.2.1`
35
104
 
36
105
  #### Changes
37
106
 
@@ -45,13 +45,20 @@ function GridBody(props) {
45
45
  if (typeof ResizeObserver === 'undefined') {
46
46
  return () => {};
47
47
  }
48
+ let animationFrame;
48
49
  const observer = new ResizeObserver(() => {
49
- apiRef.current.computeSizeAndPublishResizeEvent();
50
+ // See https://github.com/mui/mui-x/issues/8733
51
+ animationFrame = window.requestAnimationFrame(() => {
52
+ apiRef.current.computeSizeAndPublishResizeEvent();
53
+ });
50
54
  });
51
55
  if (elementToObserve) {
52
56
  observer.observe(elementToObserve);
53
57
  }
54
58
  return () => {
59
+ if (animationFrame) {
60
+ window.cancelAnimationFrame(animationFrame);
61
+ }
55
62
  if (elementToObserve) {
56
63
  observer.unobserve(elementToObserve);
57
64
  }
@@ -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,12 @@ 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
20
  components?: {
21
21
  Root?: React.ElementType<any> | undefined;
22
22
  } | undefined;
23
23
  componentsProps?: {
24
- root?: import("@mui/base").SlotComponentProps<"div", import("@mui/base").PopperUnstyledRootSlotPropsOverrides, import("@mui/base").PopperUnstyledOwnProps> | undefined;
24
+ root?: import("@mui/base").SlotComponentProps<"div", import("@mui/base").PopperRootSlotPropsOverrides, import("@mui/base").PopperOwnProps> | undefined;
25
25
  } | undefined;
26
26
  sx?: import("@mui/material/styles").SxProps<import("@mui/material/styles").Theme> | undefined;
27
27
  } & 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> & {
@@ -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
  };
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.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/joy/joySlots.js CHANGED
@@ -1,13 +1,47 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["touchRippleRef", "inputProps", "onChange", "color", "size", "checked", "sx", "value", "inputRef"];
3
+ const _excluded = ["touchRippleRef", "inputProps", "onChange", "color", "size", "checked", "sx", "value", "inputRef"],
4
+ _excluded2 = ["startIcon", "color", "endIcon", "size", "sx", "variant"],
5
+ _excluded3 = ["color", "size", "sx"],
6
+ _excluded4 = ["name", "checkedIcon", "color", "disableRipple", "disableFocusRipple", "disableTouchRipple", "edge", "icon", "inputProps", "inputRef", "size", "sx", "onChange", "onClick"];
4
7
  import * as React from 'react';
5
8
  import JoyCheckbox from '@mui/joy/Checkbox';
6
9
  import JoyInput from '@mui/joy/Input';
7
10
  import JoyFormControl from '@mui/joy/FormControl';
8
11
  import JoyFormLabel from '@mui/joy/FormLabel';
12
+ import JoyButton from '@mui/joy/Button';
13
+ import JoyIconButton from '@mui/joy/IconButton';
14
+ import JoySwitch from '@mui/joy/Switch';
9
15
  import { jsx as _jsx } from "react/jsx-runtime";
10
16
  import { jsxs as _jsxs } from "react/jsx-runtime";
17
+ function convertColor(color) {
18
+ if (color === 'secondary') {
19
+ return 'primary';
20
+ }
21
+ if (color === 'error') {
22
+ return 'danger';
23
+ }
24
+ if (color === 'default' || color === 'inherit') {
25
+ return 'neutral';
26
+ }
27
+ return color;
28
+ }
29
+ function convertSize(size) {
30
+ return size ? {
31
+ small: 'sm',
32
+ medium: 'md',
33
+ large: 'lg'
34
+ }[size] : size;
35
+ }
36
+ function convertVariant(variant) {
37
+ return variant ? {
38
+ outlined: 'outlined',
39
+ contained: 'solid',
40
+ text: 'plain',
41
+ standard: 'plain',
42
+ filled: 'soft'
43
+ }[variant] : variant;
44
+ }
11
45
  const Checkbox = /*#__PURE__*/React.forwardRef((_ref, ref) => {
12
46
  let {
13
47
  inputProps,
@@ -56,14 +90,88 @@ const TextField = /*#__PURE__*/React.forwardRef(({
56
90
  })]
57
91
  });
58
92
  });
93
+ const Button = /*#__PURE__*/React.forwardRef(function Button(_ref2, ref) {
94
+ var _convertVariant;
95
+ let {
96
+ startIcon,
97
+ color,
98
+ endIcon,
99
+ size,
100
+ sx,
101
+ variant
102
+ } = _ref2,
103
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded2);
104
+ return /*#__PURE__*/_jsx(JoyButton, _extends({}, props, {
105
+ size: convertSize(size),
106
+ color: convertColor(color),
107
+ variant: (_convertVariant = convertVariant(variant)) != null ? _convertVariant : 'plain',
108
+ ref: ref,
109
+ startDecorator: startIcon,
110
+ endDecorator: endIcon,
111
+ sx: sx
112
+ }));
113
+ });
114
+ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(_ref3, ref) {
115
+ var _convertColor;
116
+ let {
117
+ color,
118
+ size,
119
+ sx
120
+ } = _ref3,
121
+ props = _objectWithoutPropertiesLoose(_ref3, _excluded3);
122
+ return /*#__PURE__*/_jsx(JoyIconButton, _extends({}, props, {
123
+ size: convertSize(size),
124
+ color: (_convertColor = convertColor(color)) != null ? _convertColor : 'neutral',
125
+ variant: "plain",
126
+ ref: ref,
127
+ sx: sx
128
+ }));
129
+ });
130
+ const Switch = /*#__PURE__*/React.forwardRef(function Switch(_ref4, ref) {
131
+ let {
132
+ name,
133
+ color: colorProp,
134
+ edge,
135
+ icon,
136
+ inputProps,
137
+ inputRef,
138
+ size,
139
+ sx,
140
+ onChange,
141
+ onClick
142
+ } = _ref4,
143
+ props = _objectWithoutPropertiesLoose(_ref4, _excluded4);
144
+ return /*#__PURE__*/_jsx(JoySwitch, _extends({}, props, {
145
+ onChange: onChange,
146
+ size: convertSize(size),
147
+ color: convertColor(colorProp),
148
+ ref: ref,
149
+ slotProps: {
150
+ input: _extends({}, inputProps, {
151
+ name,
152
+ onClick: onClick,
153
+ ref: inputRef
154
+ }),
155
+ thumb: {
156
+ children: icon
157
+ }
158
+ },
159
+ sx: [_extends({}, edge === 'start' && {
160
+ ml: '-8px'
161
+ }, edge === 'end' && {
162
+ mr: '-8px'
163
+ }), ...(Array.isArray(sx) ? sx : [sx])]
164
+ }));
165
+ });
59
166
  const joySlots = {
60
167
  baseCheckbox: Checkbox,
61
- baseTextField: TextField
168
+ baseTextField: TextField,
169
+ baseButton: Button,
170
+ baseIconButton: IconButton,
171
+ baseSwitch: Switch
62
172
  // BaseFormControl: MUIFormControl,
63
- // BaseSelect: MUISelect,
64
- // BaseSwitch: MUISwitch,
65
- // BaseButton: MUIButton,
66
- // BaseIconButton: MUIIconButton,
173
+ // baseSelect: Select,
174
+ // baseSelectOption: Option,
67
175
  // BaseTooltip: MUITooltip,
68
176
  // BasePopper: MUIPopper,
69
177
  };
@@ -47,13 +47,20 @@ function GridBody(props) {
47
47
  if (typeof ResizeObserver === 'undefined') {
48
48
  return function () {};
49
49
  }
50
+ var animationFrame;
50
51
  var observer = new ResizeObserver(function () {
51
- apiRef.current.computeSizeAndPublishResizeEvent();
52
+ // See https://github.com/mui/mui-x/issues/8733
53
+ animationFrame = window.requestAnimationFrame(function () {
54
+ apiRef.current.computeSizeAndPublishResizeEvent();
55
+ });
52
56
  });
53
57
  if (elementToObserve) {
54
58
  observer.observe(elementToObserve);
55
59
  }
56
60
  return function () {
61
+ if (animationFrame) {
62
+ window.cancelAnimationFrame(animationFrame);
63
+ }
57
64
  if (elementToObserve) {
58
65
  observer.unobserve(elementToObserve);
59
66
  }
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
- var _excluded = ["colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
4
+ var _excluded = ["api", "colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
5
5
  import * as React from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import MenuList from '@mui/material/MenuList';
@@ -18,7 +18,8 @@ var hasActions = function hasActions(colDef) {
18
18
  };
19
19
  function GridActionsCell(props) {
20
20
  var _rootProps$slotProps;
21
- var colDef = props.colDef,
21
+ var api = props.api,
22
+ colDef = props.colDef,
22
23
  id = props.id,
23
24
  hasFocus = props.hasFocus,
24
25
  isEditable = props.isEditable,
@@ -221,6 +222,7 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
221
222
  // | These PropTypes are generated from the TypeScript type definitions |
222
223
  // | To update them edit the TypeScript types and run "yarn proptypes" |
223
224
  // ----------------------------------------------------------------------
225
+ api: PropTypes.object,
224
226
  /**
225
227
  * The mode of the cell.
226
228
  */
@@ -243,6 +245,9 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
243
245
  focus: PropTypes.func.isRequired
244
246
  })
245
247
  })]),
248
+ /**
249
+ * The cell value formatted with the column valueFormatter.
250
+ */
246
251
  formattedValue: PropTypes.any,
247
252
  /**
248
253
  * If true, the cell is the active element.
@@ -269,6 +274,10 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
269
274
  * the tabIndex value.
270
275
  */
271
276
  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,
277
+ /**
278
+ * The cell value.
279
+ * If the column has `valueGetter`, use `params.row` to directly access the fields.
280
+ */
272
281
  value: PropTypes.any
273
282
  } : void 0;
274
283
  export { GridActionsCell };
@@ -82,7 +82,9 @@ export var GridRootStyles = styled('div', {
82
82
  minWidth: 0,
83
83
  flex: 1,
84
84
  whiteSpace: 'nowrap',
85
- overflow: 'hidden'
85
+ overflow: 'hidden',
86
+ // to anchor the aggregation label
87
+ position: 'relative'
86
88
  }), _defineProperty(_extends2, "& .".concat(gridClasses.columnHeaderTitleContainerContent), {
87
89
  overflow: 'hidden',
88
90
  display: 'flex',
@@ -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 var 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 var 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']);
@@ -9,10 +9,7 @@ import { gridColumnGroupsLookupSelector, gridColumnGroupsUnwrappedModelSelector
9
9
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
10
10
  import { getColumnGroupsHeaderStructure, unwrapGroupingColumnModel } from './gridColumnGroupsUtils';
11
11
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
12
- import { gridColumnFieldsSelector,
13
- // GridColumnsState,
14
- gridVisibleColumnFieldsSelector } from '../columns';
15
- import { useGridSelector } from '../../utils/useGridSelector';
12
+ import { gridColumnFieldsSelector, gridVisibleColumnFieldsSelector } from '../columns';
16
13
  var createGroupLookup = function createGroupLookup(columnGroupingModel) {
17
14
  var groupLookup = {};
18
15
  columnGroupingModel.forEach(function (node) {
@@ -100,19 +97,15 @@ export var useGridColumnGrouping = function useGridColumnGrouping(apiRef, props)
100
97
  });
101
98
  });
102
99
  }, [apiRef, props.columnGroupingModel]);
103
- useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);
104
- var columnFields = useGridSelector(apiRef, gridColumnFieldsSelector);
105
- var visibleColumnFields = useGridSelector(apiRef, gridVisibleColumnFieldsSelector);
106
- /**
107
- * EFFECTS
108
- */
109
- React.useEffect(function () {
110
- var _props$experimentalFe2, _props$columnGrouping4, _props$columnGrouping5;
100
+ var updateColumnGroupingState = React.useCallback(function (columnGroupingModel) {
101
+ var _props$experimentalFe2;
111
102
  if (!((_props$experimentalFe2 = props.experimentalFeatures) != null && _props$experimentalFe2.columnGrouping)) {
112
103
  return;
113
104
  }
114
- var groupLookup = createGroupLookup((_props$columnGrouping4 = props.columnGroupingModel) != null ? _props$columnGrouping4 : []);
115
- var unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping5 = props.columnGroupingModel) != null ? _props$columnGrouping5 : []);
105
+ var columnFields = gridColumnFieldsSelector(apiRef);
106
+ var visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
107
+ var groupLookup = createGroupLookup(columnGroupingModel != null ? columnGroupingModel : []);
108
+ var unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel != null ? columnGroupingModel : []);
116
109
  var columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel);
117
110
  var maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max.apply(Math, _toConsumableArray(visibleColumnFields.map(function (field) {
118
111
  var _unwrappedGroupingMod4, _unwrappedGroupingMod5;
@@ -128,5 +121,19 @@ export var useGridColumnGrouping = function useGridColumnGrouping(apiRef, props)
128
121
  }
129
122
  });
130
123
  });
131
- }, [apiRef, columnFields, visibleColumnFields, props.columnGroupingModel, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
124
+ }, [apiRef, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
125
+ useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);
126
+ useGridApiEventHandler(apiRef, 'columnsChange', function () {
127
+ updateColumnGroupingState(props.columnGroupingModel);
128
+ });
129
+ useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', function () {
130
+ updateColumnGroupingState(props.columnGroupingModel);
131
+ });
132
+
133
+ /**
134
+ * EFFECTS
135
+ */
136
+ React.useEffect(function () {
137
+ updateColumnGroupingState(props.columnGroupingModel);
138
+ }, [updateColumnGroupingState, props.columnGroupingModel]);
132
139
  };
package/legacy/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v6.2.1
2
+ * @mui/x-data-grid v6.3.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the