@mui/x-data-grid-pro 6.6.0 → 6.7.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 (77) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/components/headerFiltering/GridHeaderFilterCell.d.ts +0 -1
  3. package/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  4. package/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  5. package/components/headerFiltering/GridHeaderFilterMenu.d.ts +5 -2
  6. package/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  7. package/components/headerFiltering/{GridHeaderFilterAdornment.d.ts → GridHeaderFilterMenuContainer.d.ts} +3 -3
  8. package/{modern/components/headerFiltering/GridHeaderFilterAdornment.js → components/headerFiltering/GridHeaderFilterMenuContainer.js} +23 -24
  9. package/components/headerFiltering/index.d.ts +2 -1
  10. package/components/headerFiltering/index.js +3 -2
  11. package/hooks/features/columnHeaders/useGridColumnHeaders.js +16 -8
  12. package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  13. package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  14. package/index.js +1 -1
  15. package/legacy/components/headerFiltering/GridHeaderFilterCell.js +39 -27
  16. package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  17. package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  18. package/legacy/components/headerFiltering/{GridHeaderFilterAdornment.js → GridHeaderFilterMenuContainer.js} +23 -25
  19. package/legacy/components/headerFiltering/index.js +3 -2
  20. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +14 -8
  21. package/legacy/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  22. package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  23. package/legacy/index.js +1 -1
  24. package/legacy/material/icons.js +1 -4
  25. package/legacy/material/index.js +2 -3
  26. package/legacy/utils/releaseInfo.js +1 -1
  27. package/legacy/utils/tree/insertDataRowInTree.js +8 -24
  28. package/legacy/utils/tree/sortRowTree.js +78 -18
  29. package/legacy/utils/tree/utils.js +27 -40
  30. package/material/icons.d.ts +0 -3
  31. package/material/icons.js +1 -4
  32. package/material/index.d.ts +0 -1
  33. package/material/index.js +2 -3
  34. package/models/gridProIconSlotsComponent.d.ts +0 -5
  35. package/modern/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  36. package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  37. package/modern/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  38. package/{components/headerFiltering/GridHeaderFilterAdornment.js → modern/components/headerFiltering/GridHeaderFilterMenuContainer.js} +22 -25
  39. package/modern/components/headerFiltering/index.js +3 -2
  40. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +16 -8
  41. package/modern/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  42. package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  43. package/modern/index.js +1 -1
  44. package/modern/material/icons.js +1 -4
  45. package/modern/material/index.js +2 -3
  46. package/modern/utils/releaseInfo.js +1 -1
  47. package/modern/utils/tree/insertDataRowInTree.js +8 -24
  48. package/modern/utils/tree/sortRowTree.js +64 -18
  49. package/modern/utils/tree/utils.js +10 -25
  50. package/node/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  51. package/node/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  52. package/node/components/headerFiltering/GridHeaderFilterMenu.js +36 -14
  53. package/node/components/headerFiltering/{GridHeaderFilterAdornment.js → GridHeaderFilterMenuContainer.js} +22 -24
  54. package/node/components/headerFiltering/index.js +15 -4
  55. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +15 -7
  56. package/node/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  57. package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  58. package/node/index.js +1 -1
  59. package/node/material/icons.js +2 -6
  60. package/node/material/index.js +1 -2
  61. package/node/utils/releaseInfo.js +1 -1
  62. package/node/utils/tree/insertDataRowInTree.js +7 -23
  63. package/node/utils/tree/sortRowTree.js +64 -18
  64. package/node/utils/tree/utils.js +12 -27
  65. package/package.json +2 -2
  66. package/themeAugmentation/overrides.d.ts +1 -1
  67. package/typeOverloads/modules.d.ts +6 -6
  68. package/utils/releaseInfo.js +1 -1
  69. package/utils/tree/insertDataRowInTree.js +8 -24
  70. package/utils/tree/sortRowTree.js +64 -18
  71. package/utils/tree/utils.d.ts +3 -38
  72. package/utils/tree/utils.js +10 -25
  73. package/components/headerFiltering/constants.d.ts +0 -3
  74. package/components/headerFiltering/constants.js +0 -30
  75. package/legacy/components/headerFiltering/constants.js +0 -30
  76. package/modern/components/headerFiltering/constants.js +0 -30
  77. package/node/components/headerFiltering/constants.js +0 -37
