@mui/x-data-grid-pro 6.4.0 → 6.6.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 (156) hide show
  1. package/CHANGELOG.md +134 -2
  2. package/DataGridPro/DataGridPro.js +15 -3
  3. package/DataGridPro/useDataGridProComponent.js +3 -1
  4. package/DataGridPro/useDataGridProProps.js +7 -13
  5. package/README.md +2 -2
  6. package/components/DataGridProVirtualScroller.js +12 -12
  7. package/components/GridColumnHeaders.js +23 -3
  8. package/components/GridColumnMenuPinningItem.d.ts +2 -2
  9. package/components/GridDetailPanel.d.ts +1 -1
  10. package/components/GridDetailPanel.js +1 -1
  11. package/components/GridDetailPanelToggleCell.d.ts +2 -2
  12. package/components/GridRowReorderCell.d.ts +3 -3
  13. package/components/GridScrollArea.d.ts +10 -0
  14. package/components/GridScrollArea.js +140 -0
  15. package/components/GridTreeDataGroupingCell.d.ts +2 -2
  16. package/components/headerFiltering/GridHeaderFilterAdornment.d.ts +14 -0
  17. package/components/headerFiltering/GridHeaderFilterAdornment.js +99 -0
  18. package/components/headerFiltering/GridHeaderFilterCell.d.ts +20 -0
  19. package/components/headerFiltering/GridHeaderFilterCell.js +224 -0
  20. package/components/headerFiltering/GridHeaderFilterClearButton.d.ts +6 -0
  21. package/components/headerFiltering/GridHeaderFilterClearButton.js +25 -0
  22. package/components/headerFiltering/GridHeaderFilterMenu.d.ts +14 -0
  23. package/components/headerFiltering/GridHeaderFilterMenu.js +69 -0
  24. package/components/headerFiltering/constants.d.ts +3 -0
  25. package/components/headerFiltering/constants.js +30 -0
  26. package/components/headerFiltering/index.d.ts +2 -0
  27. package/components/headerFiltering/index.js +2 -0
  28. package/components/index.d.ts +1 -0
  29. package/components/index.js +2 -1
  30. package/constants/dataGridProDefaultSlotsComponents.js +5 -1
  31. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +21 -0
  32. package/hooks/features/columnHeaders/useGridColumnHeaders.js +111 -0
  33. package/hooks/features/columnResize/useGridColumnResize.js +23 -13
  34. package/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  35. package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  36. package/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  37. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  38. package/index.js +1 -1
  39. package/internals/index.d.ts +2 -1
  40. package/internals/index.js +5 -1
  41. package/legacy/DataGridPro/DataGridPro.js +15 -3
  42. package/legacy/DataGridPro/useDataGridProComponent.js +3 -1
  43. package/legacy/DataGridPro/useDataGridProProps.js +10 -9
  44. package/legacy/components/DataGridProVirtualScroller.js +12 -12
  45. package/legacy/components/GridColumnHeaders.js +23 -3
  46. package/legacy/components/GridDetailPanel.js +1 -1
  47. package/legacy/components/GridScrollArea.js +143 -0
  48. package/legacy/components/headerFiltering/GridHeaderFilterAdornment.js +97 -0
  49. package/legacy/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  50. package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  51. package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  52. package/legacy/components/headerFiltering/constants.js +30 -0
  53. package/legacy/components/headerFiltering/index.js +2 -0
  54. package/legacy/components/index.js +2 -1
  55. package/legacy/constants/dataGridProDefaultSlotsComponents.js +5 -1
  56. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  57. package/legacy/hooks/features/columnResize/useGridColumnResize.js +23 -13
  58. package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  59. package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  60. package/legacy/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  61. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  62. package/legacy/index.js +1 -1
  63. package/legacy/internals/index.js +5 -1
  64. package/legacy/material/icons.js +4 -1
  65. package/legacy/material/index.js +3 -2
  66. package/legacy/models/gridProSlotProps.js +1 -0
  67. package/legacy/utils/releaseInfo.js +1 -1
  68. package/legacy/utils/tree/createRowTree.js +1 -0
  69. package/legacy/utils/tree/insertDataRowInTree.js +4 -0
  70. package/legacy/utils/tree/removeDataRowFromTree.js +1 -0
  71. package/legacy/utils/tree/updateRowTree.js +2 -0
  72. package/legacy/utils/tree/utils.js +51 -12
  73. package/material/icons.d.ts +3 -0
  74. package/material/icons.js +4 -1
  75. package/material/index.d.ts +1 -0
  76. package/material/index.js +3 -2
  77. package/models/dataGridProProps.d.ts +16 -1
  78. package/models/gridProIconSlotsComponent.d.ts +5 -0
  79. package/models/gridProSlotProps.d.ts +9 -0
  80. package/models/gridProSlotProps.js +1 -0
  81. package/models/gridProSlotsComponent.d.ts +13 -2
  82. package/modern/DataGridPro/DataGridPro.js +15 -3
  83. package/modern/DataGridPro/useDataGridProComponent.js +3 -1
  84. package/modern/DataGridPro/useDataGridProProps.js +7 -13
  85. package/modern/components/DataGridProVirtualScroller.js +12 -12
  86. package/modern/components/GridColumnHeaders.js +23 -3
  87. package/modern/components/GridDetailPanel.js +1 -1
  88. package/modern/components/GridScrollArea.js +140 -0
  89. package/modern/components/headerFiltering/GridHeaderFilterAdornment.js +98 -0
  90. package/modern/components/headerFiltering/GridHeaderFilterCell.js +222 -0
  91. package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
  92. package/modern/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
  93. package/modern/components/headerFiltering/constants.js +30 -0
  94. package/modern/components/headerFiltering/index.js +2 -0
  95. package/modern/components/index.js +2 -1
  96. package/modern/constants/dataGridProDefaultSlotsComponents.js +5 -1
  97. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +110 -0
  98. package/modern/hooks/features/columnResize/useGridColumnResize.js +22 -12
  99. package/modern/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  100. package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  101. package/modern/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  102. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  103. package/modern/index.js +1 -1
  104. package/modern/internals/index.js +5 -1
  105. package/modern/material/icons.js +4 -1
  106. package/modern/material/index.js +3 -2
  107. package/modern/models/gridProSlotProps.js +1 -0
  108. package/modern/utils/releaseInfo.js +1 -1
  109. package/modern/utils/tree/createRowTree.js +1 -0
  110. package/modern/utils/tree/insertDataRowInTree.js +4 -0
  111. package/modern/utils/tree/removeDataRowFromTree.js +1 -0
  112. package/modern/utils/tree/updateRowTree.js +2 -0
  113. package/modern/utils/tree/utils.js +52 -14
  114. package/node/DataGridPro/DataGridPro.js +15 -3
  115. package/node/DataGridPro/useDataGridProComponent.js +2 -0
  116. package/node/DataGridPro/useDataGridProProps.js +6 -12
  117. package/node/components/DataGridProVirtualScroller.js +12 -12
  118. package/node/components/GridColumnHeaders.js +22 -3
  119. package/node/components/GridDetailPanel.js +2 -2
  120. package/node/components/GridScrollArea.js +149 -0
  121. package/node/components/headerFiltering/GridHeaderFilterAdornment.js +105 -0
  122. package/node/components/headerFiltering/GridHeaderFilterCell.js +230 -0
  123. package/node/components/headerFiltering/GridHeaderFilterClearButton.js +32 -0
  124. package/node/components/headerFiltering/GridHeaderFilterMenu.js +75 -0
  125. package/node/components/headerFiltering/constants.js +37 -0
  126. package/node/components/headerFiltering/index.js +27 -0
  127. package/node/components/index.js +11 -0
  128. package/node/constants/dataGridProDefaultSlotsComponents.js +5 -1
  129. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
  130. package/node/hooks/features/columnResize/useGridColumnResize.js +22 -12
  131. package/node/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  132. package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
  133. package/node/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  134. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
  135. package/node/index.js +1 -1
  136. package/node/internals/index.js +16 -1
  137. package/node/material/icons.js +6 -2
  138. package/node/material/index.js +2 -1
  139. package/node/models/gridProSlotProps.js +5 -0
  140. package/node/utils/releaseInfo.js +1 -1
  141. package/node/utils/tree/createRowTree.js +1 -0
  142. package/node/utils/tree/insertDataRowInTree.js +4 -0
  143. package/node/utils/tree/removeDataRowFromTree.js +1 -0
  144. package/node/utils/tree/updateRowTree.js +2 -0
  145. package/node/utils/tree/utils.js +54 -15
  146. package/package.json +6 -6
  147. package/typeOverloads/modules.d.ts +13 -1
  148. package/utils/releaseInfo.js +1 -1
  149. package/utils/tree/createRowTree.d.ts +2 -0
  150. package/utils/tree/createRowTree.js +1 -0
  151. package/utils/tree/insertDataRowInTree.d.ts +5 -1
  152. package/utils/tree/insertDataRowInTree.js +4 -0
  153. package/utils/tree/removeDataRowFromTree.js +1 -0
  154. package/utils/tree/updateRowTree.js +2 -0
  155. package/utils/tree/utils.d.ts +9 -3
  156. package/utils/tree/utils.js +52 -14
