@mui/x-data-grid 6.2.0 → 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 (110) hide show
  1. package/CHANGELOG.md +118 -1
  2. package/components/GridHeader.d.ts +2 -2
  3. package/components/GridHeader.js +4 -6
  4. package/components/base/GridBody.d.ts +0 -1
  5. package/components/base/GridBody.js +39 -15
  6. package/components/cell/GridActionsCell.d.ts +2 -3
  7. package/components/cell/GridActionsCell.js +9 -1
  8. package/components/columnSelection/GridCellCheckboxRenderer.d.ts +1 -1
  9. package/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  10. package/components/columnSelection/GridHeaderCheckbox.d.ts +1 -1
  11. package/components/containers/GridMainContainer.d.ts +3 -1
  12. package/components/containers/GridMainContainer.js +3 -2
  13. package/components/containers/GridRoot.js +0 -5
  14. package/components/containers/GridRootStyles.js +3 -1
  15. package/components/index.d.ts +0 -1
  16. package/components/index.js +0 -1
  17. package/components/panel/GridColumnsPanel.js +3 -2
  18. package/components/panel/GridPanel.d.ts +3 -3
  19. package/components/panel/GridPanel.js +2 -1
  20. package/components/panel/filterPanel/GridFilterPanel.js +5 -2
  21. package/constants/gridClasses.js +1 -1
  22. package/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  23. package/hooks/features/dimensions/gridDimensionsApi.d.ts +4 -0
  24. package/hooks/features/dimensions/useGridDimensions.js +49 -10
  25. package/hooks/features/export/useGridPrintExport.js +3 -1
  26. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -0
  27. package/hooks/features/virtualization/useGridVirtualScroller.js +11 -5
  28. package/index.js +1 -1
  29. package/joy/index.d.ts +2 -0
  30. package/joy/index.js +2 -0
  31. package/joy/joySlots.d.ts +4 -0
  32. package/joy/joySlots.js +179 -0
  33. package/joy/package.json +6 -0
  34. package/legacy/components/GridHeader.js +4 -6
  35. package/legacy/components/base/GridBody.js +40 -16
  36. package/legacy/components/cell/GridActionsCell.js +11 -2
  37. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  38. package/legacy/components/containers/GridMainContainer.js +3 -2
  39. package/legacy/components/containers/GridRoot.js +0 -5
  40. package/legacy/components/containers/GridRootStyles.js +3 -1
  41. package/legacy/components/index.js +0 -1
  42. package/legacy/components/panel/GridColumnsPanel.js +3 -2
  43. package/legacy/components/panel/GridPanel.js +2 -1
  44. package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -2
  45. package/legacy/constants/gridClasses.js +1 -1
  46. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +22 -15
  47. package/legacy/hooks/features/dimensions/useGridDimensions.js +55 -12
  48. package/legacy/hooks/features/export/useGridPrintExport.js +3 -1
  49. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +12 -6
  50. package/legacy/index.js +1 -1
  51. package/legacy/joy/index.js +2 -0
  52. package/legacy/joy/joySlots.js +180 -0
  53. package/legacy/locales/frFR.js +2 -2
  54. package/legacy/locales/trTR.js +2 -2
  55. package/legacy/locales/zhCN.js +2 -2
  56. package/locales/frFR.js +2 -2
  57. package/locales/trTR.js +2 -2
  58. package/locales/zhCN.js +2 -2
  59. package/material/index.d.ts +2 -2
  60. package/models/gridSlotsComponent.d.ts +2 -2
  61. package/modern/components/GridHeader.js +4 -6
  62. package/modern/components/base/GridBody.js +39 -15
  63. package/modern/components/cell/GridActionsCell.js +9 -1
  64. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  65. package/modern/components/containers/GridMainContainer.js +3 -2
  66. package/modern/components/containers/GridRoot.js +0 -5
  67. package/modern/components/containers/GridRootStyles.js +3 -1
  68. package/modern/components/index.js +0 -1
  69. package/modern/components/panel/GridColumnsPanel.js +3 -2
  70. package/modern/components/panel/GridPanel.js +2 -1
  71. package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -2
  72. package/modern/constants/gridClasses.js +1 -1
  73. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +21 -14
  74. package/modern/hooks/features/dimensions/useGridDimensions.js +48 -10
  75. package/modern/hooks/features/export/useGridPrintExport.js +3 -1
  76. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +11 -5
  77. package/modern/index.js +1 -1
  78. package/modern/joy/index.js +2 -0
  79. package/modern/joy/joySlots.js +177 -0
  80. package/modern/locales/frFR.js +2 -2
  81. package/modern/locales/trTR.js +2 -2
  82. package/modern/locales/zhCN.js +2 -2
  83. package/node/components/GridHeader.js +5 -8
  84. package/node/components/base/GridBody.js +39 -15
  85. package/node/components/cell/GridActionsCell.js +9 -1
  86. package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  87. package/node/components/containers/GridMainContainer.js +5 -3
  88. package/node/components/containers/GridRoot.js +0 -5
  89. package/node/components/containers/GridRootStyles.js +3 -1
  90. package/node/components/index.js +0 -11
  91. package/node/components/panel/GridColumnsPanel.js +3 -2
  92. package/node/components/panel/GridPanel.js +2 -1
  93. package/node/components/panel/filterPanel/GridFilterPanel.js +5 -2
  94. package/node/constants/gridClasses.js +1 -1
  95. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +20 -11
  96. package/node/hooks/features/dimensions/useGridDimensions.js +47 -9
  97. package/node/hooks/features/export/useGridPrintExport.js +3 -1
  98. package/node/hooks/features/virtualization/useGridVirtualScroller.js +11 -5
  99. package/node/index.js +1 -1
  100. package/node/joy/index.js +13 -0
  101. package/node/joy/joySlots.js +185 -0
  102. package/node/locales/frFR.js +2 -2
  103. package/node/locales/trTR.js +2 -2
  104. package/node/locales/zhCN.js +2 -2
  105. package/package.json +3 -3
  106. package/components/GridAutoSizer.d.ts +0 -44
  107. package/components/GridAutoSizer.js +0 -126
  108. package/legacy/components/GridAutoSizer.js +0 -132
  109. package/modern/components/GridAutoSizer.js +0 -125
  110. package/node/components/GridAutoSizer.js +0 -132
