@mui/x-data-grid-pro 6.3.1 → 6.5.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 (133) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/DataGridPro/DataGridPro.js +25 -1
  3. package/DataGridPro/useDataGridProComponent.js +5 -3
  4. package/DataGridPro/useDataGridProProps.js +7 -13
  5. package/components/GridColumnHeaders.js +15 -1
  6. package/components/GridDetailPanel.js +1 -1
  7. package/components/headerFiltering/GridHeaderFilterAdornment.d.ts +14 -0
  8. package/components/headerFiltering/GridHeaderFilterAdornment.js +99 -0
  9. package/components/headerFiltering/GridHeaderFilterCell.d.ts +20 -0
  10. package/components/headerFiltering/GridHeaderFilterCell.js +224 -0
  11. package/components/headerFiltering/GridHeaderFilterClearButton.d.ts +6 -0
  12. package/components/headerFiltering/GridHeaderFilterClearButton.js +25 -0
  13. package/components/headerFiltering/GridHeaderFilterMenu.d.ts +14 -0
  14. package/components/headerFiltering/GridHeaderFilterMenu.js +69 -0
  15. package/components/headerFiltering/constants.d.ts +3 -0
  16. package/components/headerFiltering/constants.js +30 -0
  17. package/components/headerFiltering/index.d.ts +2 -0
  18. package/components/headerFiltering/index.js +2 -0
  19. package/components/index.d.ts +1 -0
  20. package/components/index.js +2 -1
  21. package/constants/dataGridProDefaultSlotsComponents.js +5 -1
  22. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +21 -0
  23. package/hooks/features/columnHeaders/useGridColumnHeaders.js +111 -0
  24. package/hooks/features/columnResize/useGridColumnResize.js +12 -1
  25. package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  26. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
  27. package/index.js +1 -1
  28. package/internals/index.d.ts +1 -0
  29. package/internals/index.js +4 -0
  30. package/legacy/DataGridPro/DataGridPro.js +25 -1
  31. package/legacy/DataGridPro/useDataGridProComponent.js +5 -3
  32. package/legacy/DataGridPro/useDataGridProProps.js +10 -9
  33. package/legacy/components/GridColumnHeaders.js +15 -1
  34. package/legacy/components/GridDetailPanel.js +1 -1
  35. package/legacy/components/headerFiltering/GridHeaderFilterAdornment.js +97 -0
  36. package/legacy/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  37. package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  38. package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  39. package/legacy/components/headerFiltering/constants.js +30 -0
  40. package/legacy/components/headerFiltering/index.js +2 -0
  41. package/legacy/components/index.js +2 -1
  42. package/legacy/constants/dataGridProDefaultSlotsComponents.js +5 -1
  43. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  44. package/legacy/hooks/features/columnResize/useGridColumnResize.js +12 -1
  45. package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  46. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
  47. package/legacy/index.js +1 -1
  48. package/legacy/internals/index.js +4 -0
  49. package/legacy/material/icons.js +4 -1
  50. package/legacy/material/index.js +3 -2
  51. package/legacy/models/gridProSlotProps.js +1 -0
  52. package/legacy/utils/releaseInfo.js +1 -1
  53. package/legacy/utils/tree/createRowTree.js +1 -0
  54. package/legacy/utils/tree/insertDataRowInTree.js +4 -0
  55. package/legacy/utils/tree/removeDataRowFromTree.js +1 -0
  56. package/legacy/utils/tree/updateRowTree.js +2 -0
  57. package/legacy/utils/tree/utils.js +20 -12
  58. package/material/icons.d.ts +3 -0
  59. package/material/icons.js +4 -1
  60. package/material/index.d.ts +1 -0
  61. package/material/index.js +3 -2
  62. package/models/dataGridProProps.d.ts +16 -1
  63. package/models/gridProIconSlotsComponent.d.ts +5 -0
  64. package/models/gridProSlotProps.d.ts +9 -0
  65. package/models/gridProSlotProps.js +1 -0
  66. package/models/gridProSlotsComponent.d.ts +13 -2
  67. package/modern/DataGridPro/DataGridPro.js +25 -1
  68. package/modern/DataGridPro/useDataGridProComponent.js +5 -3
  69. package/modern/DataGridPro/useDataGridProProps.js +7 -13
  70. package/modern/components/GridColumnHeaders.js +15 -1
  71. package/modern/components/GridDetailPanel.js +1 -1
  72. package/modern/components/headerFiltering/GridHeaderFilterAdornment.js +98 -0
  73. package/modern/components/headerFiltering/GridHeaderFilterCell.js +222 -0
  74. package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  75. package/modern/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  76. package/modern/components/headerFiltering/constants.js +30 -0
  77. package/modern/components/headerFiltering/index.js +2 -0
  78. package/modern/components/index.js +2 -1
  79. package/modern/constants/dataGridProDefaultSlotsComponents.js +5 -1
  80. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +110 -0
  81. package/modern/hooks/features/columnResize/useGridColumnResize.js +11 -0
  82. package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  83. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
  84. package/modern/index.js +1 -1
  85. package/modern/internals/index.js +4 -0
  86. package/modern/material/icons.js +4 -1
  87. package/modern/material/index.js +3 -2
  88. package/modern/models/gridProSlotProps.js +1 -0
  89. package/modern/utils/releaseInfo.js +1 -1
  90. package/modern/utils/tree/createRowTree.js +1 -0
  91. package/modern/utils/tree/insertDataRowInTree.js +4 -0
  92. package/modern/utils/tree/removeDataRowFromTree.js +1 -0
  93. package/modern/utils/tree/updateRowTree.js +2 -0
  94. package/modern/utils/tree/utils.js +19 -13
  95. package/node/DataGridPro/DataGridPro.js +25 -1
  96. package/node/DataGridPro/useDataGridProComponent.js +4 -2
  97. package/node/DataGridPro/useDataGridProProps.js +6 -12
  98. package/node/components/GridColumnHeaders.js +15 -1
  99. package/node/components/GridDetailPanel.js +2 -2
  100. package/node/components/headerFiltering/GridHeaderFilterAdornment.js +105 -0
  101. package/node/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  102. package/node/components/headerFiltering/GridHeaderFilterClearButton.js +32 -0
  103. package/node/components/headerFiltering/GridHeaderFilterMenu.js +75 -0
  104. package/node/components/headerFiltering/constants.js +37 -0
  105. package/node/components/headerFiltering/index.js +27 -0
  106. package/node/components/index.js +11 -0
  107. package/node/constants/dataGridProDefaultSlotsComponents.js +5 -1
  108. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  109. package/node/hooks/features/columnResize/useGridColumnResize.js +11 -0
  110. package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  111. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
  112. package/node/index.js +1 -1
  113. package/node/internals/index.js +8 -0
  114. package/node/material/icons.js +6 -2
  115. package/node/material/index.js +2 -1
  116. package/node/models/gridProSlotProps.js +5 -0
  117. package/node/utils/releaseInfo.js +1 -1
  118. package/node/utils/tree/createRowTree.js +1 -0
  119. package/node/utils/tree/insertDataRowInTree.js +4 -0
  120. package/node/utils/tree/removeDataRowFromTree.js +1 -0
  121. package/node/utils/tree/updateRowTree.js +2 -0
  122. package/node/utils/tree/utils.js +19 -13
  123. package/package.json +2 -2
  124. package/typeOverloads/modules.d.ts +13 -1
  125. package/utils/releaseInfo.js +1 -1
  126. package/utils/tree/createRowTree.d.ts +2 -0
  127. package/utils/tree/createRowTree.js +1 -0
  128. package/utils/tree/insertDataRowInTree.d.ts +5 -1
  129. package/utils/tree/insertDataRowInTree.js +4 -0
  130. package/utils/tree/removeDataRowFromTree.js +1 -0
  131. package/utils/tree/updateRowTree.js +2 -0
  132. package/utils/tree/utils.d.ts +4 -2
  133. package/utils/tree/utils.js +19 -13
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GridHeaderFilterMenu = GridHeaderFilterMenu;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
11
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
12
+ var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
13
+ var _ListItemText = _interopRequireDefault(require("@mui/material/ListItemText"));
14
+ var _utils = require("@mui/utils");
15
+ var _xDataGrid = require("@mui/x-data-grid");
16
+ var _constants = require("./constants");
17
+ var _jsxRuntime = require("react/jsx-runtime");
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); }
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; }
20
+ function GridHeaderFilterMenu({
21
+ open,
22
+ field,
23
+ targetRef,
24
+ applyFilterChanges,
25
+ operators,
26
+ item,
27
+ id,
28
+ labelledBy
29
+ }) {
30
+ const apiRef = (0, _xDataGrid.useGridApiContext)();
31
+ const hideMenu = React.useCallback(() => {
32
+ apiRef.current.hideHeaderFilterMenu();
33
+ }, [apiRef]);
34
+ const handleListKeyDown = React.useCallback(event => {
35
+ if (event.key === 'Tab') {
36
+ event.preventDefault();
37
+ }
38
+ if (event.key === 'Escape' || event.key === 'Tab') {
39
+ hideMenu();
40
+ }
41
+ }, [hideMenu]);
42
+ if (!targetRef.current) {
43
+ return null;
44
+ }
45
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_xDataGrid.GridMenu, {
46
+ placement: "bottom-start",
47
+ open: open,
48
+ target: targetRef.current,
49
+ onClickAway: hideMenu,
50
+ onExited: hideMenu,
51
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
52
+ "aria-labelledby": labelledBy,
53
+ id: id,
54
+ onKeyDown: handleListKeyDown,
55
+ children: operators.map((op, i) => {
56
+ const label = op?.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _utils.unstable_capitalize)(op.value)}`);
57
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, {
58
+ onClick: () => {
59
+ applyFilterChanges((0, _extends2.default)({}, item, {
60
+ operator: op.value
61
+ }));
62
+ hideMenu();
63
+ },
64
+ autoFocus: i === 0 ? open : false,
65
+ selected: op.value === item.operator,
66
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
67
+ children: _constants.OPERATOR_SYMBOL_MAPPING[op.value]
68
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemText.default, {
69
+ children: label
70
+ })]
71
+ }, `${field}-${op.value}`);
72
+ })
73
+ })
74
+ });
75
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OPERATOR_SYMBOL_MAPPING = void 0;
7
+ const OPERATOR_SYMBOL_MAPPING = {
8
+ contains: '∋',
9
+ equals: '=',
10
+ '=': '=',
11
+ '!=': '≠',
12
+ '>': '>',
13
+ '>=': '≥',
14
+ '<': '<',
15
+ '<=': '≤',
16
+ startsWith: '⊃',
17
+ endsWith: '⊂',
18
+ is: '=',
19
+ not: '≠',
20
+ isNot: '≠',
21
+ isEmpty: '∅',
22
+ isNotEmpty: '∉',
23
+ isIn: '∈',
24
+ isNotIn: '∉',
25
+ isLessThan: '<',
26
+ isLessThanOrEqual: '≤',
27
+ isGreaterThan: '>',
28
+ isGreaterThanOrEqual: '≥',
29
+ isBetween: '∈',
30
+ isNotBetween: '∉',
31
+ isAnyOf: '∈',
32
+ after: '>',
33
+ onOrAfter: '≥',
34
+ before: '<',
35
+ onOrBefore: '≤'
36
+ };
37
+ exports.OPERATOR_SYMBOL_MAPPING = OPERATOR_SYMBOL_MAPPING;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _GridHeaderFilterAdornment = require("./GridHeaderFilterAdornment");
7
+ Object.keys(_GridHeaderFilterAdornment).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _GridHeaderFilterAdornment[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _GridHeaderFilterAdornment[key];
14
+ }
15
+ });
16
+ });
17
+ var _GridHeaderFilterCell = require("./GridHeaderFilterCell");
18
+ Object.keys(_GridHeaderFilterCell).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _GridHeaderFilterCell[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _GridHeaderFilterCell[key];
25
+ }
26
+ });
27
+ });
@@ -46,4 +46,15 @@ Object.keys(_icons).forEach(function (key) {
46
46
  return _icons[key];
47
47
  }
48
48
  });
49
+ });
50
+ var _headerFiltering = require("./headerFiltering");
51
+ Object.keys(_headerFiltering).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _headerFiltering[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _headerFiltering[key];
58
+ }
59
+ });
49
60
  });
@@ -9,9 +9,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _internals = require("@mui/x-data-grid/internals");
10
10
  var _GridProColumnMenu = require("../components/GridProColumnMenu");
11
11
  var _GridColumnHeaders = require("../components/GridColumnHeaders");
12
+ var _GridHeaderFilterMenu = require("../components/headerFiltering/GridHeaderFilterMenu");
13
+ var _GridHeaderFilterCell = require("../components/headerFiltering/GridHeaderFilterCell");
12
14
  var _material = _interopRequireDefault(require("../material"));
13
15
  const DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = (0, _extends2.default)({}, _internals.DATA_GRID_DEFAULT_SLOTS_COMPONENTS, _material.default, {
14
16
  ColumnMenu: _GridProColumnMenu.GridProColumnMenu,
15
- ColumnHeaders: _GridColumnHeaders.GridColumnHeaders
17
+ ColumnHeaders: _GridColumnHeaders.GridColumnHeaders,
18
+ HeaderFilterCell: _GridHeaderFilterCell.GridHeaderFilterCell,
19
+ HeaderFilterMenu: _GridHeaderFilterMenu.GridHeaderFilterMenu
16
20
  });
17
21
  exports.DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useGridColumnHeaders = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _xDataGrid = require("@mui/x-data-grid");
12
+ var _system = require("@mui/system");
13
+ var _internals = require("@mui/x-data-grid/internals");
14
+ var _useGridRootProps = require("../../utils/useGridRootProps");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ const _excluded = ["getColumnsToRender", "getRootProps"];
17
+ 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); }
18
+ 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; }
19
+ const GridHeaderFilterRow = (0, _system.styled)('div', {
20
+ name: 'MuiDataGrid',
21
+ slot: 'HeaderFilterRow',
22
+ overridesResolver: (props, styles) => styles.headerFilterRow
23
+ })(() => ({
24
+ display: 'flex',
25
+ borderTop: '1px solid rgba(224, 224, 224, 1)'
26
+ }));
27
+ const useGridColumnHeaders = props => {
28
+ const apiRef = (0, _internals.useGridPrivateApiContext)();
29
+ const {
30
+ headerGroupingMaxDepth,
31
+ hasOtherElementInTabSequence
32
+ } = props;
33
+ const columnHeaderFilterTabIndexState = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridTabIndexColumnHeaderFilterSelector);
34
+ const _useGridColumnHeaders = (0, _internals.useGridColumnHeaders)((0, _extends2.default)({}, props, {
35
+ hasOtherElementInTabSequence: hasOtherElementInTabSequence || columnHeaderFilterTabIndexState !== null
36
+ })),
37
+ {
38
+ getColumnsToRender,
39
+ getRootProps
40
+ } = _useGridColumnHeaders,
41
+ otherProps = (0, _objectWithoutPropertiesLoose2.default)(_useGridColumnHeaders, _excluded);
42
+ const headerFiltersRef = React.useRef(null);
43
+ apiRef.current.register('private', {
44
+ headerFiltersElementRef: headerFiltersRef
45
+ });
46
+ const headerFilterMenuRef = React.useRef(null);
47
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
48
+ const disableHeaderFiltering = !rootProps.unstable_headerFilters;
49
+ const headerHeight = Math.floor(rootProps.columnHeaderHeight * props.densityFactor);
50
+ const filterModel = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.gridFilterModelSelector);
51
+ const totalHeaderHeight = (0, _internals.getTotalHeaderHeight)(apiRef, rootProps.columnHeaderHeight) + (disableHeaderFiltering ? 0 : headerHeight);
52
+ const columnHeaderFilterFocus = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridFocusColumnHeaderFilterSelector);
53
+ const getColumnFilters = (params, other = {}) => {
54
+ if (disableHeaderFiltering) {
55
+ return null;
56
+ }
57
+ const columnsToRender = getColumnsToRender(params);
58
+ if (columnsToRender == null) {
59
+ return null;
60
+ }
61
+ const {
62
+ renderedColumns,
63
+ firstColumnToRender
64
+ } = columnsToRender;
65
+ const filters = [];
66
+ for (let i = 0; i < renderedColumns.length; i += 1) {
67
+ const colDef = renderedColumns[i];
68
+ const columnIndex = firstColumnToRender + i;
69
+ const hasFocus = columnHeaderFilterFocus?.field === colDef.field;
70
+ const isFirstColumn = columnIndex === 0;
71
+ const tabIndexField = columnHeaderFilterTabIndexState?.field;
72
+ const tabIndex = tabIndexField === colDef.field || isFirstColumn && !props.hasOtherElementInTabSequence ? 0 : -1;
73
+ let headerFilterComponent;
74
+ if (colDef.renderHeaderFilter) {
75
+ headerFilterComponent = colDef.renderHeaderFilter(apiRef.current.getColumnHeaderParams(colDef.field));
76
+ }
77
+ const headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({
78
+ field: colDef.field,
79
+ colDef
80
+ }) : colDef.headerClassName;
81
+
82
+ // TODO: Support for `isAnyOf` operator
83
+ const filterOperators = colDef.filterOperators?.filter(operator => operator.value !== 'isAnyOf') ?? [];
84
+ const item = filterModel?.items.find(it => it.field === colDef.field && it.operator !== 'isAnyOf') ?? (0, _internals.getGridFilter)(colDef);
85
+ filters.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.headerFilterCell, (0, _extends2.default)({
86
+ colIndex: columnIndex,
87
+ height: headerHeight,
88
+ width: colDef.computedWidth,
89
+ colDef: colDef,
90
+ hasFocus: hasFocus,
91
+ tabIndex: tabIndex,
92
+ headerFilterMenuRef: headerFilterMenuRef,
93
+ headerFilterComponent: headerFilterComponent,
94
+ headerClassName: headerClassName,
95
+ filterOperators: filterOperators,
96
+ "data-field": colDef.field,
97
+ item: item
98
+ }, rootProps.slotProps?.headerFilterCell, other), `${colDef.field}-filter`));
99
+ }
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridHeaderFilterRow, {
101
+ ref: headerFiltersRef,
102
+ ownerState: rootProps,
103
+ role: "row",
104
+ "aria-rowindex": headerGroupingMaxDepth + 2,
105
+ children: filters
106
+ });
107
+ };
108
+ const rootStyle = {
109
+ minHeight: totalHeaderHeight,
110
+ maxHeight: totalHeaderHeight,
111
+ lineHeight: `${headerHeight}px`
112
+ };
113
+ return (0, _extends2.default)({}, otherProps, {
114
+ getColumnFilters,
115
+ getRootProps: disableHeaderFiltering ? getRootProps : (other = {}) => (0, _extends2.default)({
116
+ style: rootStyle
117
+ }, other)
118
+ });
119
+ };
120
+ exports.useGridColumnHeaders = useGridColumnHeaders;
@@ -97,6 +97,7 @@ const useGridColumnResize = (apiRef, props) => {
97
97
  const logger = (0, _xDataGrid.useGridLogger)(apiRef, 'useGridColumnResize');
98
98
  const colDefRef = React.useRef();
99
99
  const colElementRef = React.useRef();
100
+ const headerFilterElementRef = React.useRef();
100
101
  const colGroupingElementRef = React.useRef();
101
102
  const colCellElementsRef = React.useRef();
102
103
  const theme = (0, _styles.useTheme)();
@@ -118,6 +119,12 @@ const useGridColumnResize = (apiRef, props) => {
118
119
  colElementRef.current.style.width = `${newWidth}px`;
119
120
  colElementRef.current.style.minWidth = `${newWidth}px`;
120
121
  colElementRef.current.style.maxWidth = `${newWidth}px`;
122
+ const headerFilterElement = headerFilterElementRef.current;
123
+ if (headerFilterElement) {
124
+ headerFilterElement.style.width = `${newWidth}px`;
125
+ headerFilterElement.style.minWidth = `${newWidth}px`;
126
+ headerFilterElement.style.maxWidth = `${newWidth}px`;
127
+ }
121
128
  [...colCellElementsRef.current, ...colGroupingElementRef.current].forEach(element => {
122
129
  const div = element;
123
130
  let finalWidth;
@@ -187,6 +194,10 @@ const useGridColumnResize = (apiRef, props) => {
187
194
  }, event);
188
195
  colDefRef.current = colDef;
189
196
  colElementRef.current = apiRef.current.columnHeadersContainerElementRef?.current.querySelector(`[data-field="${colDef.field}"]`);
197
+ const headerFilterRowElement = apiRef.current.headerFiltersElementRef?.current;
198
+ if (headerFilterRowElement) {
199
+ headerFilterElementRef.current = headerFilterRowElement.querySelector(`[data-field="${colDef.field}"]`);
200
+ }
190
201
  colGroupingElementRef.current = (0, _domUtils.findGroupHeaderElementsFromField)(apiRef.current.columnHeadersContainerElementRef?.current, colDef.field);
191
202
  colCellElementsRef.current = (0, _domUtils.findGridCellElementsFromCol)(colElementRef.current, apiRef.current);
192
203
  const doc = (0, _utils.unstable_ownerDocument)(apiRef.current.rootElementRef.current);
@@ -36,6 +36,7 @@ function addPinnedRow({
36
36
  isAutoGenerated
37
37
  };
38
38
  (0, _utils.insertNodeInTree)({
39
+ previousTree: null,
39
40
  node,
40
41
  tree,
41
42
  treeDepths
@@ -86,6 +86,7 @@ const useGridTreeDataPreProcessors = (privateApiRef, props) => {
86
86
  };
87
87
  if (params.updates.type === 'full') {
88
88
  return (0, _createRowTree.createRowTree)({
89
+ previousTree: params.previousTree,
89
90
  nodes: params.updates.rows.map(getRowTreeBuilderNode),
90
91
  defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
91
92
  isGroupExpandedByDefault: props.isGroupExpandedByDefault,
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v6.3.1
2
+ * @mui/x-data-grid-pro v6.5.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -7,6 +7,7 @@ var _exportNames = {
7
7
  DataGridProVirtualScroller: true,
8
8
  GridColumnHeaders: true,
9
9
  DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS: true,
10
+ useGridColumnHeaders: true,
10
11
  useGridColumnResize: true,
11
12
  columnResizeStateInitializer: true,
12
13
  useGridColumnPinning: true,
@@ -125,6 +126,12 @@ Object.defineProperty(exports, "updateRowTree", {
125
126
  return _updateRowTree.updateRowTree;
126
127
  }
127
128
  });
129
+ Object.defineProperty(exports, "useGridColumnHeaders", {
130
+ enumerable: true,
131
+ get: function () {
132
+ return _useGridColumnHeaders.useGridColumnHeaders;
133
+ }
134
+ });
128
135
  Object.defineProperty(exports, "useGridColumnPinning", {
129
136
  enumerable: true,
130
137
  get: function () {
@@ -230,6 +237,7 @@ Object.keys(_internals).forEach(function (key) {
230
237
  var _DataGridProVirtualScroller = require("../components/DataGridProVirtualScroller");
231
238
  var _GridColumnHeaders = require("../components/GridColumnHeaders");
232
239
  var _dataGridProDefaultSlotsComponents = require("../constants/dataGridProDefaultSlotsComponents");
240
+ var _useGridColumnHeaders = require("../hooks/features/columnHeaders/useGridColumnHeaders");
233
241
  var _useGridColumnResize = require("../hooks/features/columnResize/useGridColumnResize");
234
242
  var _useGridColumnPinning = require("../hooks/features/columnPinning/useGridColumnPinning");
235
243
  var _useGridColumnPinningPreProcessors = require("../hooks/features/columnPinning/useGridColumnPinningPreProcessors");
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.GridPushPinRightIcon = exports.GridPushPinLeftIcon = void 0;
6
+ exports.GridPushPinRightIcon = exports.GridPushPinLeftIcon = exports.GridHighlightOffIcon = void 0;
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _utils = require("@mui/material/utils");
9
9
  var _jsxRuntime = require("react/jsx-runtime");
@@ -24,4 +24,8 @@ const GridPushPinLeftIcon = (0, _utils.createSvgIcon)( /*#__PURE__*/(0, _jsxRunt
24
24
  fillRule: "evenodd"
25
25
  })
26
26
  }), 'PushPinLeft');
27
- exports.GridPushPinLeftIcon = GridPushPinLeftIcon;
27
+ exports.GridPushPinLeftIcon = GridPushPinLeftIcon;
28
+ const GridHighlightOffIcon = (0, _utils.createSvgIcon)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
29
+ d: "M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"
30
+ }), 'HighlightOff');
31
+ exports.GridHighlightOffIcon = GridHighlightOffIcon;
@@ -9,7 +9,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _icons = require("./icons");
10
10
  const iconSlots = {
11
11
  ColumnMenuPinRightIcon: _icons.GridPushPinRightIcon,
12
- ColumnMenuPinLeftIcon: _icons.GridPushPinLeftIcon
12
+ ColumnMenuPinLeftIcon: _icons.GridPushPinLeftIcon,
13
+ HeaderFilterClearIcon: _icons.GridHighlightOffIcon
13
14
  };
14
15
  const materialSlots = (0, _extends2.default)({}, iconSlots);
15
16
  var _default = materialSlots;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getReleaseInfo = void 0;
7
7
  var _utils = require("@mui/utils");
8
8
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTY4MzIzNzYwMDAwMA==";
9
+ const releaseInfo = "MTY4NDQ0MzYwMDAwMA==";
10
10
  if (process.env.NODE_ENV !== 'production') {
11
11
  // A simple hack to set the value in the test environment (has no build step).
12
12
  // eslint-disable-next-line no-useless-concat
@@ -21,6 +21,7 @@ const createRowTree = params => {
21
21
  dataRowIds.push(node.id);
22
22
  (0, _insertDataRowInTree.insertDataRowInTree)({
23
23
  tree,
24
+ previousTree: params.previousTree,
24
25
  id: node.id,
25
26
  path: node.path,
26
27
  onDuplicatePath: params.onDuplicatePath,
@@ -16,6 +16,7 @@ const insertDataRowInTree = ({
16
16
  id,
17
17
  path,
18
18
  updatedGroupsManager,
19
+ previousTree,
19
20
  tree,
20
21
  treeDepths,
21
22
  onDuplicatePath,
@@ -48,6 +49,7 @@ const insertDataRowInTree = ({
48
49
  updatedGroupsManager?.addAction(parentNodeId, 'insertChildren');
49
50
  (0, _utils.insertNodeInTree)({
50
51
  node: leafNode,
52
+ previousTree,
51
53
  tree,
52
54
  treeDepths
53
55
  });
@@ -61,6 +63,7 @@ const insertDataRowInTree = ({
61
63
  updatedGroupsManager?.addAction(parentNodeId, 'insertChildren');
62
64
  (0, _utils.updateGroupNodeIdAndAutoGenerated)({
63
65
  tree,
66
+ previousTree,
64
67
  treeDepths,
65
68
  node: existingNodeWithPartialPath,
66
69
  updatedNode: {
@@ -100,6 +103,7 @@ const insertDataRowInTree = ({
100
103
  defaultGroupingExpansionDepth,
101
104
  isGroupExpandedByDefault
102
105
  }),
106
+ previousTree,
103
107
  tree,
104
108
  treeDepths
105
109
  });
@@ -54,6 +54,7 @@ const replaceDataGroupWithAutoGeneratedGroup = ({
54
54
  updatedGroupsManager?.addAction(node.parent, 'removeChildren');
55
55
  updatedGroupsManager?.addAction(node.parent, 'insertChildren');
56
56
  (0, _utils.updateGroupNodeIdAndAutoGenerated)({
57
+ previousTree: null,
57
58
  tree,
58
59
  treeDepths,
59
60
  node,
@@ -21,6 +21,7 @@ const updateRowTree = params => {
21
21
  path
22
22
  } = params.nodes.inserted[i];
23
23
  (0, _insertDataRowInTree.insertDataRowInTree)({
24
+ previousTree: params.previousTree,
24
25
  tree,
25
26
  treeDepths,
26
27
  updatedGroupsManager,
@@ -58,6 +59,7 @@ const updateRowTree = params => {
58
59
  id
59
60
  });
60
61
  (0, _insertDataRowInTree.insertDataRowInTree)({
62
+ previousTree: params.previousTree,
61
63
  tree,
62
64
  treeDepths,
63
65
  updatedGroupsManager,
@@ -55,6 +55,7 @@ const addGroupDefaultExpansion = ({
55
55
  exports.addGroupDefaultExpansion = addGroupDefaultExpansion;
56
56
  const insertNodeInTree = ({
57
57
  node,
58
+ previousTree,
58
59
  tree,
59
60
  treeDepths
60
61
  }) => {
@@ -69,22 +70,25 @@ const insertNodeInTree = ({
69
70
  if (node.type === 'footer') {
70
71
  // For footers,
71
72
  // Register the node from its parent `footerId` property.
72
- tree[node.parent] = (0, _extends2.default)({}, parentNode, {
73
- footerId: node.id
74
- });
73
+ parentNode.footerId = node.id;
75
74
  } else if (node.type === 'group' || node.type === 'leaf') {
76
75
  // For groups and leaves,
77
76
  // Register the node from its parents `children` and `childrenFromPath` properties.
78
- const groupingField = node.groupingField ?? '__no_field__';
79
- const groupingKey = node.groupingKey ?? '__no_key__';
80
- tree[node.parent] = (0, _extends2.default)({}, parentNode, {
81
- childrenFromPath: (0, _extends2.default)({}, parentNode.childrenFromPath, {
82
- [groupingField]: (0, _extends2.default)({}, parentNode.childrenFromPath?.[groupingField], {
83
- [groupingKey.toString()]: node.id
84
- })
85
- }),
86
- children: [...parentNode.children, node.id]
87
- });
77
+ const groupingFieldName = node.groupingField ?? '__no_field__';
78
+ const groupingKeyName = node.groupingKey ?? '__no_key__';
79
+ const groupingField = parentNode.childrenFromPath?.[groupingFieldName];
80
+ if (previousTree !== null && previousTree[parentNode.id] === tree[parentNode.id]) {
81
+ parentNode.children = [...parentNode.children, node.id];
82
+ } else {
83
+ parentNode.children.push(node.id);
84
+ }
85
+ if (groupingField == null) {
86
+ parentNode.childrenFromPath[groupingFieldName] = {
87
+ [groupingKeyName.toString()]: node.id
88
+ };
89
+ } else {
90
+ groupingField[groupingKeyName.toString()] = node.id;
91
+ }
88
92
  }
89
93
  };
90
94
 
@@ -149,6 +153,7 @@ exports.removeNodeFromTree = removeNodeFromTree;
149
153
  const updateGroupNodeIdAndAutoGenerated = ({
150
154
  node,
151
155
  updatedNode,
156
+ previousTree,
152
157
  tree,
153
158
  treeDepths
154
159
  }) => {
@@ -169,6 +174,7 @@ const updateGroupNodeIdAndAutoGenerated = ({
169
174
  // 3. Add the new group in the tree
170
175
  const groupNode = (0, _extends2.default)({}, node, updatedNode);
171
176
  insertNodeInTree({
177
+ previousTree,
172
178
  node: groupNode,
173
179
  tree,
174
180
  treeDepths
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-pro",
3
- "version": "6.3.1",
3
+ "version": "6.5.0",
4
4
  "description": "The Pro plan edition of the data grid component (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@babel/runtime": "^7.21.0",
35
35
  "@mui/utils": "^5.12.3",
36
- "@mui/x-data-grid": "6.3.1",
36
+ "@mui/x-data-grid": "6.5.0",
37
37
  "@mui/x-license-pro": "6.0.4",
38
38
  "@types/format-util": "^1.0.2",
39
39
  "clsx": "^1.2.1",
@@ -1,8 +1,18 @@
1
- import { GridRowId } from '@mui/x-data-grid';
1
+ /// <reference types="react" />
2
+ import { GridRowId, GridColumnHeaderParams, GridValidRowModel } from '@mui/x-data-grid';
2
3
  import type { GridRowScrollEndParams, GridRowOrderChangeParams, GridFetchRowsParams } from '../models';
3
4
  import type { GridColumnPinningInternalCache, GridPinnedColumns } from '../hooks/features/columnPinning/gridColumnPinningInterface';
4
5
  import type { GridCanBeReorderedPreProcessingContext } from '../hooks/features/columnReorder/columnReorderInterfaces';
5
6
  import { GridRowPinningInternalCache } from '../hooks/features/rowPinning/gridRowPinningInterface';
7
+ export interface GridColDefPro<R extends GridValidRowModel = any, V = any, F = V> {
8
+ /**
9
+ * Allows to render a component in the column header filter cell.
10
+ * @template R, V, F
11
+ * @param {GridColumnHeaderParams<R, V, F>} params Object containing parameters for the renderer.
12
+ * @returns {React.ReactNode} The element to be rendered.
13
+ */
14
+ renderHeaderFilter?: (params: GridColumnHeaderParams<R, V, F>) => React.ReactNode;
15
+ }
6
16
  export interface GridControlledStateEventLookupPro {
7
17
  /**
8
18
  * Fired when the open detail panels are changed.
@@ -60,4 +70,6 @@ declare module '@mui/x-data-grid' {
60
70
  declare module '@mui/x-data-grid/internals' {
61
71
  interface GridApiCaches extends GridApiCachesPro {
62
72
  }
73
+ interface GridBaseColDef<R, V, F> extends GridColDefPro<R, V, F> {
74
+ }
63
75
  }
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTY4MzIzNzYwMDAwMA==";
3
+ const releaseInfo = "MTY4NDQ0MzYwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -1,7 +1,9 @@
1
+ import { GridRowTreeConfig } from '@mui/x-data-grid';
1
2
  import { GridRowTreeCreationValue } from '@mui/x-data-grid/internals';
2
3
  import { RowTreeBuilderNode, GridTreePathDuplicateHandler } from './models';
3
4
  import { DataGridProProps } from '../../models/dataGridProProps';
4
5
  interface CreateRowTreeParams {
6
+ previousTree: GridRowTreeConfig | null;
5
7
  nodes: RowTreeBuilderNode[];
6
8
  defaultGroupingExpansionDepth: number;
7
9
  isGroupExpandedByDefault?: DataGridProProps['isGroupExpandedByDefault'];
@@ -15,6 +15,7 @@ export const createRowTree = params => {
15
15
  dataRowIds.push(node.id);
16
16
  insertDataRowInTree({
17
17
  tree,
18
+ previousTree: params.previousTree,
18
19
  id: node.id,
19
20
  path: node.path,
20
21
  onDuplicatePath: params.onDuplicatePath,
@@ -20,6 +20,10 @@ interface InsertDataRowInTreeParams {
20
20
  * - `tree[nodeId].children.push(newNodeId)` => invalid
21
21
  */
22
22
  tree: GridRowTreeConfig;
23
+ /**
24
+ * Previous tree instance for comparison.
25
+ */
26
+ previousTree: GridRowTreeConfig | null;
23
27
  /**
24
28
  * Amount of nodes at each depth of the tree.
25
29
  * This object can be mutated.
@@ -47,5 +51,5 @@ interface InsertDataRowInTreeParams {
47
51
  * - if a node exists with the same partial path, it will register this node as the ancestor of the data row.
48
52
  * - if not, it will create an auto-generated node and register it as ancestor of the data row.
49
53
  */
50
- export declare const insertDataRowInTree: ({ id, path, updatedGroupsManager, tree, treeDepths, onDuplicatePath, isGroupExpandedByDefault, defaultGroupingExpansionDepth, }: InsertDataRowInTreeParams) => void;
54
+ export declare const insertDataRowInTree: ({ id, path, updatedGroupsManager, previousTree, tree, treeDepths, onDuplicatePath, isGroupExpandedByDefault, defaultGroupingExpansionDepth, }: InsertDataRowInTreeParams) => void;
51
55
  export {};