@mui/x-tree-view-pro 8.0.0-alpha.0 → 8.0.0-alpha.2

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 (28) hide show
  1. package/CHANGELOG.md +651 -6
  2. package/README.md +2 -2
  3. package/RichTreeViewPro/RichTreeViewPro.js +2 -4
  4. package/RichTreeViewPro/RichTreeViewPro.types.d.ts +5 -18
  5. package/index.js +1 -1
  6. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
  7. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
  8. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +159 -0
  9. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
  10. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +1 -1
  11. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts +4 -6
  12. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
  13. package/internals/utils/releaseInfo.js +2 -2
  14. package/modern/RichTreeViewPro/RichTreeViewPro.js +2 -4
  15. package/modern/index.js +1 -1
  16. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
  17. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
  18. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
  19. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
  20. package/modern/internals/utils/releaseInfo.js +2 -2
  21. package/node/RichTreeViewPro/RichTreeViewPro.js +2 -4
  22. package/node/index.js +1 -1
  23. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +11 -13
  24. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
  25. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +42 -0
  26. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +24 -16
  27. package/node/internals/utils/releaseInfo.js +4 -3
  28. package/package.json +8 -6
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectorItemsReorderingIsValidTarget = exports.selectorItemsReorderingDraggedItemProperties = exports.selectorItemsReordering = void 0;
7
+ var _internals = require("@mui/x-tree-view/internals");
8
+ /**
9
+ * Get the items reordering state.
10
+ * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
11
+ * @returns {TreeViewItemsReorderingState | null} The items reordering state.
12
+ */
13
+ const selectorItemsReordering = state => state.itemsReordering;
14
+
15
+ /**
16
+ * Get the properties of the dragged item.
17
+ * @param {TreeViewState<[UseTreeViewItemsSignature, UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
18
+ * @param {string} itemId The id of the item.
19
+ * @returns {TreeViewItemDraggedItemProperties | null} The properties of the dragged item if the current item is being dragged, `null` otherwise.
20
+ */
21
+ exports.selectorItemsReordering = selectorItemsReordering;
22
+ const selectorItemsReorderingDraggedItemProperties = exports.selectorItemsReorderingDraggedItemProperties = (0, _internals.createSelector)([selectorItemsReordering, _internals.selectorItemMetaLookup, (_, itemId) => itemId], (itemsReordering, itemMetaLookup, itemId) => {
23
+ if (!itemsReordering || itemsReordering.targetItemId !== itemId || itemsReordering.action == null) {
24
+ return null;
25
+ }
26
+ const targetDepth = itemsReordering.newPosition?.parentId == null ? 0 :
27
+ // The depth is always defined because drag&drop is only usable with Rich Tree View components.
28
+ itemMetaLookup[itemId].depth + 1;
29
+ return {
30
+ newPosition: itemsReordering.newPosition,
31
+ action: itemsReordering.action,
32
+ targetDepth
33
+ };
34
+ });
35
+
36
+ /**
37
+ * Check if the current item is a valid target for the dragged item.
38
+ * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
39
+ * @param {string} itemId The id of the item.
40
+ * @returns {boolean} `true` if the current item is a valid target for the dragged item, `false` otherwise.
41
+ */
42
+ const selectorItemsReorderingIsValidTarget = exports.selectorItemsReorderingIsValidTarget = (0, _internals.createSelector)([selectorItemsReordering, (_, itemId) => itemId], (itemsReordering, itemId) => itemsReordering && itemsReordering.draggedItemId !== itemId);
@@ -10,15 +10,15 @@ var _internals = require("@mui/x-tree-view/internals");
10
10
  /**
11
11
  * Checks if the item with the id itemIdB is an ancestor of the item with the id itemIdA.
12
12
  */
