@mui/x-data-grid-pro 6.5.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 (123) hide show
  1. package/CHANGELOG.md +150 -2
  2. package/DataGridPro/DataGridPro.js +10 -3
  3. package/README.md +2 -2
  4. package/components/DataGridProVirtualScroller.js +12 -12
  5. package/components/GridColumnHeaders.js +9 -3
  6. package/components/GridColumnMenuPinningItem.d.ts +2 -2
  7. package/components/GridDetailPanel.d.ts +1 -1
  8. package/components/GridDetailPanelToggleCell.d.ts +2 -2
  9. package/components/GridRowReorderCell.d.ts +3 -3
  10. package/components/GridScrollArea.d.ts +10 -0
  11. package/components/GridScrollArea.js +140 -0
  12. package/components/GridTreeDataGroupingCell.d.ts +2 -2
  13. package/components/headerFiltering/GridHeaderFilterCell.d.ts +0 -1
  14. package/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  15. package/components/headerFiltering/GridHeaderFilterClearButton.d.ts +2 -2
  16. package/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  17. package/components/headerFiltering/GridHeaderFilterMenu.d.ts +5 -2
  18. package/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  19. package/components/headerFiltering/{GridHeaderFilterAdornment.d.ts → GridHeaderFilterMenuContainer.d.ts} +4 -4
  20. package/{modern/components/headerFiltering/GridHeaderFilterAdornment.js → components/headerFiltering/GridHeaderFilterMenuContainer.js} +23 -24
  21. package/components/headerFiltering/index.d.ts +2 -1
  22. package/components/headerFiltering/index.js +3 -2
  23. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +3 -3
  24. package/hooks/features/columnHeaders/useGridColumnHeaders.js +16 -8
  25. package/hooks/features/columnResize/useGridColumnResize.js +11 -12
  26. package/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  27. package/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  28. package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  29. package/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  30. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -0
  31. package/index.js +1 -1
  32. package/internals/index.d.ts +1 -1
  33. package/internals/index.js +1 -1
  34. package/legacy/DataGridPro/DataGridPro.js +10 -3
  35. package/legacy/components/DataGridProVirtualScroller.js +12 -12
  36. package/legacy/components/GridColumnHeaders.js +9 -3
  37. package/legacy/components/GridScrollArea.js +143 -0
  38. package/legacy/components/headerFiltering/GridHeaderFilterCell.js +39 -27
  39. package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  40. package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  41. package/legacy/components/headerFiltering/{GridHeaderFilterAdornment.js → GridHeaderFilterMenuContainer.js} +23 -25
  42. package/legacy/components/headerFiltering/index.js +3 -2
  43. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +14 -8
  44. package/legacy/hooks/features/columnResize/useGridColumnResize.js +11 -12
  45. package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  46. package/legacy/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  47. package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  48. package/legacy/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  49. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -0
  50. package/legacy/index.js +1 -1
  51. package/legacy/internals/index.js +1 -1
  52. package/legacy/material/icons.js +1 -4
  53. package/legacy/material/index.js +2 -3
  54. package/legacy/utils/releaseInfo.js +1 -1
  55. package/legacy/utils/tree/insertDataRowInTree.js +8 -24
  56. package/legacy/utils/tree/sortRowTree.js +78 -18
  57. package/legacy/utils/tree/utils.js +55 -37
  58. package/material/icons.d.ts +0 -3
  59. package/material/icons.js +1 -4
  60. package/material/index.d.ts +0 -1
  61. package/material/index.js +2 -3
  62. package/models/gridProIconSlotsComponent.d.ts +0 -5
  63. package/modern/DataGridPro/DataGridPro.js +10 -3
  64. package/modern/components/DataGridProVirtualScroller.js +12 -12
  65. package/modern/components/GridColumnHeaders.js +9 -3
  66. package/modern/components/GridScrollArea.js +140 -0
  67. package/modern/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  68. package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  69. package/modern/components/headerFiltering/GridHeaderFilterMenu.js +36 -15
  70. package/{components/headerFiltering/GridHeaderFilterAdornment.js → modern/components/headerFiltering/GridHeaderFilterMenuContainer.js} +22 -25
  71. package/modern/components/headerFiltering/index.js +3 -2
  72. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +16 -8
  73. package/modern/hooks/features/columnResize/useGridColumnResize.js +11 -12
  74. package/modern/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  75. package/modern/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  76. package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  77. package/modern/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  78. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -0
  79. package/modern/index.js +1 -1
  80. package/modern/internals/index.js +1 -1
  81. package/modern/material/icons.js +1 -4
  82. package/modern/material/index.js +2 -3
  83. package/modern/utils/releaseInfo.js +1 -1
  84. package/modern/utils/tree/insertDataRowInTree.js +8 -24
  85. package/modern/utils/tree/sortRowTree.js +64 -18
  86. package/modern/utils/tree/utils.js +43 -26
  87. package/node/DataGridPro/DataGridPro.js +10 -3
  88. package/node/components/DataGridProVirtualScroller.js +12 -12
  89. package/node/components/GridColumnHeaders.js +8 -3
  90. package/node/components/GridScrollArea.js +149 -0
  91. package/node/components/headerFiltering/GridHeaderFilterCell.js +36 -23
  92. package/node/components/headerFiltering/GridHeaderFilterClearButton.js +1 -1
  93. package/node/components/headerFiltering/GridHeaderFilterMenu.js +36 -14
  94. package/node/components/headerFiltering/{GridHeaderFilterAdornment.js → GridHeaderFilterMenuContainer.js} +22 -24
  95. package/node/components/headerFiltering/index.js +15 -4
  96. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +15 -7
  97. package/node/hooks/features/columnResize/useGridColumnResize.js +11 -12
  98. package/node/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
  99. package/node/hooks/features/lazyLoader/useGridLazyLoaderPreProcessors.js +2 -2
  100. package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -6
  101. package/node/hooks/features/treeData/gridTreeDataUtils.js +0 -8
  102. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +2 -0
  103. package/node/index.js +1 -1
  104. package/node/internals/index.js +8 -1
  105. package/node/material/icons.js +2 -6
  106. package/node/material/index.js +1 -2
  107. package/node/utils/releaseInfo.js +1 -1
  108. package/node/utils/tree/insertDataRowInTree.js +7 -23
  109. package/node/utils/tree/sortRowTree.js +64 -18
  110. package/node/utils/tree/utils.js +46 -28
  111. package/package.json +6 -6
  112. package/themeAugmentation/overrides.d.ts +1 -1
  113. package/typeOverloads/modules.d.ts +6 -6
  114. package/utils/releaseInfo.js +1 -1
  115. package/utils/tree/insertDataRowInTree.js +8 -24
  116. package/utils/tree/sortRowTree.js +64 -18
  117. package/utils/tree/utils.d.ts +7 -38
  118. package/utils/tree/utils.js +43 -26
  119. package/components/headerFiltering/constants.d.ts +0 -3
  120. package/components/headerFiltering/constants.js +0 -30
  121. package/legacy/components/headerFiltering/constants.js +0 -30
  122. package/modern/components/headerFiltering/constants.js +0 -30
  123. package/node/components/headerFiltering/constants.js +0 -37