@@ -0,0 +1,177 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
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"];
7
+ import * as React from 'react';
8
+ import JoyCheckbox from '@mui/joy/Checkbox';
9
+ import JoyInput from '@mui/joy/Input';
10
+ import JoyFormControl from '@mui/joy/FormControl';
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';
15
+ import { jsx as _jsx } from "react/jsx-runtime";
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
+ }
45
+ const Checkbox = /*#__PURE__*/React.forwardRef((_ref, ref) => {
46
+ let {
47
+ inputProps,
48
+ onChange,
49
+ checked,
50
+ inputRef
51
+ } = _ref,
52
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
53
+ return /*#__PURE__*/_jsx(JoyCheckbox, _extends({}, props, {
54
+ slotProps: {
55
+ input: _extends({}, inputProps, {
56
+ ref: inputRef
57
+ })
58
+ },
59
+ ref: ref,
60
+ checked: checked,
61
+ onChange: onChange
62
+ }));
63
+ });
64
+ const TextField = /*#__PURE__*/React.forwardRef(({
65
+ onChange,
66
+ label,
67
+ placeholder,
68
+ value,
69
+ inputRef,
70
+ type
71
+ }, ref) => {
72
+ return /*#__PURE__*/_jsxs(JoyFormControl, {
73
+ ref: ref,
74
+ children: [/*#__PURE__*/_jsx(JoyFormLabel, {
75
+ sx: {
76
+ fontSize: 12
77
+ },
78
+ children: label
79
+ }), /*#__PURE__*/_jsx(JoyInput, {
80
+ type: type,
81
+ value: value,
82
+ onChange: onChange,
83
+ placeholder: placeholder,
84
+ size: "sm",
85
+ slotProps: {
86
+ input: {
87
+ ref: inputRef
88
+ }
89
+ }
90
+ })]
91
+ });
92
+ });
93
+ const Button = /*#__PURE__*/React.forwardRef(function Button(_ref2, ref) {
94
+ let {
95
+ startIcon,
96
+ color,
97
+ endIcon,
98
+ size,
99
+ sx,
100
+ variant
101
+ } = _ref2,
102
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded2);
103
+ return /*#__PURE__*/_jsx(JoyButton, _extends({}, props, {
104
+ size: convertSize(size),
105
+ color: convertColor(color),
106
+ variant: convertVariant(variant) ?? 'plain',
107
+ ref: ref,
108
+ startDecorator: startIcon,
109
+ endDecorator: endIcon,
110
+ sx: sx
111
+ }));
112
+ });
113
+ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(_ref3, ref) {
114
+ let {
115
+ color,
116
+ size,
117
+ sx
118
+ } = _ref3,
119
+ props = _objectWithoutPropertiesLoose(_ref3, _excluded3);
120
+ return /*#__PURE__*/_jsx(JoyIconButton, _extends({}, props, {
121
+ size: convertSize(size),
122
+ color: convertColor(color) ?? 'neutral',
123
+ variant: "plain",
124
+ ref: ref,
125
+ sx: sx
126
+ }));
127
+ });
128
+ const Switch = /*#__PURE__*/React.forwardRef(function Switch(_ref4, ref) {
129
+ let {
130
+ name,
131
+ color: colorProp,
132
+ edge,
133
+ icon,
134
+ inputProps,
135
+ inputRef,
136
+ size,
137
+ sx,
138
+ onChange,
139
+ onClick
140
+ } = _ref4,
141
+ props = _objectWithoutPropertiesLoose(_ref4, _excluded4);
142
+ return /*#__PURE__*/_jsx(JoySwitch, _extends({}, props, {
143
+ onChange: onChange,
144
+ size: convertSize(size),
145
+ color: convertColor(colorProp),
146
+ ref: ref,
147
+ slotProps: {
148
+ input: _extends({}, inputProps, {
149
+ name,
150
+ onClick: onClick,
151
+ ref: inputRef
152
+ }),
153
+ thumb: {
154
+ children: icon
155
+ }
156
+ },
157
+ sx: [_extends({}, edge === 'start' && {
158
+ ml: '-8px'
159
+ }, edge === 'end' && {
160
+ mr: '-8px'
161
+ }), ...(Array.isArray(sx) ? sx : [sx])]
162
+ }));
163
+ });
164
+ const joySlots = {
165
+ baseCheckbox: Checkbox,
166
+ baseTextField: TextField,
167
+ baseButton: Button,
168
+ baseIconButton: IconButton,
169
+ baseSwitch: Switch
170
+ // BaseFormControl: MUIFormControl,
171
+ // baseSelect: Select,
172
+ // baseSelectOption: Option,
173
+ // BaseTooltip: MUITooltip,
174
+ // BasePopper: MUIPopper,
175
+ };
176
+
177
+ export default joySlots;
@@ -37,7 +37,7 @@ const frFRGrid = {
37
37
  columnsPanelHideAllButton: 'Tout cacher',
38
38
  // Filter panel text
39
39
  filterPanelAddFilter: 'Ajouter un filtre',
40
- // filterPanelRemoveAll: 'Remove all',
40
+ filterPanelRemoveAll: 'Tout supprimer',
41
41
  filterPanelDeleteIconLabel: 'Supprimer',
42
42
  filterPanelLogicOperator: 'Opérateur logique',
43
43
  filterPanelOperator: 'Opérateur',
@@ -67,7 +67,7 @@ const frFRGrid = {
67
67
  // Column menu text
68
68
  columnMenuLabel: 'Menu',
69
69
  columnMenuShowColumns: 'Afficher les colonnes',
70
- // columnMenuManageColumns: 'Manage columns',
70
+ columnMenuManageColumns: 'Gérer les colonnes',
71
71
  columnMenuFilter: 'Filtrer',
72
72
  columnMenuHideColumn: 'Cacher',
73
73
  columnMenuUnsort: 'Annuler le tri',
@@ -37,7 +37,7 @@ const trTRGrid = {
37
37
  columnsPanelHideAllButton: 'Hepsini gizle',
38
38
  // Filter panel text
39
39
  filterPanelAddFilter: 'Filtre Ekle',
40
- // filterPanelRemoveAll: 'Remove all',
40
+ filterPanelRemoveAll: 'Hepsini kaldır',
41
41
  filterPanelDeleteIconLabel: 'Kaldır',
42
42
  filterPanelLogicOperator: 'Mantıksal operatörler',
43
43
  filterPanelOperator: 'Operatör',
@@ -67,7 +67,7 @@ const trTRGrid = {
67
67
  // Column menu text
68
68
  columnMenuLabel: 'Menü',
69
69
  columnMenuShowColumns: 'Sütunları göster',
70
- // columnMenuManageColumns: 'Manage columns',
70
+ columnMenuManageColumns: 'Sütunları yönet',
71
71
  columnMenuFilter: 'Filtre uygula',
72
72
  columnMenuHideColumn: 'Gizle',
73
73
  columnMenuUnsort: 'Sıralama',
@@ -37,7 +37,7 @@ const zhCNGrid = {
37
37
  columnsPanelHideAllButton: '隐藏所有',
38
38
  // Filter panel text
39
39
  filterPanelAddFilter: '添加筛选器',
40
- // filterPanelRemoveAll: 'Remove all',
40
+ filterPanelRemoveAll: '清除全部',
41
41
  filterPanelDeleteIconLabel: '删除',
42
42
  filterPanelLogicOperator: '逻辑操作器',
43
43
  filterPanelOperator: '操作器',
@@ -67,7 +67,7 @@ const zhCNGrid = {
67
67
  // Column menu text
68
68
  columnMenuLabel: '菜单',
69
69
  columnMenuShowColumns: '显示',
70
- // columnMenuManageColumns: 'Manage columns',
70
+ columnMenuManageColumns: '管理列',
71
71
  columnMenuFilter: '筛选器',
72
72
  columnMenuHideColumn: '隐藏',
73
73
  columnMenuUnsort: '恢复默认',
@@ -4,19 +4,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.GridHeader = void 0;
7
+ exports.GridHeader = GridHeader;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _useGridRootProps = require("../hooks/utils/useGridRootProps");
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
12
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
13
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
- const GridHeader = /*#__PURE__*/React.forwardRef(function GridHeader(props, ref) {
14
+ function GridHeader() {
15
15
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
16
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
17
- ref: ref
18
- }, props, {
16
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
19
17
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.preferencesPanel, (0, _extends2.default)({}, rootProps.slotProps?.preferencesPanel)), rootProps.slots.toolbar && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.toolbar, (0, _extends2.default)({}, rootProps.slotProps?.toolbar))]
20
- }));
21
- });
22
- exports.GridHeader = GridHeader;
18
+ });
19
+ }
@@ -8,10 +8,10 @@ exports.GridBody = GridBody;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _utils = require("@mui/utils");
11
12
  var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