@@ -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
@@ -19,7 +19,6 @@ const filterRowTreeFromTreeData = params => {
19
19
  disableChildrenFiltering,
20
20
  isRowMatchingFilters
21
21
  } = params;
22
- const visibleRowsLookup = {};
23
22
  const filteredRowsLookup = {};
24
23
  const filteredDescendantCountLookup = {};
25
24
  const filterTreeNode = (node, isParentMatchingFilters, areAncestorsExpanded) => {
@@ -62,13 +61,7 @@ const filterRowTreeFromTreeData = params => {
62
61
  break;
63
62
  }
64
63
  }
65
- visibleRowsLookup[node.id] = shouldPassFilters && areAncestorsExpanded;
66
64
  filteredRowsLookup[node.id] = shouldPassFilters;
67
-
68
- // TODO: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ?
69
- if (node.type === 'group' && node.footerId != null) {
70
- visibleRowsLookup[node.footerId] = shouldPassFilters && areAncestorsExpanded && !!node.childrenExpanded;
71
- }
72
65
  if (!shouldPassFilters) {
73
66
  return 0;
74
67
  }
@@ -86,7 +79,6 @@ const filterRowTreeFromTreeData = params => {
86
79
  }
87
80
  }
88
81
  return {
89
- visibleRowsLookup,
90
82
  filteredRowsLookup,
91
83
  filteredDescendantCountLookup
92
84
  };