@@ -10,7 +10,6 @@ export var filterRowTreeFromTreeData = function filterRowTreeFromTreeData(params
10
10
  var rowTree = params.rowTree,
11
11
  disableChildrenFiltering = params.disableChildrenFiltering,
12
12
  isRowMatchingFilters = params.isRowMatchingFilters;
13
- var visibleRowsLookup = {};
14
13
  var filteredRowsLookup = {};
15
14
  var filteredDescendantCountLookup = {};
16
15
  var filterTreeNode = function filterTreeNode(node, isParentMatchingFilters, areAncestorsExpanded) {
@@ -53,13 +52,7 @@ export var filterRowTreeFromTreeData = function filterRowTreeFromTreeData(params
53
52
  break;
54
53
  }
55
54
  }
56
- visibleRowsLookup[node.id] = shouldPassFilters && areAncestorsExpanded;
57
55
  filteredRowsLookup[node.id] = shouldPassFilters;
58
-
59
- // TODO: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ?
60
- if (node.type === 'group' && node.footerId != null) {
61
- visibleRowsLookup[node.footerId] = shouldPassFilters && areAncestorsExpanded && !!node.childrenExpanded;
62
- }
63
56
  if (!shouldPassFilters) {
64
57
  return 0;
65
58
  }
@@ -77,7 +70,6 @@ export var filterRowTreeFromTreeData = function filterRowTreeFromTreeData(params
77
70
  }
78
71
  }
79
72
  return {
80
- visibleRowsLookup: visibleRowsLookup,
81
73
  filteredRowsLookup: filteredRowsLookup,
82
74
  filteredDescendantCountLookup: filteredDescendantCountLookup
83
75
  };
@@ -11,6 +11,7 @@ import { GridTreeDataGroupingCell } from '../../../components';
11
11
  import { createRowTree } from '../../../utils/tree/createRowTree';
12
12
  import { sortRowTree } from '../../../utils/tree/sortRowTree';
13
13
  import { updateRowTree } from '../../../utils/tree/updateRowTree';
14
+ import { getVisibleRowsLookup } from '../../../utils/tree/utils';
14
15
  import { jsx as _jsx } from "react/jsx-runtime";