12
13
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
13
14
  var _GridMainContainer = require("../containers/GridMainContainer");
14
- var _GridAutoSizer = require("../GridAutoSizer");
15
15
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
16
16
  var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
17
17
  var _gridFilterSelector = require("../../hooks/features/filter/gridFilterSelector");
@@ -25,12 +25,12 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
25
25
  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; }
26
26
  function GridBody(props) {
27
27
  const {
28
- children,
29
28
  VirtualScrollerComponent,
30
29
  ColumnHeadersProps
31
30
  } = props;
32
31
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
33
32
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
33
+ const rootRef = React.useRef(null);
34
34
  const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
35
35
  const filterColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterActiveItemsLookupSelector);
36
36
  const sortColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortColumnLookupSelector);
@@ -47,6 +47,31 @@ function GridBody(props) {
47
47
  const columnGroupsHeaderStructure = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsHeaderStructureSelector);
48
48
  const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && cellTabIndexState === null);
49
49
  const [isVirtualizationDisabled, setIsVirtualizationDisabled] = React.useState(rootProps.disableVirtualization);
50
+ (0, _utils.unstable_useEnhancedEffect)(() => {
51
+ apiRef.current.computeSizeAndPublishResizeEvent();
52
+ const elementToObserve = rootRef.current;
53
+ if (typeof ResizeObserver === 'undefined') {
54
+ return () => {};
55
+ }
56
+ let animationFrame;
57
+ const observer = new ResizeObserver(() => {
58
+ // See https://github.com/mui/mui-x/issues/8733
59
+ animationFrame = window.requestAnimationFrame(() => {
60
+ apiRef.current.computeSizeAndPublishResizeEvent();
61
+ });
62
+ });
63
+ if (elementToObserve) {
64
+ observer.observe(elementToObserve);
65
+ }
66
+ return () => {
67
+ if (animationFrame) {
68
+ window.cancelAnimationFrame(animationFrame);
69
+ }
70
+ if (elementToObserve) {
71
+ observer.unobserve(elementToObserve);
72
+ }
73
+ };
74
+ }, [apiRef]);
50
75
  const disableVirtualization = React.useCallback(() => {
51
76
  setIsVirtualizationDisabled(true);
52
77
  }, []);