@@ -16,6 +16,7 @@ var _components = require("../../../components");
16
16
  var _createRowTree = require("../../../utils/tree/createRowTree");
17
17
  var _sortRowTree = require("../../../utils/tree/sortRowTree");
18
18
  var _updateRowTree = require("../../../utils/tree/updateRowTree");
19
+ var _utils = require("../../../utils/tree/utils");
19
20
  var _jsxRuntime = require("react/jsx-runtime");
20
21
  const _excluded = ["hideDescendantCount"];
21
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); }
@@ -86,6 +87,7 @@ const useGridTreeDataPreProcessors = (privateApiRef, props) => {
86
87
  };
87
88
  if (params.updates.type === 'full') {
88
89
  return (0, _createRowTree.createRowTree)({
90
+ previousTree: params.previousTree,
89
91
  nodes: params.updates.rows.map(getRowTreeBuilderNode),
90
92
  defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
91
93
  isGroupExpandedByDefault: props.isGroupExpandedByDefault,
@@ -129,6 +131,7 @@ const useGridTreeDataPreProcessors = (privateApiRef, props) => {
129
131
  (0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TREE_DATA_STRATEGY, 'rowTreeCreation', createRowTreeForTreeData);
130
132
  (0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TREE_DATA_STRATEGY, 'filtering', filterRows);
131
133
  (0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TREE_DATA_STRATEGY, 'sorting', sortRows);
134
+ (0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TREE_DATA_STRATEGY, 'visibleRowsLookupCreation', _utils.getVisibleRowsLookup);
132
135
 
133
136
  /**
134
137
  * 1ST RENDER
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v6.4.0
2
+ * @mui/x-data-grid-pro v6.6.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,
@@ -33,7 +34,8 @@ var _exportNames = {
33
34
  updateRowTree: true,
34
35
  sortRowTree: true,
35
36
  insertNodeInTree: true,
36
- removeNodeFromTree: true
37
+ removeNodeFromTree: true,
38
+ getVisibleRowsLookup: true
37
39
  };
38
40
  Object.defineProperty(exports, "DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS", {
39
41
  enumerable: true,
@@ -95,6 +97,12 @@ Object.defineProperty(exports, "detailPanelStateInitializer", {
95
97
  return _useGridDetailPanel.detailPanelStateInitializer;
96
98
  }
97
99
  });
100
+ Object.defineProperty(exports, "getVisibleRowsLookup", {
101
+ enumerable: true,
102
+ get: function () {
103
+ return _utils.getVisibleRowsLookup;
104
+ }
105
+ });
98
106
  Object.defineProperty(exports, "insertNodeInTree", {
99
107
  enumerable: true,
100
108
  get: function () {
@@ -125,6 +133,12 @@ Object.defineProperty(exports, "updateRowTree", {
125
133
  return _updateRowTree.updateRowTree;
126
134
  }
127
135
  });
136
+ Object.defineProperty(exports, "useGridColumnHeaders", {
137
+ enumerable: true,
138
+ get: function () {
139
+ return _useGridColumnHeaders.useGridColumnHeaders;
140
+ }
141
+ });
128
142
  Object.defineProperty(exports, "useGridColumnPinning", {
129
143
  enumerable: true,
130
144
  get: function () {
@@ -230,6 +244,7 @@ Object.keys(_internals).forEach(function (key) {
230
244
  var _DataGridProVirtualScroller = require("../components/DataGridProVirtualScroller");
231
245
  var _GridColumnHeaders = require("../components/GridColumnHeaders");
232
246
  var _dataGridProDefaultSlotsComponents = require("../constants/dataGridProDefaultSlotsComponents");
247
+ var _useGridColumnHeaders = require("../hooks/features/columnHeaders/useGridColumnHeaders");
233
248
  var _useGridColumnResize = require("../hooks/features/columnResize/useGridColumnResize");
234
249
  var _useGridColumnPinning = require("../hooks/features/columnPinning/useGridColumnPinning");
235
250
  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 = "MTY4Mzg0MjQwMDAwMA==";
9
+ const releaseInfo = "MTY4NTU3MDQwMDAwMA==";
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,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateGroupNodeIdAndAutoGenerated = exports.removeNodeFromTree = exports.insertNodeInTree = exports.getNodePathInTree = exports.getGroupRowIdFromPath = exports.createUpdatedGroupsManager = exports.addGroupDefaultExpansion = void 0;
7
+ exports.updateGroupNodeIdAndAutoGenerated = exports.removeNodeFromTree = exports.insertNodeInTree = exports.getVisibleRowsLookup = exports.getNodePathInTree = exports.getGroupRowIdFromPath = exports.createUpdatedGroupsManager = exports.addGroupDefaultExpansion = void 0;
8
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
9
  var _toPropertyKey2 = _interopRequireDefault(require("@babel/runtime/helpers/toPropertyKey"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
@@ -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
@@ -184,4 +190,37 @@ const createUpdatedGroupsManager = () => ({
184
190
  this.value[groupId][action] = true;
185
191
  }
186
192
  });
187
- exports.createUpdatedGroupsManager = createUpdatedGroupsManager;
193
+ exports.createUpdatedGroupsManager = createUpdatedGroupsManager;
194
+ const getVisibleRowsLookup = ({
195
+ tree,
196
+ filteredRowsLookup
197
+ }) => {
198
+ if (!filteredRowsLookup) {
199
+ return {};
200
+ }
201
+ const visibleRowsLookup = {};
202
+ const handleTreeNode = (node, areAncestorsExpanded) => {
203
+ const isPassingFiltering = filteredRowsLookup[node.id];
204
+ if (node.type === 'group') {
205
+ node.children.forEach(childId => {
206
+ const childNode = tree[childId];
207
+ handleTreeNode(childNode, areAncestorsExpanded && !!node.childrenExpanded);
208
+ });
209
+ }
210
+ visibleRowsLookup[node.id] = isPassingFiltering && areAncestorsExpanded;
211
+
212
+ // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ?
213
+ if (node.type === 'group' && node.footerId != null) {
214
+ visibleRowsLookup[node.footerId] = isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded;
215
+ }
216
+ };
217
+ const nodes = Object.values(tree);
218
+ for (let i = 0; i < nodes.length; i += 1) {
219
+ const node = nodes[i];
220
+ if (node.depth === 0) {
221
+ handleTreeNode(node, true);
222
+ }
223
+ }
224
+ return visibleRowsLookup;
225
+ };
226
+ exports.getVisibleRowsLookup = getVisibleRowsLookup;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-pro",
3
- "version": "6.4.0",
3
+ "version": "6.6.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",
@@ -32,9 +32,9 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@babel/runtime": "^7.21.0",
35
- "@mui/utils": "^5.12.3",
36
- "@mui/x-data-grid": "6.4.0",
37
- "@mui/x-license-pro": "6.0.4",
35
+ "@mui/utils": "^5.13.1",
36
+ "@mui/x-data-grid": "6.6.0",
37
+ "@mui/x-license-pro": "6.6.0",
38
38
  "@types/format-util": "^1.0.2",
39
39
  "clsx": "^1.2.1",
40
40
  "prop-types": "^15.8.1",
@@ -43,8 +43,8 @@
43
43
  "peerDependencies": {
44
44
  "@mui/material": "^5.4.1",
45
45
  "@mui/system": "^5.4.1",
46
- "react": "^17.0.2 || ^18.0.0",
47
- "react-dom": "^17.0.2 || ^18.0.0"
46
+ "react": "^17.0.0 || ^18.0.0",
47
+ "react-dom": "^17.0.0 || ^18.0.0"
48
48
  },
49
49
  "setupFiles": [
50
50
  "<rootDir>/src/setupTests.js"
@@ -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 = "MTY4Mzg0MjQwMDAwMA==";
3
+ const releaseInfo = "MTY4NTU3MDQwMDAwMA==";
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 {};
@@ -10,6 +10,7 @@ export const insertDataRowInTree = ({
10
10
  id,
11
11
  path,
12
12
  updatedGroupsManager,
13
+ previousTree,
13
14
  tree,
14
15
  treeDepths,
15
16
  onDuplicatePath,
@@ -43,6 +44,7 @@ export const insertDataRowInTree = ({
43
44
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(parentNodeId, 'insertChildren');
44
45
  insertNodeInTree({
45
46
  node: leafNode,
47
+ previousTree,
46
48
  tree,
47
49
  treeDepths
48
50
  });
@@ -56,6 +58,7 @@ export const insertDataRowInTree = ({
56
58
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(parentNodeId, 'insertChildren');
57
59
  updateGroupNodeIdAndAutoGenerated({
58
60
  tree,
61
+ previousTree,
59
62
  treeDepths,
60
63
  node: existingNodeWithPartialPath,
61
64
  updatedNode: {
@@ -95,6 +98,7 @@ export const insertDataRowInTree = ({
95
98
  defaultGroupingExpansionDepth,
96
99
  isGroupExpandedByDefault
97
100
  }),
101
+ previousTree,
98
102
  tree,
99
103
  treeDepths
100
104
  });
@@ -48,6 +48,7 @@ const replaceDataGroupWithAutoGeneratedGroup = ({
48
48
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(node.parent, 'removeChildren');
49
49
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(node.parent, 'insertChildren');
50
50
  updateGroupNodeIdAndAutoGenerated({
51
+ previousTree: null,
51
52
  tree,
52
53
  treeDepths,
53
54
  node,
@@ -14,6 +14,7 @@ export const updateRowTree = params => {
14
14
  path
15
15
  } = params.nodes.inserted[i];
16
16
  insertDataRowInTree({
17
+ previousTree: params.previousTree,
17
18
  tree,
18
19
  treeDepths,
19
20
  updatedGroupsManager,
@@ -51,6 +52,7 @@ export const updateRowTree = params => {
51
52
  id
52
53
  });
53
54
  insertDataRowInTree({
55
+ previousTree: params.previousTree,
54
56
  tree,
55
57
  treeDepths,
56
58
  updatedGroupsManager,
@@ -1,4 +1,4 @@
1
- import { GridChildrenFromPathLookup, GridGroupNode, GridRowId, GridRowTreeConfig, GridTreeNode } from '@mui/x-data-grid';
1
+ import { GridChildrenFromPathLookup, GridFilterState, GridGroupNode, GridRowId, GridRowTreeConfig, GridRowsState, GridTreeNode } from '@mui/x-data-grid';
2
2
  import { GridTreeDepths, GridRowTreeUpdatedGroupsManager } from '@mui/x-data-grid/internals';
3
3
  import { RowTreeBuilderGroupingCriterion } from './models';
4
4
  import { DataGridProProps } from '../../models/dataGridProProps';
@@ -41,8 +41,9 @@ export declare const addGroupDefaultExpansion: ({ node, isGroupExpandedByDefault
41
41
  /**
42
42
  * Insert a node in the tree
43
43
  */
44
- export declare const insertNodeInTree: ({ node, tree, treeDepths, }: {
44
+ export declare const insertNodeInTree: ({ node, previousTree, tree, treeDepths, }: {
45
45
  node: GridTreeNode;
46
+ previousTree: GridRowTreeConfig | null;
46
47
  tree: GridRowTreeConfig;
47
48
  treeDepths: GridTreeDepths;
48
49
  }) => void;
@@ -57,10 +58,15 @@ export declare const removeNodeFromTree: ({ node, tree, treeDepths, }: {
57
58
  /**
58
59
  * Updates the `id` and `isAutoGenerated` properties of a group node.
59
60
  */
60
- export declare const updateGroupNodeIdAndAutoGenerated: ({ node, updatedNode, tree, treeDepths, }: {
61
+ export declare const updateGroupNodeIdAndAutoGenerated: ({ node, updatedNode, previousTree, tree, treeDepths, }: {
62
+ previousTree: GridRowTreeConfig | null;
61
63
  node: GridGroupNode;
62
64
  updatedNode: Pick<GridGroupNode, 'id' | 'isAutoGenerated'>;
63
65
  tree: GridRowTreeConfig;
64
66
  treeDepths: GridTreeDepths;
65
67
  }) => void;
66
68
  export declare const createUpdatedGroupsManager: () => GridRowTreeUpdatedGroupsManager;
69
+ export declare const getVisibleRowsLookup: ({ tree, filteredRowsLookup, }: {
70
+ tree: GridRowsState['tree'];
71
+ filteredRowsLookup: GridFilterState['filteredRowsLookup'];
72
+ }) => Record<GridRowId, boolean>;
@@ -45,6 +45,7 @@ export const addGroupDefaultExpansion = ({
45
45
  */
46
46
  export const insertNodeInTree = ({
47
47
  node,
48
+ previousTree,
48
49
  tree,
49
50
  treeDepths
50
51
  }) => {
@@ -60,23 +61,26 @@ export const insertNodeInTree = ({
60
61
  if (node.type === 'footer') {
61
62
  // For footers,
62
63
  // Register the node from its parent `footerId` property.
63
- tree[node.parent] = _extends({}, parentNode, {
64
- footerId: node.id
65
- });
64
+ parentNode.footerId = node.id;
66
65
  } else if (node.type === 'group' || node.type === 'leaf') {
67
66
  var _groupingField, _groupingKey, _parentNode$childrenF;
68
67
  // For groups and leaves,
69
68
  // Register the node from its parents `children` and `childrenFromPath` properties.
70
- const groupingField = (_groupingField = node.groupingField) != null ? _groupingField : '__no_field__';
71
- const groupingKey = (_groupingKey = node.groupingKey) != null ? _groupingKey : '__no_key__';
72
- tree[node.parent] = _extends({}, parentNode, {
73
- childrenFromPath: _extends({}, parentNode.childrenFromPath, {
74
- [groupingField]: _extends({}, (_parentNode$childrenF = parentNode.childrenFromPath) == null ? void 0 : _parentNode$childrenF[groupingField], {
75
- [groupingKey.toString()]: node.id
76
- })
77
- }),
78
- children: [...parentNode.children, node.id]
79
- });
69
+ const groupingFieldName = (_groupingField = node.groupingField) != null ? _groupingField : '__no_field__';
70
+ const groupingKeyName = (_groupingKey = node.groupingKey) != null ? _groupingKey : '__no_key__';
71
+ const groupingField = (_parentNode$childrenF = parentNode.childrenFromPath) == null ? void 0 : _parentNode$childrenF[groupingFieldName];
72
+ if (previousTree !== null && previousTree[parentNode.id] === tree[parentNode.id]) {
73
+ parentNode.children = [...parentNode.children, node.id];
74
+ } else {
75
+ parentNode.children.push(node.id);
76
+ }
77
+ if (groupingField == null) {
78
+ parentNode.childrenFromPath[groupingFieldName] = {
79
+ [groupingKeyName.toString()]: node.id
80
+ };
81
+ } else {
82
+ groupingField[groupingKeyName.toString()] = node.id;
83
+ }
80
84
  }
81
85
  };
82
86
 
@@ -140,6 +144,7 @@ export const removeNodeFromTree = ({
140
144
  export const updateGroupNodeIdAndAutoGenerated = ({
141
145
  node,
142
146
  updatedNode,
147
+ previousTree,
143
148
  tree,
144
149
  treeDepths
145
150
  }) => {
@@ -160,6 +165,7 @@ export const updateGroupNodeIdAndAutoGenerated = ({
160
165
  // 3. Add the new group in the tree
161
166
  const groupNode = _extends({}, node, updatedNode);
162
167
  insertNodeInTree({
168
+ previousTree,
163
169
  node: groupNode,
164
170
  tree,
165
171
  treeDepths
@@ -173,4 +179,36 @@ export const createUpdatedGroupsManager = () => ({
173
179
  }
174
180
  this.value[groupId][action] = true;
175
181
  }
176
- });
182
+ });
183
+ export const getVisibleRowsLookup = ({
184
+ tree,
185
+ filteredRowsLookup
186
+ }) => {
187
+ if (!filteredRowsLookup) {
188
+ return {};
189
+ }
190
+ const visibleRowsLookup = {};
191
+ const handleTreeNode = (node, areAncestorsExpanded) => {
192
+ const isPassingFiltering = filteredRowsLookup[node.id];
193
+ if (node.type === 'group') {
194
+ node.children.forEach(childId => {
195
+ const childNode = tree[childId];
196
+ handleTreeNode(childNode, areAncestorsExpanded && !!node.childrenExpanded);
197
+ });
198
+ }
199
+ visibleRowsLookup[node.id] = isPassingFiltering && areAncestorsExpanded;
200
+
201
+ // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ?
202
+ if (node.type === 'group' && node.footerId != null) {
203
+ visibleRowsLookup[node.footerId] = isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded;
204
+ }
205
+ };
206
+ const nodes = Object.values(tree);
207
+ for (let i = 0; i < nodes.length; i += 1) {
208
+ const node = nodes[i];
209
+ if (node.depth === 0) {
210
+ handleTreeNode(node, true);
211
+ }
212
+ }
213
+ return visibleRowsLookup;
214
+ };