15
16
  export var useGridTreeDataPreProcessors = function useGridTreeDataPreProcessors(privateApiRef, props) {
16
17
  var setStrategyAvailability = React.useCallback(function () {
@@ -135,6 +136,7 @@ export var useGridTreeDataPreProcessors = function useGridTreeDataPreProcessors(
135
136
  useGridRegisterStrategyProcessor(privateApiRef, TREE_DATA_STRATEGY, 'rowTreeCreation', createRowTreeForTreeData);
136
137
  useGridRegisterStrategyProcessor(privateApiRef, TREE_DATA_STRATEGY, 'filtering', filterRows);
137
138
  useGridRegisterStrategyProcessor(privateApiRef, TREE_DATA_STRATEGY, 'sorting', sortRows);
139
+ useGridRegisterStrategyProcessor(privateApiRef, TREE_DATA_STRATEGY, 'visibleRowsLookupCreation', getVisibleRowsLookup);
138
140
 
139
141
  /**
140
142
  * 1ST RENDER
package/legacy/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-pro v6.5.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
@@ -25,4 +25,4 @@ export { useGridLazyLoaderPreProcessors } from '../hooks/features/lazyLoader/use
25
25
  export { createRowTree } from '../utils/tree/createRowTree';
26
26
  export { updateRowTree } from '../utils/tree/updateRowTree';
27
27
  export { sortRowTree } from '../utils/tree/sortRowTree';
28
- export { insertNodeInTree, removeNodeFromTree } from '../utils/tree/utils';
28
+ export { insertNodeInTree, removeNodeFromTree, getVisibleRowsLookup } from '../utils/tree/utils';
@@ -14,7 +14,4 @@ export var GridPushPinLeftIcon = createSvgIcon( /*#__PURE__*/_jsx("g", {
14
14
  d: "M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z",
15
15
  fillRule: "evenodd"
16
16
  })
17
- }), 'PushPinLeft');
18
- export var GridHighlightOffIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
19
- 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"
20
- }), 'HighlightOff');
17
+ }), 'PushPinLeft');
@@ -1,9 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { GridPushPinRightIcon, GridPushPinLeftIcon, GridHighlightOffIcon } from './icons';
2
+ import { GridPushPinRightIcon, GridPushPinLeftIcon } from './icons';
3
3
  var iconSlots = {
4
4
  ColumnMenuPinRightIcon: GridPushPinRightIcon,
5
- ColumnMenuPinLeftIcon: GridPushPinLeftIcon,
6
- HeaderFilterClearIcon: GridHighlightOffIcon
5
+ ColumnMenuPinLeftIcon: GridPushPinLeftIcon
7
6
  };
8
7
  var materialSlots = _extends({}, iconSlots);