@@ -73,10 +98,9 @@ function GridBody(props) {
73
98
  columnHeadersElementRef: columnHeadersRef,
74
99
  virtualScrollerRef
75
100
  });
76
- const handleResize = React.useCallback(size => {
77
- apiRef.current.publishEvent('resize', size);
78
- }, [apiRef]);
101
+ const hasDimensions = !!apiRef.current.getRootDimensions();
79
102
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridMainContainer.GridMainContainer, {
103
+ ref: rootRef,
80
104
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaders, (0, _extends2.default)({
81
105
  ref: columnsContainerRef,
82
106
  innerRef: columnHeadersRef,
@@ -94,15 +118,16 @@ function GridBody(props) {
94
118
  columnVisibility: columnVisibility,
95
119
  columnGroupsHeaderStructure: columnGroupsHeaderStructure,
96
120
  hasOtherElementInTabSequence: hasOtherElementInTabSequence
97
- }, ColumnHeadersProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridAutoSizer.GridAutoSizer, {
98
- nonce: rootProps.nonce,
99
- disableHeight: rootProps.autoHeight,
100
- onResize: handleResize,
101
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerComponent, {
102
- ref: virtualScrollerRef,
103
- disableVirtualization: isVirtualizationDisabled
104
- })
105
- }), children]
121
+ }, ColumnHeadersProps)), hasDimensions && /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerComponent
122
+ // The content is only rendered after dimensions are computed because
123
+ // the lazy-loading hook is listening to `renderedRowsIntervalChange`,
124
+ // but only does something if the dimensions are also available.
125
+ // If this event is published while dimensions haven't been computed,
126
+ // the `onFetchRows` prop won't be called during mount.
127
+ , {
128
+ ref: virtualScrollerRef,
129
+ disableVirtualization: isVirtualizationDisabled
130
+ })]
106
131
  });