13
- const isAncestor = (instance, itemIdA, itemIdB) => {
14
- const itemMetaA = instance.getItemMeta(itemIdA);
13
+ const isAncestor = (store, itemIdA, itemIdB) => {
14
+ const itemMetaA = (0, _internals.selectorItemMeta)(store.value, itemIdA);
15
15
  if (itemMetaA.parentId === itemIdB) {
16
16
  return true;
17
17
  }
18
18
  if (itemMetaA.parentId == null) {
19
19
  return false;
20
20
  }
21
- return isAncestor(instance, itemMetaA.parentId, itemIdB);
21
+ return isAncestor(store, itemMetaA.parentId, itemIdB);
22
22
  };
23
23
 
24
24
  /**
@@ -97,12 +97,12 @@ const moveItemInTree = ({
97
97
  newPosition,
98
98
  prevState
99
99
  }) => {
100
- const itemToMoveMeta = prevState.itemMetaMap[itemToMoveId];
100
+ const itemToMoveMeta = prevState.itemMetaLookup[itemToMoveId];
101
101
  const oldParentId = oldPosition.parentId ?? _internals.TREE_VIEW_ROOT_PARENT_ID;
102
102
  const newParentId = newPosition.parentId ?? _internals.TREE_VIEW_ROOT_PARENT_ID;
103
103
 
104
104
  // 1. Update the `itemOrderedChildrenIds`.
105
- const itemOrderedChildrenIds = (0, _extends2.default)({}, prevState.itemOrderedChildrenIds);
105
+ const itemOrderedChildrenIds = (0, _extends2.default)({}, prevState.itemOrderedChildrenIdsLookup);
106
106
  if (oldParentId === newParentId) {
107
107
  const updatedChildren = [...itemOrderedChildrenIds[oldParentId]];
108
108
  updatedChildren.splice(oldPosition.index, 1);
@@ -118,43 +118,51 @@ const moveItemInTree = ({
118
118
  }
119
119
 
120
120
  // 2. Update the `itemChildrenIndexes`
121
- const itemChildrenIndexes = (0, _extends2.default)({}, prevState.itemChildrenIndexes);
121
+ const itemChildrenIndexes = (0, _extends2.default)({}, prevState.itemChildrenIndexesLookup);
122
122
  itemChildrenIndexes[oldParentId] = (0, _internals.buildSiblingIndexes)(itemOrderedChildrenIds[oldParentId]);
123
123
  if (newParentId !== oldParentId) {
124
124
  itemChildrenIndexes[newParentId] = (0, _internals.buildSiblingIndexes)(itemOrderedChildrenIds[newParentId]);
125
125
  }
126
126
 
127
- // 3. Update the `itemMetaMap`
128
- const itemMetaMap = (0, _extends2.default)({}, prevState.itemMetaMap);
127
+ // 3. Update the `itemMetaLookup`
128
+ const itemMetaLookup = (0, _extends2.default)({}, prevState.itemMetaLookup);
129
129
 
130
130
  // 3.1 Update the `expandable` property of the old and the new parent
131
+ function updateExpandable(itemId) {
132
+ const isExpandable = itemOrderedChildrenIds[itemId].length > 0;
133
+ if (itemMetaLookup[itemId].expandable !== isExpandable) {
134
+ itemMetaLookup[itemId] = (0, _extends2.default)({}, itemMetaLookup[itemId], {
135
+ expandable: isExpandable
136
+ });
137
+ }
138
+ }
131
139
  if (oldParentId !== _internals.TREE_VIEW_ROOT_PARENT_ID && oldParentId !== newParentId) {
132
- itemMetaMap[oldParentId].expandable = itemOrderedChildrenIds[oldParentId].length > 0;
140
+ updateExpandable(oldParentId);
133
141
  }
134
142
  if (newParentId !== _internals.TREE_VIEW_ROOT_PARENT_ID && newParentId !== oldParentId) {
135
- itemMetaMap[newParentId].expandable = itemOrderedChildrenIds[newParentId].length > 0;
143
+ updateExpandable(newParentId);
136
144
  }
137
145
 
138
146
  // 3.2 Update the `parentId` and `depth` properties of the item to move
139
147
  // The depth is always defined because drag&drop is only usable with Rich Tree View components.
140
- const itemToMoveDepth = newPosition.parentId == null ? 0 : itemMetaMap[newParentId].depth + 1;
141
- itemMetaMap[itemToMoveId] = (0, _extends2.default)({}, itemToMoveMeta, {
148
+ const itemToMoveDepth = newPosition.parentId == null ? 0 : itemMetaLookup[newParentId].depth + 1;
149
+ itemMetaLookup[itemToMoveId] = (0, _extends2.default)({}, itemToMoveMeta, {
142
150
  parentId: newPosition.parentId,
143
151
  depth: itemToMoveDepth
144
152
  });
145
153
 
146
154
  // 3.3 Update the depth of all the children of the item to move
147
155
  const updateItemDepth = (itemId, depth) => {
148
- itemMetaMap[itemId] = (0, _extends2.default)({}, itemMetaMap[itemId], {
156
+ itemMetaLookup[itemId] = (0, _extends2.default)({}, itemMetaLookup[itemId], {
149
157
  depth
150
158
  });
151
159
  itemOrderedChildrenIds[itemId]?.forEach(childId => updateItemDepth(childId, depth + 1));
152
160
  };
153
161
  itemOrderedChildrenIds[itemToMoveId]?.forEach(childId => updateItemDepth(childId, itemToMoveDepth + 1));
154
162
  return (0, _extends2.default)({}, prevState, {
155
- itemOrderedChildrenIds,
156
- itemChildrenIndexes,
157
- itemMetaMap
163
+ itemOrderedChildrenIdsLookup: itemOrderedChildrenIds,
164
+ itemChildrenIndexesLookup: itemChildrenIndexes,
165
+ itemMetaLookup
158
166
  });
159
167
  };
160
168
  exports.moveItemInTree = moveItemInTree;
@@ -1,18 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.getReleaseInfo = void 0;
7
- var _utils = require("@mui/utils");
8
+ var _ponyfillGlobal = _interopRequireDefault(require("@mui/utils/ponyfillGlobal"));
8
9
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTczMTUzODgwMDAwMA==";
10
+ const releaseInfo = "MTczMjgzNDgwMDAwMA==";
10
11
  if (process.env.NODE_ENV !== 'production') {
11
12
  // A simple hack to set the value in the test environment (has no build step).
12
13
  // eslint-disable-next-line no-useless-concat
13
14
  if (releaseInfo === '__RELEASE' + '_INFO__') {
14
15
  // eslint-disable-next-line no-underscore-dangle
15
- return _utils.ponyfillGlobal.__MUI_RELEASE_INFO__;
16
+ return _ponyfillGlobal.default.__MUI_RELEASE_INFO__;
16
17
  }
17
18
  }
18
19
  return releaseInfo;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view-pro",
3
- "version": "8.0.0-alpha.0",
3
+ "version": "8.0.0-alpha.2",
4
4
  "description": "The Pro plan edition of the Tree View components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -39,17 +39,19 @@
39
39
  "clsx": "^2.1.1",
40
40
  "prop-types": "^15.8.1",
41
41
  "react-transition-group": "^4.4.5",
42
- "@mui/x-internals": "8.0.0-alpha.0",
43
- "@mui/x-tree-view": "8.0.0-alpha.0",
44
- "@mui/x-license": "8.0.0-alpha.0"
42
+ "reselect": "^5.1.1",
43
+ "use-sync-external-store": "^1.2.2",
44
+ "@mui/x-license": "8.0.0-alpha.2",
45
+ "@mui/x-tree-view": "8.0.0-alpha.2",
46
+ "@mui/x-internals": "8.0.0-alpha.2"
45
47
  },
46
48
  "peerDependencies": {
47
49
  "@emotion/react": "^11.9.0",
48
50
  "@emotion/styled": "^11.8.1",
49
51
  "@mui/material": "^5.15.14 || ^6.0.0",
50
52
  "@mui/system": "^5.15.14 || ^6.0.0",
51
- "react": "^17.0.0 || ^18.0.0",
52
- "react-dom": "^17.0.0 || ^18.0.0"
53
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
54
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
53
55
  },
54
56
  "peerDependenciesMeta": {
55
57
  "@emotion/react": {