9
8
  export default materialSlots;
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export var getReleaseInfo = function getReleaseInfo() {
3
- var releaseInfo = "MTY4NDQ0MzYwMDAwMA==";
3
+ var releaseInfo = "MTY4NjI2MTYwMDAwMA==";
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,5 +1,5 @@
1
1
  import { GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
2
- import { addGroupDefaultExpansion, getGroupRowIdFromPath, insertNodeInTree, updateGroupNodeIdAndAutoGenerated } from './utils';
2
+ import { updateGroupDefaultExpansion, getGroupRowIdFromPath, insertNodeInTree, updateGroupNodeIdAndAutoGenerated } from './utils';
3
3
  /**
4
4
  * Inserts a data row in a tree.
5
5
  * For each steps of its path:
@@ -40,12 +40,7 @@ export var insertDataRowInTree = function insertDataRowInTree(_ref) {
40
40
  groupingKey: key
41
41
  };
42
42
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(parentNodeId, 'insertChildren');
43
- insertNodeInTree({
44
- node: leafNode,
45
- previousTree: previousTree,
46
- tree: tree,
47
- treeDepths: treeDepths
48
- });
43
+ insertNodeInTree(leafNode, tree, treeDepths, previousTree);
49
44
  } else {
50
45
  var existingNodeWithPartialPath = tree[existingNodeIdWithPartialPath];
51
46
 
@@ -87,19 +82,11 @@ export var insertDataRowInTree = function insertDataRowInTree(_ref) {
87
82
  groupingKey: key,
88
83
  groupingField: field,
89
84
  children: [],
90
- childrenFromPath: {}
85
+ childrenFromPath: {},
86
+ childrenExpanded: false
91
87
  };
92
88
  updatedGroupsManager == null ? void 0 : updatedGroupsManager.addAction(parentNodeId, 'insertChildren');
93
- insertNodeInTree({
94
- node: addGroupDefaultExpansion({
95
- node: autoGeneratedGroupNode,
96
- defaultGroupingExpansionDepth: defaultGroupingExpansionDepth,
97
- isGroupExpandedByDefault: isGroupExpandedByDefault
98
- }),
99
- previousTree: previousTree,
100
- tree: tree,
101
- treeDepths: treeDepths
102
- });
89
+ insertNodeInTree(updateGroupDefaultExpansion(autoGeneratedGroupNode, defaultGroupingExpansionDepth, isGroupExpandedByDefault), tree, treeDepths, previousTree);
103
90
  parentNodeId = nodeId;
104
91
  }
105
92
  // For the intermediary steps of the path
@@ -118,13 +105,10 @@ export var insertDataRowInTree = function insertDataRowInTree(_ref) {
118
105
  groupingKey: key,
119
106
  groupingField: field,
120
107
  children: [],
121
- childrenFromPath: {}
108
+ childrenFromPath: {},
109
+ childrenExpanded: false
122
110
  };
123
- tree[existingNodeIdWithPartialPath] = addGroupDefaultExpansion({
124
- node: groupNode,
125
- defaultGroupingExpansionDepth: defaultGroupingExpansionDepth,
126
- isGroupExpandedByDefault: isGroupExpandedByDefault
127
- });
111
+ tree[existingNodeIdWithPartialPath] = updateGroupDefaultExpansion(groupNode, defaultGroupingExpansionDepth, isGroupExpandedByDefault);
128
112
  }
129
113
  parentNodeId = currentGroupNode.id;
130
114
  }
@@ -1,11 +1,80 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
2
4
  import { GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
5
+ // Single-linked list node
6
+ var Node = /*#__PURE__*/function () {
7
+ function Node(data, next) {
8
+ _classCallCheck(this, Node);
9
+ this.next = void 0;
10
+ this.data = void 0;
11
+ this.next = next;
12
+ this.data = data;
13
+ }
14
+ _createClass(Node, [{
15
+ key: "insertAfter",
16
+ value: function insertAfter(list) {
17
+ if (!list.first || !list.last) {
18
+ return;
19
+ }
20
+ var next = this.next;
21
+ this.next = list.first;
22
+ list.last.next = next;
23
+ }
24
+ }]);
25
+ return Node;
26
+ }(); // Single-linked list container
27
+ var List = /*#__PURE__*/function () {
28
+ function List(first, last) {
29
+ _classCallCheck(this, List);
30
+ this.first = void 0;
31
+ this.last = void 0;
32
+ this.first = first;
33
+ this.last = last;
34
+ }
35
+ _createClass(List, [{
36
+ key: "data",
37
+ value: function data() {
38
+ var array = [];
39
+ this.forEach(function (node) {
40
+ array.push(node.data);
41
+ });
42
+ return array;
43
+ }
44
+ }, {
45
+ key: "forEach",
46
+ value: function forEach(fn) {
47
+ var current = this.first;
48
+ while (current !== null) {
49
+ fn(current);
50
+ current = current.next;
51
+ }
52
+ }
53
+ }], [{
54
+ key: "from",
55
+ value: function from(array) {
56
+ if (array.length === 0) {
57
+ return new List(null, null);
58
+ }
59
+ var index = 0;
60
+ var first = new Node(array[index], null);
61
+ var current = first;
62
+ while (index + 1 < array.length) {
63
+ index += 1;
64
+ var _node = new Node(array[index], null);
65
+ current.next = _node;
66
+ current = _node;
67
+ }
68
+ return new List(first, current);
69
+ }
70
+ }]);
71
+ return List;
72
+ }();
3
73
  export var sortRowTree = function sortRowTree(params) {
4
74
  var rowTree = params.rowTree,
5
75
  disableChildrenSorting = params.disableChildrenSorting,
6
76
  sortRowList = params.sortRowList,
7
77
  shouldRenderGroupBelowLeaves = params.shouldRenderGroupBelowLeaves;
8
- var sortedRows = [];
9
78
  var sortedGroupedByParentRows = new Map();
10
79
  var sortGroup = function sortGroup(node) {
11
80
  var shouldSortGroup = !!sortRowList && (!disableChildrenSorting || node.depth === -1);
@@ -49,21 +118,12 @@ export var sortRowTree = function sortRowTree(params) {
49
118
  sortedGroupedByParentRows.set(node.id, sortedRowIds);
50
119
  };
51
120
  sortGroup(rowTree[GRID_ROOT_GROUP_ID]);
52
-
53
- // Flatten the sorted lists to have children just after their parent
54
- var insertRowListIntoSortedRows = function insertRowListIntoSortedRows(startIndex, rowList) {
55
- sortedRows = [].concat(_toConsumableArray(sortedRows.slice(0, startIndex)), _toConsumableArray(rowList), _toConsumableArray(sortedRows.slice(startIndex)));
56
- var treeSize = 0;
57
- rowList.forEach(function (rowId) {
58
- treeSize += 1;
59
- var children = sortedGroupedByParentRows.get(rowId);
60
- if (children != null && children.length) {
61
- var subTreeSize = insertRowListIntoSortedRows(startIndex + treeSize, children);
62
- treeSize += subTreeSize;
63
- }
64
- });
65
- return treeSize;
66
- };
67
- insertRowListIntoSortedRows(0, sortedGroupedByParentRows.get(GRID_ROOT_GROUP_ID));
68
- return sortedRows;
121
+ var rootList = List.from(sortedGroupedByParentRows.get(GRID_ROOT_GROUP_ID));
122
+ rootList.forEach(function (node) {
123
+ var children = sortedGroupedByParentRows.get(node.data);
124
+ if (children != null && children.length) {
125
+ node.insertAfter(List.from(children));
126
+ }
127
+ });
128
+ return rootList.data();
69
129
  };
@@ -1,8 +1,8 @@
1
1
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
2
  import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
5
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
5
- import _extends from "@babel/runtime/helpers/esm/extends";
6
6
  import { GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
7
7
  export var getGroupRowIdFromPath = function getGroupRowIdFromPath(path) {
8
8
  var pathStr = path.map(function (groupingCriteria) {
@@ -25,10 +25,7 @@ export var getNodePathInTree = function getNodePathInTree(_ref) {
25
25
  path.reverse();
26
26
  return path;
27
27
  };
28
- export var addGroupDefaultExpansion = function addGroupDefaultExpansion(_ref2) {
29
- var node = _ref2.node,
30
- isGroupExpandedByDefault = _ref2.isGroupExpandedByDefault,
31
- defaultGroupingExpansionDepth = _ref2.defaultGroupingExpansionDepth;
28
+ export var updateGroupDefaultExpansion = function updateGroupDefaultExpansion(node, defaultGroupingExpansionDepth, isGroupExpandedByDefault) {
32
29
  var childrenExpanded;
33
30
  if (node.id === GRID_ROOT_GROUP_ID) {
34
31
  childrenExpanded = true;
@@ -37,20 +34,15 @@ export var addGroupDefaultExpansion = function addGroupDefaultExpansion(_ref2) {
37
34
  } else {
38
35
  childrenExpanded = defaultGroupingExpansionDepth === -1 || defaultGroupingExpansionDepth > node.depth;
39
36
  }
40
- return _extends({}, node, {
41
- childrenExpanded: childrenExpanded
42
- });
37
+ node.childrenExpanded = childrenExpanded;
38
+ return node;
43
39
  };
44
40
 
45
41
  /**
46
42
  * Insert a node in the tree
47
43
  */
48
- export var insertNodeInTree = function insertNodeInTree(_ref3) {
44
+ export var insertNodeInTree = function insertNodeInTree(node, tree, treeDepths, previousTree) {
49
45
  var _treeDepths$node$dept;
50
- var node = _ref3.node,
51
- previousTree = _ref3.previousTree,
52
- tree = _ref3.tree,
53
- treeDepths = _ref3.treeDepths;
54
46
  // 1. Insert node in the tree.
55
47
  tree[node.id] = node;
56
48
 
@@ -59,11 +51,7 @@ export var insertNodeInTree = function insertNodeInTree(_ref3) {
59
51
 
60
52
  // 3. Register the new node in its parent.
61
53
  var parentNode = tree[node.parent];
62
- if (node.type === 'footer') {
63
- // For footers,
64
- // Register the node from its parent `footerId` property.
65
- parentNode.footerId = node.id;
66
- } else if (node.type === 'group' || node.type === 'leaf') {
54
+ if (node.type === 'group' || node.type === 'leaf') {
67
55
  var _groupingField, _groupingKey, _parentNode$childrenF;
68
56
  // For groups and leaves,
69
57
  // Register the node from its parents `children` and `childrenFromPath` properties.
@@ -80,16 +68,20 @@ export var insertNodeInTree = function insertNodeInTree(_ref3) {
80
68
  } else {
81
69
  groupingField[groupingKeyName.toString()] = node.id;
82
70
  }
71
+ } else if (node.type === 'footer') {
72
+ // For footers,
73
+ // Register the node from its parent `footerId` property.
74
+ parentNode.footerId = node.id;
83
75
  }
84
76
  };
85
77
 
86
78
  /**
87
79
  * Removes a node from the tree
88
80
  */
89
- export var removeNodeFromTree = function removeNodeFromTree(_ref4) {
90
- var node = _ref4.node,
91
- tree = _ref4.tree,
92
- treeDepths = _ref4.treeDepths;
81
+ export var removeNodeFromTree = function removeNodeFromTree(_ref2) {
82
+ var node = _ref2.node,
83
+ tree = _ref2.tree,
84
+ treeDepths = _ref2.treeDepths;
93
85
  // 1. Remove node from the tree.
94
86
  delete tree[node.id];
95
87
 
@@ -117,10 +109,10 @@ export var removeNodeFromTree = function removeNodeFromTree(_ref4) {
117
109
  var _groupingField2, _groupingKey2, _parentNode$childrenF3, _parentNode$childrenF4;
118
110
  var groupingField = (_groupingField2 = node.groupingField) != null ? _groupingField2 : '__no_field__';
119
111
  var groupingKey = (_groupingKey2 = node.groupingKey) != null ? _groupingKey2 : '__no_key__';
120
- var _ref5 = (_parentNode$childrenF3 = (_parentNode$childrenF4 = parentNode.childrenFromPath) == null ? void 0 : _parentNode$childrenF4[groupingField]) != null ? _parentNode$childrenF3 : {},
112
+ var _ref3 = (_parentNode$childrenF3 = (_parentNode$childrenF4 = parentNode.childrenFromPath) == null ? void 0 : _parentNode$childrenF4[groupingField]) != null ? _parentNode$childrenF3 : {},
121
113
  _groupingKey$toString = groupingKey.toString(),
122
- childrenToRemove = _ref5[_groupingKey$toString],
123
- newChildrenFromPathWithField = _objectWithoutProperties(_ref5, [_groupingKey$toString].map(_toPropertyKey));
114
+ childrenToRemove = _ref3[_groupingKey$toString],
115
+ newChildrenFromPathWithField = _objectWithoutProperties(_ref3, [_groupingKey$toString].map(_toPropertyKey));
124
116
 
125
117
  // TODO rows v6: Can we avoid this linear complexity ?
126
118
  var children = parentNode.children.filter(function (childId) {
@@ -142,12 +134,12 @@ export var removeNodeFromTree = function removeNodeFromTree(_ref4) {
142
134
  /**
143
135
  * Updates the `id` and `isAutoGenerated` properties of a group node.
144
136
  */
145
- export var updateGroupNodeIdAndAutoGenerated = function updateGroupNodeIdAndAutoGenerated(_ref6) {
146
- var node = _ref6.node,
147
- updatedNode = _ref6.updatedNode,
148
- previousTree = _ref6.previousTree,
149
- tree = _ref6.tree,
150
- treeDepths = _ref6.treeDepths;
137
+ export var updateGroupNodeIdAndAutoGenerated = function updateGroupNodeIdAndAutoGenerated(_ref4) {
138
+ var node = _ref4.node,
139
+ updatedNode = _ref4.updatedNode,
140
+ previousTree = _ref4.previousTree,
141
+ tree = _ref4.tree,
142
+ treeDepths = _ref4.treeDepths;
151
143
  // 1. Set the new parent for all children from the old group
152
144
  node.children.forEach(function (childId) {
153
145
  tree[childId] = _extends({}, tree[childId], {
@@ -164,12 +156,7 @@ export var updateGroupNodeIdAndAutoGenerated = function updateGroupNodeIdAndAuto
164
156
 
165
157
  // 3. Add the new group in the tree
166
158
  var groupNode = _extends({}, node, updatedNode);
167
- insertNodeInTree({
168
- previousTree: previousTree,
169
- node: groupNode,
170
- tree: tree,
171
- treeDepths: treeDepths
172
- });
159
+ insertNodeInTree(groupNode, tree, treeDepths, previousTree);
173
160
  };
174
161
  export var createUpdatedGroupsManager = function createUpdatedGroupsManager() {
175
162
  return {
@@ -181,4 +168,35 @@ export var createUpdatedGroupsManager = function createUpdatedGroupsManager() {
181
168
  this.value[groupId][action] = true;
182
169
  }
183
170
  };
171
+ };
172
+ export var getVisibleRowsLookup = function getVisibleRowsLookup(_ref5) {
173
+ var tree = _ref5.tree,
174
+ filteredRowsLookup = _ref5.filteredRowsLookup;
175
+ if (!filteredRowsLookup) {
176
+ return {};
177
+ }
178
+ var visibleRowsLookup = {};
179
+ var handleTreeNode = function handleTreeNode(node, areAncestorsExpanded) {
180
+ var isPassingFiltering = filteredRowsLookup[node.id];
181
+ if (node.type === 'group') {
182
+ node.children.forEach(function (childId) {
183
+ var childNode = tree[childId];
184
+ handleTreeNode(childNode, areAncestorsExpanded && !!node.childrenExpanded);
185
+ });
186
+ }
187
+ visibleRowsLookup[node.id] = isPassingFiltering && areAncestorsExpanded;
188
+
189
+ // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ?
190
+ if (node.type === 'group' && node.footerId != null) {
191
+ visibleRowsLookup[node.footerId] = isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded;
192
+ }
193
+ };
194
+ var nodes = Object.values(tree);
195
+ for (var i = 0; i < nodes.length; i += 1) {
196
+ var node = nodes[i];
197
+ if (node.depth === 0) {
198
+ handleTreeNode(node, true);
199
+ }
200
+ }
201
+ return visibleRowsLookup;
184
202
  };
@@ -4,6 +4,3 @@ export declare const GridPushPinRightIcon: import("@mui/material/OverridableComp
4
4
  export declare const GridPushPinLeftIcon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
5
5
  muiName: string;
6
6
  };
7
- export declare const GridHighlightOffIcon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
8
- muiName: string;
9
- };
package/material/icons.js CHANGED
@@ -14,7 +14,4 @@ export const GridPushPinLeftIcon = createSvgIcon( /*#__PURE__*/_jsx("g", {
14
14
  d: "M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z",
15
15
  fillRule: "evenodd"
16
16
  })
17
- }), 'PushPinLeft');
18
- export const GridHighlightOffIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
19
- 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"
20
- }), 'HighlightOff');
17
+ }), 'PushPinLeft');
@@ -2,6 +2,5 @@
2
2
  declare const materialSlots: {
3
3
  ColumnMenuPinLeftIcon: import("react").JSXElementConstructor<any>;
4
4
  ColumnMenuPinRightIcon: import("react").JSXElementConstructor<any>;
5
- HeaderFilterClearIcon: import("react").JSXElementConstructor<any>;
6
5
  };
7
6
  export default materialSlots;
package/material/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { GridPushPinRightIcon, GridPushPinLeftIcon, GridHighlightOffIcon } from './icons';
2
+ import { GridPushPinRightIcon, GridPushPinLeftIcon } from './icons';
3
3
  const iconSlots = {
4
4
  ColumnMenuPinRightIcon: GridPushPinRightIcon,
5
- ColumnMenuPinLeftIcon: GridPushPinLeftIcon,
6
- HeaderFilterClearIcon: GridHighlightOffIcon
5
+ ColumnMenuPinLeftIcon: GridPushPinLeftIcon
7
6
  };
8
7
  const materialSlots = _extends({}, iconSlots);
9
8
  export default materialSlots;
@@ -10,9 +10,4 @@ export interface GridProIconSlotsComponent {
10
10
  * @default GridPushPinRightIcon
11
11
  */
12
12
  ColumnMenuPinRightIcon: React.JSXElementConstructor<any>;
13
- /**
14
- * Component responsible for clear icon in header filter
15
- * @default GridHighlightOffIcon
16
- */
17
- HeaderFilterClearIcon: React.JSXElementConstructor<any>;
18
13
  }
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
3
  import PropTypes from 'prop-types';
3
4
  import { useLicenseVerifier, Watermark } from '@mui/x-license-pro';
@@ -19,11 +20,12 @@ const DataGridProRaw = /*#__PURE__*/React.forwardRef(function DataGridPro(inProp
19
20
  return /*#__PURE__*/_jsx(GridContextProvider, {
20
21
  privateApiRef: privateApiRef,
21
22
  props: props,
22
- children: /*#__PURE__*/_jsxs(GridRoot, {
23
+ children: /*#__PURE__*/_jsxs(GridRoot, _extends({
23
24
  className: props.className,
24
25
  style: props.style,
25
26
  sx: props.sx,
26
- ref: ref,
27
+ ref: ref
28
+ }, props.forwardedProps, {
27
29
  children: [/*#__PURE__*/_jsx(GridHeader, {}), /*#__PURE__*/_jsx(GridBody, {
28
30
  VirtualScrollerComponent: DataGridProVirtualScroller,
29
31
  ColumnHeadersProps: {
@@ -34,7 +36,7 @@ const DataGridProRaw = /*#__PURE__*/React.forwardRef(function DataGridPro(inProp
34
36
  releaseInfo: releaseInfo
35
37
  })
36
38
  }), /*#__PURE__*/_jsx(GridFooterPlaceholder, {})]
37
- })
39
+ }))
38
40
  });
39
41
  });
40
42
  export const DataGridPro = /*#__PURE__*/React.memo(DataGridProRaw);
@@ -255,6 +257,11 @@ DataGridProRaw.propTypes = {
255
257
  quickFilterLogicOperator: PropTypes.oneOf(['and', 'or']),
256
258
  quickFilterValues: PropTypes.array
257
259
  }),
260
+ /**
261
+ * Forwarded props for the grid root element.
262
+ * @ignore - do not document.
263
+ */
264
+ forwardedProps: PropTypes.object,
258
265
  /**
259
266
  * Function that applies CSS classes dynamically on cells.
260
267
  * @param {GridCellParams} params With all properties from [[GridCellParams]].
@@ -176,8 +176,17 @@ const DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGr
176
176
  bottomPinnedRowsRenderZoneRef.current.style.transform = `translate3d(${left}px, 0px, 0px)`;
177
177
  }
178
178
  }, []);
179
+
180
+ // Create a lookup for faster check if the row is expanded
181
+ const expandedRowIdsLookup = React.useMemo(() => {
182
+ const lookup = new Set();
183
+ expandedRowIds.forEach(id => {
184
+ lookup.add(id);
185
+ });
186
+ return lookup;
187
+ }, [expandedRowIds]);
179
188
  const getRowProps = React.useCallback(id => {
180
- if (!expandedRowIds.includes(id)) {
189
+ if (!expandedRowIdsLookup.has(id)) {
181
190
  return null;
182
191
  }
183
192
  const height = detailPanelsHeights[id];
@@ -186,7 +195,7 @@ const DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGr
186
195
  marginBottom: height
187
196
  }
188
197
  };
189
- }, [detailPanelsHeights, expandedRowIds]);
198
+ }, [detailPanelsHeights, expandedRowIdsLookup]);
190
199
  const pinnedColumns = useGridSelector(apiRef, gridPinnedColumnsSelector);
191
200
  const [leftPinnedColumns, rightPinnedColumns] = filterColumns(pinnedColumns, visibleColumnFields, theme.direction === 'rtl');
192
201
  const pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);
@@ -226,15 +235,6 @@ const DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGr
226
235
  firstColumnIndex: visibleColumnFields.length - rightPinnedColumns.length,
227
236
  lastColumnIndex: visibleColumnFields.length
228
237
  }) : null;
229
-
230
- // Create a lookup for faster check if the row is expanded
231
- const expandedRowIdsLookup = React.useMemo(() => {
232
- const lookup = {};
233
- expandedRowIds.forEach(id => {
234
- lookup[id] = true;
235
- });
236
- return lookup;
237
- }, [expandedRowIds]);
238
238
  const getDetailPanel = rowId => {
239
239
  const rowsMeta = gridRowsMetaSelector(apiRef.current.state);
240
240
  const content = detailPanelsContent[rowId];
@@ -275,7 +275,7 @@ const DataGridProVirtualScroller = /*#__PURE__*/React.forwardRef(function DataGr
275
275
  if (rootProps.getDetailPanelContent == null) {
276
276
  return;
277
277
  }
278
- if (!expandedRowIdsLookup[rowId]) {
278
+ if (!expandedRowIdsLookup.has(rowId)) {
279
279
  return;
280
280
  }
281
281
  const detailPanel = getDetailPanel(rowId);
@@ -10,9 +10,11 @@ import { GridBaseColumnHeaders, GridColumnHeadersInner } from '@mui/x-data-grid/
10
10
  import { useGridRootProps } from '../hooks/utils/useGridRootProps';
11
11
  import { useGridApiContext } from '../hooks/utils/useGridApiContext';
12
12
  import { GridPinnedPosition } from '../hooks/features/columnPinning';
13
- import { filterColumns } from './DataGridProVirtualScroller';
14
13
  import { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridColumnHeaders';
14
+ import { filterColumns } from './DataGridProVirtualScroller';
15
+ import { GridScrollArea } from './GridScrollArea';
15
16
  import { jsxs as _jsxs } from "react/jsx-runtime";
17
+ import { jsx as _jsx } from "react/jsx-runtime";
16
18
  const useUtilityClasses = ownerState => {
17
19
  const {
18
20
  leftPinnedColumns,
@@ -184,7 +186,9 @@ const GridColumnHeaders = /*#__PURE__*/React.forwardRef(function GridColumnHeade
184
186
  minFirstColumn: leftRenderContext.firstColumnIndex,
185
187
  maxLastColumn: leftRenderContext.lastColumnIndex
186
188
  })]
187
- })), /*#__PURE__*/_jsxs(GridColumnHeadersInner, _extends({
189
+ })), /*#__PURE__*/_jsx(GridScrollArea, {
190
+ scrollDirection: "left"
191
+ }), /*#__PURE__*/_jsxs(GridColumnHeadersInner, _extends({
188
192
  isDragging: isDragging
189
193
  }, innerProps, {
190
194
  children: [getColumnGroupHeaders({
@@ -200,7 +204,9 @@ const GridColumnHeaders = /*#__PURE__*/React.forwardRef(function GridColumnHeade
200
204
  minFirstColumn: leftPinnedColumns.length,
201
205
  maxLastColumn: visibleColumnFields.length - rightPinnedColumns.length
202
206
  })]
203
- })), rightRenderContext && /*#__PURE__*/_jsxs(GridColumnHeadersPinnedColumnHeaders, _extends({
207
+ })), /*#__PURE__*/_jsx(GridScrollArea, {
208
+ scrollDirection: "right"
209
+ }), rightRenderContext && /*#__PURE__*/_jsxs(GridColumnHeadersPinnedColumnHeaders, _extends({
204
210
  ownerState: _extends({}, ownerState, {
205
211
  side: GridPinnedPosition.right,
206
212
  showCellVerticalBorder: rootProps.showCellVerticalBorder