107
132
  }
108
133
  process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
@@ -110,7 +135,6 @@ process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
110
135
  // | These PropTypes are generated from the TypeScript type definitions |
111
136
  // | To update them edit the TypeScript types and run "yarn proptypes" |
112
137
  // ----------------------------------------------------------------------
113
- children: _propTypes.default.node,
114
138
  ColumnHeadersProps: _propTypes.default.object,
115
139
  VirtualScrollerComponent: _propTypes.default.elementType.isRequired
116
140
  } : void 0;
@@ -18,7 +18,7 @@ var _GridMenu = require("../menu/GridMenu");
18
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
19
19
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
- const _excluded = ["colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
21
+ const _excluded = ["api", "colDef", "id", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "tabIndex", "position", "focusElementRef"];
22
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
23
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
24
24
  const hasActions = colDef => typeof colDef.getActions === 'function';
@@ -197,6 +197,7 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
197
197
  // | These PropTypes are generated from the TypeScript type definitions |
198
198
  // | To update them edit the TypeScript types and run "yarn proptypes" |
199
199
  // ----------------------------------------------------------------------
200
+ api: _propTypes.default.object,
200
201
  /**
201
202
  * The mode of the cell.
202
203
  */
@@ -219,6 +220,9 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
219
220
  focus: _propTypes.default.func.isRequired
220
221
  })
221
222
  })]),
223
+ /**
224
+ * The cell value formatted with the column valueFormatter.
225
+ */
222
226
  formattedValue: _propTypes.default.any,
223
227
  /**
224
228
  * If true, the cell is the active element.
@@ -245,6 +249,10 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
245
249
  * the tabIndex value.
246
250
  */
247
251
  tabIndex: _propTypes.default.oneOf([-1, 0]).isRequired,
252
+ /**
253
+ * The cell value.
254
+ * If the column has `valueGetter`, use `params.row` to directly access the fields.
255
+ */
248
256
  value: _propTypes.default.any
249
257
  } : void 0;
250
258
  const renderActionsCell = params => /*#__PURE__*/(0, _jsxRuntime.jsx)(GridActionsCell, (0, _extends2.default)({}, params));
@@ -44,7 +44,7 @@ const GridCellCheckboxForwardRef = /*#__PURE__*/React.forwardRef(function GridCe
44
44
  };
45
45
  const classes = useUtilityClasses(ownerState);
46
46
  const checkboxElement = React.useRef(null);