package/CHANGELOG.md CHANGED
@@ -3,6 +3,78 @@
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.7.0
7
+
8
+ _Jun 9, 2023_
9
+
10
+ We'd like to offer a big thanks to the 12 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🎁 Improve the default `format` prop value on the pickers.
13
+
14
+ Here are a few examples:
15
+
16
+ ```tsx
17
+ <TimePicker views={['hours', 'minutes', 'seconds']} ampm />
18
+ // Format before v6.7.0: `hh:mm aa`
19
+ // Format after v6.7.0: `hh:mm:ss aa`
20
+
21
+ <DatePicker views={['year']} />
22
+ // Format before v6.7.0: `MM/DD/YYYY`
23
+ // Format after v6.7.0: `YYYY`
24
+
25
+ <DateTimePicker views={['day', 'hours', 'minutes']} ampm />
26
+ // Format before v6.7.0: `MM/DD/YYYY hh:mm aa`
27
+ // Format after v6.7.0: `DD hh:mm aa`
28
+ ```
29
+
30
+ - 🌍 Add Romanian (ro-RO) locale on the pickers
31
+ - 🌍 Improve German (de-DE) locale on the pickers
32
+ - 🌍 Improve Czech (cs-CZ), German (de-DE) and Turkish (tr-TR) locales on the data grid
33
+ - 🚀 Performance improvements
34
+ - 🐞 Bugfixes
35
+ - 📚 Documentation improvements
36
+
37
+ ### `@mui/x-data-grid@v6.7.0` / `@mui/x-data-grid-pro@v6.7.0` / `@mui/x-data-grid-premium@v6.7.0`
38
+
39
+ #### Changes
40
+
41
+ - [DataGrid] Allow overflowing grid root element (#9179) @cherniavskii
42
+ - [DataGrid] Fix module augmentation error when using `@mui/lab` (#9235) @cherniavskii
43
+ - [DataGrid] Fix row with ids matching `Object` prototype (#9265) @romgrk
44
+ - [DataGrid] Fix `sortModel` and `filterModel` resetting when columns change (#9239) @alexgonch
45
+ - [DataGrid] Improve grouping performance for large datasets (#9200) @romgrk
46
+ - [DataGrid] Increase threshold to trigger memory leak warning (#9263) @m4theushw
47
+ - [DataGrid] Update data grid migration guide to include updated type (#9272) @MBilalShafi
48
+ - [DataGridPro] Improve header filter menu visuals (#9181) @MBilalShafi
49
+ - [DataGridPremium] Remove last line break on clipboard paste (#9163) @cherniavskii
50
+ - [l10n] Improve Czech (cs-CZ) locale (#9266) @MartinSkarpa
51
+ - [l10n] Improve German (de-DE) locale (#9259) @ximex
52
+ - [l10n] Improve Turkish (tr-TR) locale (#9237) @MCErtan
53
+
54
+ ### `@mui/x-date-pickers@v6.7.0` / `@mui/x-date-pickers-pro@v6.7.0`
55
+
56
+ #### Changes
57
+
58
+ - [l10n] Add Romanian (ro-RO) locale (#9257) @ximex
59
+ - [l10n] Improve German (de-DE) locale (#9258) @ximex
60
+ - [pickers] Apply dynamic default format depending on views for all desktop and mobile pickers (#9126) @flaviendelangle
61
+ - [pickers] Update `DateRangePickerDay` props JSDoc (#9191) @stevus
62
+
63
+ ### Docs
64
+
65
+ - [docs] Fix missing props on the `GridFilterPanel` API page (#9180) @cherniavskii
66
+ - [docs] Fix overview page typo (#9230) @LukasTy
67
+ - [docs] Fix version redirect (#9273) @alexfauquette
68
+
69
+ ### Core
70
+
71
+ - [core] Temporarily remove the Argos upload on the regression testing (#9267) @flaviendelangle
72
+ - [charts] Add clip-path to avoid charts overflow (#9012) @alexfauquette
73
+ - [charts] Add style customization on bar (#8935) @alexfauquette
74
+ - [charts] Enforce axis `min`/`max` over the `nice()` method (#9189) @alexfauquette
75
+ - [charts] Improve axis label and ticks label alignements (#9190) @alexfauquette
76
+ - [charts] Simplify the switch between responsive and fix dimensions (#9151) @alexfauquette
77
+
6
78
  ## 6.6.0
7
79
 
8
80
  _Jun 1, 2023_
@@ -7,7 +7,6 @@ export interface GridHeaderFilterCellProps extends Pick<GridStateColDef, 'header
7
7
  sortIndex?: number;
8
8
  hasFocus?: boolean;
9
9
  tabIndex: 0 | -1;
10
- headerFilterComponent?: React.ReactNode;
11
10
  filterOperators?: GridFilterOperator[];
12
11
  width: number;
13
12
  colDef: GridColDef;
@@ -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 = ["colIndex", "height", "hasFocus", "headerFilterComponent", "filterOperators", "width", "headerClassName", "colDef", "item", "headerFilterMenuRef", "InputComponentProps", "showClearIcon"];
3
+ const _excluded = ["colIndex", "height", "hasFocus", "filterOperators", "width", "headerClassName", "colDef", "item", "headerFilterMenuRef", "InputComponentProps", "showClearIcon"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -8,7 +8,7 @@ import { unstable_useForkRef as useForkRef, unstable_composeClasses as composeCl
8
8
  import { gridVisibleColumnFieldsSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
9
9
  import { useGridPrivateApiContext, unstable_gridHeaderFilteringEditFieldSelector, unstable_gridHeaderFilteringMenuSelector, isNavigationKey } from '@mui/x-data-grid/internals';
10
10
  import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
11
- import { GridHeaderFilterAdornment } from './GridHeaderFilterAdornment';
11
+ import { GridHeaderFilterMenuContainer } from './GridHeaderFilterMenuContainer';
12
12
  import { GridHeaderFilterClearButton } from './GridHeaderFilterClearButton';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -23,13 +23,17 @@ const useUtilityClasses = ownerState => {
23
23
  };
24
24
  return composeClasses(slots, getDataGridUtilityClass, classes);
25
25
  };
26
+ const dateSx = {
27
+ [`& input[value=""]:not(:focus)`]: {
28
+ color: 'transparent'
29
+ }
30
+ };
26
31
  const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
27
32
  var _filterOperators$find, _currentOperator$head, _colDef$headerName;
28
33
  const {
29
34
  colIndex,
30
35
  height,
31
36
  hasFocus,
32
- headerFilterComponent,
33
37
  filterOperators,
34
38
  width,
35
39
  headerClassName,
@@ -61,6 +65,10 @@ const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
61
65
  const clearFilterItem = React.useCallback(() => {
62
66
  apiRef.current.deleteFilterItem(item);
63
67
  }, [apiRef, item]);
68
+ let headerFilterComponent;
69
+ if (colDef.renderHeaderFilter) {
70
+ headerFilterComponent = colDef.renderHeaderFilter(props);
71
+ }
64
72
  React.useLayoutEffect(() => {
65
73
  if (hasFocus && !isMenuOpen) {
66
74
  let focusableElement = cellRef.current.querySelector('[tabindex="0"]');
@@ -131,7 +139,8 @@ const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
131
139
  const mouseEventsHandlers = React.useMemo(() => ({
132
140
  onKeyDown: publish('headerFilterKeyDown', onKeyDown),
133
141
  onClick: publish('headerFilterClick'),
134
- onMouseDown: publish('headerFilterMouseDown', onMouseDown)
142
+ onMouseDown: publish('headerFilterMouseDown', onMouseDown),
143
+ onBlur: publish('headerFilterBlur')
135
144
  }), [onMouseDown, onKeyDown, publish]);
136
145
  const ownerState = _extends({}, rootProps, {
137
146
  colDef
@@ -156,30 +165,35 @@ const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
156
165
  "aria-colindex": colIndex + 1,
157
166
  "aria-label": headerFilterComponent == null ? (_colDef$headerName = colDef.headerName) != null ? _colDef$headerName : colDef.field : undefined
158
167
  }, other, mouseEventsHandlers, {
159
- children: [headerFilterComponent, InputComponent && headerFilterComponent === undefined ? /*#__PURE__*/_jsx(InputComponent, _extends({
160
- apiRef: apiRef,
161
- item: item,
162
- inputRef: inputRef,
163
- applyValue: applyFilterChanges,
164
- onFocus: () => apiRef.current.startHeaderFilterEditMode(colDef.field),
165
- onBlur: () => apiRef.current.stopHeaderFilterEditMode(),
166
- placeholder: apiRef.current.getLocaleText('columnMenuFilter'),
167
- label: isFilterActive ? capitalize(label) : ' ',
168
- isFilterActive: isFilterActive,
169
- headerFilterMenu: /*#__PURE__*/_jsx(GridHeaderFilterAdornment, {
168
+ children: [headerFilterComponent, InputComponent && headerFilterComponent === undefined ? /*#__PURE__*/_jsxs(React.Fragment, {
169
+ children: [/*#__PURE__*/_jsx(InputComponent, _extends({
170
+ apiRef: apiRef,
171
+ item: item,
172
+ inputRef: inputRef,
173
+ applyValue: applyFilterChanges,
174
+ onFocus: () => apiRef.current.startHeaderFilterEditMode(colDef.field),
175
+ onBlur: () => apiRef.current.stopHeaderFilterEditMode(),
176
+ label: capitalize(label),
177
+ placeholder: "",
178
+ isFilterActive: isFilterActive,
179
+ clearButton: showClearIcon && isApplied ? /*#__PURE__*/_jsx(GridHeaderFilterClearButton, {
180
+ onClick: clearFilterItem
181
+ }) : null,
182
+ disabled: isNoInputOperator,
183
+ tabIndex: -1,
184
+ InputLabelProps: null,
185
+ sx: colDef.type === 'date' || colDef.type === 'dateTime' ? dateSx : undefined
186
+ }, isNoInputOperator ? {
187
+ value: ''
188
+ } : {}, currentOperator == null ? void 0 : currentOperator.InputComponentProps, InputComponentProps)), /*#__PURE__*/_jsx(GridHeaderFilterMenuContainer, {
170
189
  operators: filterOperators,
171
190
  item: item,
172
191
  field: colDef.field,
173
192
  applyFilterChanges: applyFilterChanges,
174
193
  headerFilterMenuRef: headerFilterMenuRef,
175
194
  buttonRef: buttonRef
176
- }),
177
- clearButton: showClearIcon && isApplied ? /*#__PURE__*/_jsx(GridHeaderFilterClearButton, {
178
- onClick: clearFilterItem
179
- }) : null,
180
- disabled: isNoInputOperator,
181
- tabIndex: -1
182
- }, currentOperator == null ? void 0 : currentOperator.InputComponentProps, InputComponentProps)) : null]
195
+ })]
196
+ }) : null]
183
197
  }));
184
198
  });
185
199
  process.env.NODE_ENV !== "production" ? GridHeaderFilterCell.propTypes = {
@@ -204,7 +218,6 @@ process.env.NODE_ENV !== "production" ? GridHeaderFilterCell.propTypes = {
204
218
  * Class name that will be added in the column header cell.
205
219
  */
206
220
  headerClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
207
- headerFilterComponent: PropTypes.node,
208
221
  headerFilterMenuRef: PropTypes.shape({
209
222
  current: PropTypes.object
210
223
  }).isRequired,
@@ -17,7 +17,7 @@ function GridHeaderFilterClearButton({
17
17
  onClick: onClick,
18
18
  sx: sx
19
19
  }, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.baseIconButton, {
20
- children: /*#__PURE__*/_jsx(rootProps.slots.headerFilterClearIcon, {
20
+ children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuClearIcon, {
21
21
  fontSize: "inherit"
22
22
  })
23
23
  }));
@@ -8,7 +8,10 @@ interface GridHeaderFilterMenuProps {
8
8
  open: boolean;
9
9
  id: string;
10
10
  labelledBy: string;
11
- targetRef: React.MutableRefObject<HTMLElement | null>;
11
+ target: HTMLElement | null;
12
+ }
13
+ declare function GridHeaderFilterMenu({ open, field, target, applyFilterChanges, operators, item, id, labelledBy, }: GridHeaderFilterMenuProps): React.JSX.Element | null;
14
+ declare namespace GridHeaderFilterMenu {
15
+ var propTypes: any;
12
16
  }
13
- declare function GridHeaderFilterMenu({ open, field, targetRef, applyFilterChanges, operators, item, id, labelledBy, }: GridHeaderFilterMenuProps): React.JSX.Element | null;
14
17
  export { GridHeaderFilterMenu };
@@ -1,18 +1,15 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
+ import PropTypes from 'prop-types';
3
4
  import MenuList from '@mui/material/MenuList';
4
5
  import MenuItem from '@mui/material/MenuItem';
5
- import ListItemIcon from '@mui/material/ListItemIcon';
6
- import ListItemText from '@mui/material/ListItemText';
7
- import { unstable_capitalize as capitalize } from '@mui/utils';
6
+ import { unstable_capitalize as capitalize, HTMLElementType } from '@mui/utils';
8
7
  import { useGridApiContext, GridMenu } from '@mui/x-data-grid';
9
- import { OPERATOR_SYMBOL_MAPPING } from './constants';
10
8
  import { jsx as _jsx } from "react/jsx-runtime";
11
- import { jsxs as _jsxs } from "react/jsx-runtime";
12
9
  function GridHeaderFilterMenu({
13
10
  open,
14
11
  field,
15
- targetRef,
12
+ target,
16
13
  applyFilterChanges,
17
14
  operators,
18
15
  item,
@@ -31,13 +28,13 @@ function GridHeaderFilterMenu({
31
28
  hideMenu();
32
29
  }
33
30
  }, [hideMenu]);
34
- if (!targetRef.current) {
31
+ if (!target) {
35
32
  return null;
36
33
  }
37
34
  return /*#__PURE__*/_jsx(GridMenu, {
38
- placement: "bottom-start",
35
+ placement: "bottom-end",
39
36
  open: open,
40
- target: targetRef.current,
37
+ target: target,
41
38
  onClickAway: hideMenu,
42
39
  onExited: hideMenu,
43
40
  children: /*#__PURE__*/_jsx(MenuList, {
@@ -47,7 +44,7 @@ function GridHeaderFilterMenu({
47
44
  children: operators.map((op, i) => {
48
45
  var _op$headerLabel;
49
46
  const label = (_op$headerLabel = op == null ? void 0 : op.headerLabel) != null ? _op$headerLabel : apiRef.current.getLocaleText(`headerFilterOperator${capitalize(op.value)}`);
50
- return /*#__PURE__*/_jsxs(MenuItem, {
47
+ return /*#__PURE__*/_jsx(MenuItem, {
51
48
  onClick: () => {
52
49
  applyFilterChanges(_extends({}, item, {
53
50
  operator: op.value
@@ -56,14 +53,38 @@ function GridHeaderFilterMenu({
56
53
  },
57
54
  autoFocus: i === 0 ? open : false,
58
55
  selected: op.value === item.operator,
59
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
60
- children: OPERATOR_SYMBOL_MAPPING[op.value]
61
- }), /*#__PURE__*/_jsx(ListItemText, {
62
- children: label
63
- })]
56
+ children: label
64
57
  }, `${field}-${op.value}`);
65
58
  })
66
59
  })
67
60
  });
68
61
  }
62
+ process.env.NODE_ENV !== "production" ? GridHeaderFilterMenu.propTypes = {
63
+ // ----------------------------- Warning --------------------------------
64
+ // | These PropTypes are generated from the TypeScript type definitions |
65
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
66
+ // ----------------------------------------------------------------------
67
+ applyFilterChanges: PropTypes.func.isRequired,
68
+ field: PropTypes.string.isRequired,
69
+ id: PropTypes.string.isRequired,
70
+ item: PropTypes.shape({
71
+ field: PropTypes.string.isRequired,
72
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
73
+ operator: PropTypes.string.isRequired,
74
+ value: PropTypes.any
75
+ }).isRequired,
76
+ labelledBy: PropTypes.string.isRequired,
77
+ open: PropTypes.bool.isRequired,
78
+ operators: PropTypes.arrayOf(PropTypes.shape({
79
+ getApplyFilterFn: PropTypes.func.isRequired,
80
+ getValueAsString: PropTypes.func,
81
+ headerLabel: PropTypes.string,
82
+ InputComponent: PropTypes.elementType,
83
+ InputComponentProps: PropTypes.object,
84
+ label: PropTypes.string,
85
+ requiresFilterValue: PropTypes.bool,
86
+ value: PropTypes.string.isRequired
87
+ })).isRequired,
88
+ target: HTMLElementType
89
+ } : void 0;
69
90
  export { GridHeaderFilterMenu };
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { GridFilterItem, GridFilterOperator, GridColDef } from '@mui/x-data-grid';
3
- declare function GridHeaderFilterAdornment(props: {
3
+ declare function GridHeaderFilterMenuContainer(props: {
4
4
  operators: GridFilterOperator<any, any, any>[];
5
5
  field: GridColDef['field'];
6
6
  item: GridFilterItem;
@@ -8,7 +8,7 @@ declare function GridHeaderFilterAdornment(props: {
8
8
  headerFilterMenuRef: React.MutableRefObject<HTMLButtonElement | null>;
9
9
  buttonRef: React.Ref<HTMLButtonElement>;
10
10
  }): React.JSX.Element | null;
11
- declare namespace GridHeaderFilterAdornment {
11
+ declare namespace GridHeaderFilterMenuContainer {
12
12
  var propTypes: any;
13
13
  }
14
- export { GridHeaderFilterAdornment };
14
+ export { GridHeaderFilterMenuContainer };
@@ -7,15 +7,15 @@ import { useGridApiContext } from '@mui/x-data-grid';
7
7
  import { unstable_useId as useId } from '@mui/utils';
8
8
  import { unstable_gridHeaderFilteringMenuSelector } from '@mui/x-data-grid/internals';
9
9
  import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
10
- import { OPERATOR_SYMBOL_MAPPING } from './constants';
11
10
  import { jsx as _jsx } from "react/jsx-runtime";
12
11
  import { jsxs as _jsxs } from "react/jsx-runtime";
13
12
  const sx = {
14
13
  width: 22,
15
14
  height: 22,
16
- padding: '0px 0px 2px 2px'
15
+ margin: 'auto 0 10px 5px'
17
16
  };
18
- function GridHeaderFilterAdornment(props) {
17
+ function GridHeaderFilterMenuContainer(props) {
18
+ var _rootProps$slotProps;
19
19
  const {
20
20
  operators,
21
21
  item,
@@ -37,35 +37,34 @@ function GridHeaderFilterAdornment(props) {
37
37
  return null;
38
38
  }
39
39
  return /*#__PURE__*/_jsxs(React.Fragment, {
40
- children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
41
- position: "start",
42
- children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
43
- id: buttonId,
44
- ref: buttonRef,
45
- "aria-label": apiRef.current.getLocaleText('filterPanelOperator'),
46
- title: apiRef.current.getLocaleText('filterPanelOperator'),
47
- "aria-controls": menuId,
48
- "aria-expanded": open ? 'true' : undefined,
49
- "aria-haspopup": "true",
50
- tabIndex: -1,
51
- size: "small",
52
- onClick: handleClick,
53
- sx: sx
54
- }, rootProps.slotProps?.baseIconButton, {
55
- children: OPERATOR_SYMBOL_MAPPING[item?.operator] ?? '='
56
- }))
57
- }), /*#__PURE__*/_jsx(rootProps.slots.headerFilterMenu, _extends({
40
+ children: [/*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
41
+ id: buttonId,
42
+ ref: buttonRef,
43
+ "aria-label": apiRef.current.getLocaleText('filterPanelOperator'),
44
+ title: apiRef.current.getLocaleText('filterPanelOperator'),
45
+ "aria-controls": menuId,
46
+ "aria-expanded": open ? 'true' : undefined,
47
+ "aria-haspopup": "true",
48
+ tabIndex: -1,
49
+ size: "small",
50
+ onClick: handleClick,
51
+ sx: sx
52
+ }, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.baseIconButton, {
53
+ children: /*#__PURE__*/_jsx(rootProps.slots.openFilterButtonIcon, {
54
+ fontSize: "small"
55
+ })
56
+ })), /*#__PURE__*/_jsx(rootProps.slots.headerFilterMenu, _extends({
58
57
  field: field,
59
58
  open: open,
60
59
  item: item,
61
- targetRef: headerFilterMenuRef,
60
+ target: headerFilterMenuRef.current,
62
61
  operators: operators,
63
62
  labelledBy: buttonId,
64
63
  id: menuId
65
64
  }, others))]
66
65
  });
67
66
  }
68
- process.env.NODE_ENV !== "production" ? GridHeaderFilterAdornment.propTypes = {
67
+ process.env.NODE_ENV !== "production" ? GridHeaderFilterMenuContainer.propTypes = {
69
68
  // ----------------------------- Warning --------------------------------
70
69
  // | These PropTypes are generated from the TypeScript type definitions |
71
70
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -95,4 +94,4 @@ process.env.NODE_ENV !== "production" ? GridHeaderFilterAdornment.propTypes = {
95
94
  value: PropTypes.string.isRequired
96
95
  })).isRequired
97
96
  } : void 0;
98
- export { GridHeaderFilterAdornment };
97
+ export { GridHeaderFilterMenuContainer };
@@ -1,2 +1,3 @@
1
- export * from './GridHeaderFilterAdornment';
1
+ export * from './GridHeaderFilterMenuContainer';
2
2
  export * from './GridHeaderFilterCell';
3
+ export * from './GridHeaderFilterMenu';
@@ -1,2 +1,3 @@
1
- export * from './GridHeaderFilterAdornment';
2
- export * from './GridHeaderFilterCell';
1
+ export * from './GridHeaderFilterMenuContainer';
2
+ export * from './GridHeaderFilterCell';
3
+ export * from './GridHeaderFilterMenu';
@@ -2,18 +2,29 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  const _excluded = ["getColumnsToRender", "getRootProps"];
4
4
  import * as React from 'react';
5
- import { unstable_gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, unstable_gridTabIndexColumnHeaderFilterSelector } from '@mui/x-data-grid';
5
+ import { unstable_gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, unstable_gridTabIndexColumnHeaderFilterSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
6
6
  import { styled } from '@mui/system';
7
7
  import { useGridColumnHeaders as useGridColumnHeadersCommunity, getTotalHeaderHeight, useGridPrivateApiContext, getGridFilter } from '@mui/x-data-grid/internals';
8
+ import { unstable_composeClasses as composeClasses } from '@mui/utils';
8
9
  import { useGridRootProps } from '../../utils/useGridRootProps';
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
11
+ const useUtilityClasses = ownerState => {
12
+ const {
13
+ classes
14
+ } = ownerState;
15
+ return React.useMemo(() => {
16
+ const slots = {
17
+ headerFilterRow: ['headerFilterRow']
18
+ };
19
+ return composeClasses(slots, getDataGridUtilityClass, classes);
20
+ }, [classes]);
21
+ };
10
22
  const GridHeaderFilterRow = styled('div', {
11
23
  name: 'MuiDataGrid',
12
24
  slot: 'HeaderFilterRow',
13
25
  overridesResolver: (props, styles) => styles.headerFilterRow
14
26
  })(() => ({
15
- display: 'flex',
16
- borderTop: '1px solid rgba(224, 224, 224, 1)'
27
+ display: 'flex'
17
28
  }));
18
29
  export const useGridColumnHeaders = props => {
19
30
  const apiRef = useGridPrivateApiContext();
@@ -36,6 +47,7 @@ export const useGridColumnHeaders = props => {
36
47
  });
37
48
  const headerFilterMenuRef = React.useRef(null);
38
49
  const rootProps = useGridRootProps();
50
+ const classes = useUtilityClasses(rootProps);
39
51
  const disableHeaderFiltering = !rootProps.unstable_headerFilters;
40
52
  const headerHeight = Math.floor(rootProps.columnHeaderHeight * props.densityFactor);
41
53
  const filterModel = useGridSelector(apiRef, gridFilterModelSelector);
@@ -62,10 +74,6 @@ export const useGridColumnHeaders = props => {
62
74
  const isFirstColumn = columnIndex === 0;
63
75
  const tabIndexField = columnHeaderFilterTabIndexState == null ? void 0 : columnHeaderFilterTabIndexState.field;
64
76
  const tabIndex = tabIndexField === colDef.field || isFirstColumn && !props.hasOtherElementInTabSequence ? 0 : -1;
65
- let headerFilterComponent;
66
- if (colDef.renderHeaderFilter) {
67
- headerFilterComponent = colDef.renderHeaderFilter(apiRef.current.getColumnHeaderParams(colDef.field));
68
- }
69
77
  const headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({
70
78
  field: colDef.field,
71
79
  colDef
@@ -82,7 +90,6 @@ export const useGridColumnHeaders = props => {
82
90
  hasFocus: hasFocus,
83
91
  tabIndex: tabIndex,
84
92
  headerFilterMenuRef: headerFilterMenuRef,
85
- headerFilterComponent: headerFilterComponent,
86
93
  headerClassName: headerClassName,
87
94
  filterOperators: filterOperators,
88
95
  "data-field": colDef.field,
@@ -92,6 +99,7 @@ export const useGridColumnHeaders = props => {
92
99
  return /*#__PURE__*/_jsx(GridHeaderFilterRow, {
93
100
  ref: headerFiltersRef,
94
101
  ownerState: rootProps,
102
+ className: classes.headerFilterRow,
95
103
  role: "row",
96
104
  "aria-rowindex": headerGroupingMaxDepth + 2,
97
105
  children: filters
@@ -10,11 +10,11 @@ export const useGridLazyLoaderPreProcessors = (privateApiRef, props) => {
10
10
  lazyLoading
11
11
  } = (_props$experimentalFe = props.experimentalFeatures) != null ? _props$experimentalFe : {};
12
12
  const addSkeletonRows = React.useCallback(groupingParams => {
13
- const tree = _extends({}, groupingParams.tree);
14
- const rootGroup = tree[GRID_ROOT_GROUP_ID];
13
+ const rootGroup = groupingParams.tree[GRID_ROOT_GROUP_ID];
15
14
  if (!lazyLoading || props.rowsLoadingMode !== 'server' || !props.rowCount || rootGroup.children.length >= props.rowCount) {
16
15
  return groupingParams;
17
16
  }
17
+ const tree = _extends({}, groupingParams.tree);
18
18
  const rootGroupChildren = [...rootGroup.children];
19
19
  for (let i = 0; i < props.rowCount - rootGroup.children.length; i += 1) {
20
20
  const skeletonId = getSkeletonRowId(i);
@@ -26,12 +26,7 @@ export function addPinnedRow({
26
26
  parent: GRID_ROOT_GROUP_ID,
27
27
  isAutoGenerated
28
28
  };
29
- insertNodeInTree({
30
- previousTree: null,
31
- node,
32
- tree,
33
- treeDepths
34
- });
29
+ insertNodeInTree(node, tree, treeDepths, null);
35
30
  if (!isAutoGenerated) {
36
31
  dataRowIdToModelLookup[rowId] = rowModel;
37
32
  dataRowIdToIdLookup[rowId] = rowId;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v6.6.0
2
+ * @mui/x-data-grid-pro v6.7.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the