47
- const rippleRef = React.useRef();
47
+ const rippleRef = React.useRef(null);
48
48
  const handleRef = (0, _utils.unstable_useForkRef)(checkboxElement, ref);
49
49
  const element = apiRef.current.getCellElement(id, field);
50
50
  const handleChange = event => {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.GridMainContainer = GridMainContainer;
6
+ exports.GridMainContainer = void 0;
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _utils = require("@mui/utils");
9
9
  var _system = require("@mui/system");
@@ -32,12 +32,14 @@ const GridMainContainerRoot = (0, _system.styled)('div', {
32
32
  flexDirection: 'column',
33
33
  overflow: 'hidden'
34
34
  }));
35
- function GridMainContainer(props) {
35
+ const GridMainContainer = /*#__PURE__*/React.forwardRef((props, ref) => {
36
36
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
37
37
  const classes = useUtilityClasses(rootProps);
38
38
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridMainContainerRoot, {
39
+ ref: ref,
39
40
  className: classes.root,
40
41
  ownerState: rootProps,
41
42
  children: props.children
42
43
  });
43
- }
44
+ });
45
+ exports.GridMainContainer = GridMainContainer;
@@ -63,11 +63,6 @@ const GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {
63
63
  (0, _utils.unstable_useEnhancedEffect)(() => {
64
64
  setMountedState(true);
65
65
  }, []);
66
- (0, _utils.unstable_useEnhancedEffect)(() => {
67
- if (mountedState) {
68
- apiRef.current.updateGridDimensionsRef();
69
- }
70
- }, [apiRef, mountedState]);
71
66
  if (!mountedState) {
72
67
  return null;
73
68
  }
@@ -211,7 +211,9 @@ const GridRootStyles = (0, _styles.styled)('div', {
211
211
  minWidth: 0,
212
212
  flex: 1,
213
213
  whiteSpace: 'nowrap',
214
- overflow: 'hidden'
214
+ overflow: 'hidden',
215
+ // to anchor the aggregation label
216
+ position: 'relative'
215
217
  },
216
218
  [`& .${_gridClasses.gridClasses.columnHeaderTitleContainerContent}`]: {
217
219
  overflow: 'hidden',
@@ -113,17 +113,6 @@ Object.keys(_GridApiContext).forEach(function (key) {
113
113
  }
114
114
  });
115
115
  });
116
- var _GridAutoSizer = require("./GridAutoSizer");
117
- Object.keys(_GridAutoSizer).forEach(function (key) {
118
- if (key === "default" || key === "__esModule") return;
119
- if (key in exports && exports[key] === _GridAutoSizer[key]) return;
120
- Object.defineProperty(exports, key, {
121
- enumerable: true,
122
- get: function () {
123
- return _GridAutoSizer[key];
124
- }
125
- });
126
- });
127
116
  var _GridFooter = require("./GridFooter");
128
117
  Object.keys(_GridFooter).forEach(function (key) {
129
118
  if (key === "default" || key === "__esModule") return;
@@ -102,8 +102,9 @@ function GridColumnsPanel(props) {
102
102
  const toggleAllColumns = React.useCallback(isVisible => {
103
103
  const currentModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
104
104
  const newModel = (0, _extends2.default)({}, currentModel);
105
+ const togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;
105
106
  columns.forEach(col => {
106
- if (col.hideable) {
107
+ if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {
107
108
  if (isVisible) {
108
109
  // delete the key from the model instead of setting it to `true`
109
110
  delete newModel[col.field];
@@ -113,7 +114,7 @@ function GridColumnsPanel(props) {
113
114
  }
114
115
  });
115
116
  return apiRef.current.setColumnVisibilityModel(newModel);
116
- }, [apiRef, columns]);
117
+ }, [apiRef, columns, getTogglableColumns]);
117
118
  const handleSearchValueChange = React.useCallback(event => {
118
119
  setSearchValue(event.target.value);
119
120
  }, []);
@@ -126,5 +126,6 @@ process.env.NODE_ENV !== "production" ? GridPanel.propTypes = {
126
126
  /**
127
127
  * If `true`, the component is shown.
128
128
  */
129
- open: _propTypes.default.bool.isRequired
129
+ open: _propTypes.default.bool.isRequired,
130
+ ownerState: _propTypes.default.object
130
131
  } : void 0;
@@ -34,6 +34,7 @@ const GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(p
34
34
  const filterModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterModelSelector);
35
35
  const filterableColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridFilterableColumnDefinitionsSelector);
36
36
  const lastFilterRef = React.useRef(null);
37
+ const placeholderFilter = React.useRef(null);
37
38
  const {
38
39
  logicOperators = [_gridFilterItem.GridLogicOperator.And, _gridFilterItem.GridLogicOperator.Or],
39
40
  columnsSort,
@@ -97,8 +98,10 @@ const GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(p
97
98
  if (filterModel.items.length) {
98
99
  return filterModel.items;
99
100
  }
100
- const defaultFilter = getDefaultFilter();
101
- return defaultFilter ? [defaultFilter] : [];
101
+ if (!placeholderFilter.current) {
102
+ placeholderFilter.current = getDefaultFilter();
103
+ }
104
+ return placeholderFilter.current ? [placeholderFilter.current] : [];
102
105
  }, [filterModel.items, getDefaultFilter]);
103
106
  const hasMultipleFilters = items.length > 1;
104
107
  const addNewFilter = () => {
@@ -9,5 +9,5 @@ var _utils = require("@mui/utils");
9
9
  function getDataGridUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
11
11
  }
12
- const gridClasses = (0, _utils.unstable_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']);
12
+ const gridClasses = (0, _utils.unstable_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']);
13
13
  exports.gridClasses = gridClasses;
@@ -14,7 +14,6 @@ var _useGridApiMethod = require("../../utils/useGridApiMethod");
14
14
  var _gridColumnGroupsUtils = require("./gridColumnGroupsUtils");
15
15
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
16
16
  var _columns = require("../columns");
17
- var _useGridSelector = require("../../utils/useGridSelector");
18
17
  const _excluded = ["groupId", "children"];
19
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
19
  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; }
@@ -102,18 +101,14 @@ const useGridColumnGrouping = (apiRef, props) => {
102
101
  });
103
102
  });
104
103
  }, [apiRef, props.columnGroupingModel]);
105
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnIndexChange', handleColumnIndexChange);
106
- const columnFields = (0, _useGridSelector.useGridSelector)(apiRef, _columns.gridColumnFieldsSelector);
107
- const visibleColumnFields = (0, _useGridSelector.useGridSelector)(apiRef, _columns.gridVisibleColumnFieldsSelector);
108
- /**
109
- * EFFECTS
110
- */
111
- React.useEffect(() => {
104
+ const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
112
105
  if (!props.experimentalFeatures?.columnGrouping) {
113
106
  return;
114
107
  }
115
- const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
116
- const unwrappedGroupingModel = (0, _gridColumnGroupsUtils.unwrapGroupingColumnModel)(props.columnGroupingModel ?? []);
108
+ const columnFields = (0, _columns.gridColumnFieldsSelector)(apiRef);
109
+ const visibleColumnFields = (0, _columns.gridVisibleColumnFieldsSelector)(apiRef);
110
+ const groupLookup = createGroupLookup(columnGroupingModel ?? []);
111
+ const unwrappedGroupingModel = (0, _gridColumnGroupsUtils.unwrapGroupingColumnModel)(columnGroupingModel ?? []);
117
112
  const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(columnFields, unwrappedGroupingModel);
118
113
  const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
119
114
  apiRef.current.setState(state => {
@@ -126,6 +121,20 @@ const useGridColumnGrouping = (apiRef, props) => {
126
121
  }
127
122
  });
128
123
  });
129
- }, [apiRef, columnFields, visibleColumnFields, props.columnGroupingModel, props.experimentalFeatures?.columnGrouping]);
124
+ }, [apiRef, props.experimentalFeatures?.columnGrouping]);
125
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnIndexChange', handleColumnIndexChange);
126
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnsChange', () => {
127
+ updateColumnGroupingState(props.columnGroupingModel);
128
+ });
129
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnVisibilityModelChange', () => {
130
+ updateColumnGroupingState(props.columnGroupingModel);
131
+ });
132
+
133
+ /**
134
+ * EFFECTS
135
+ */
136
+ React.useEffect(() => {
137
+ updateColumnGroupingState(props.columnGroupingModel);
138
+ }, [updateColumnGroupingState, props.columnGroupingModel]);
130
139
  };
131
140
  exports.useGridColumnGrouping = useGridColumnGrouping;