@mui/x-tree-view-pro 7.22.1 → 8.0.0-alpha.1

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 (30) hide show
  1. package/CHANGELOG.md +486 -11
  2. package/README.md +4 -4
  3. package/RichTreeViewPro/RichTreeViewPro.js +22 -5
  4. package/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -17
  5. package/index.d.ts +5 -7
  6. package/index.js +6 -8
  7. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.d.ts +1 -2
  8. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
  9. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
  10. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +159 -0
  11. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
  12. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +11 -10
  13. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts +4 -6
  14. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
  15. package/internals/utils/releaseInfo.js +1 -1
  16. package/modern/RichTreeViewPro/RichTreeViewPro.js +22 -5
  17. package/modern/index.js +6 -8
  18. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
  19. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
  20. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
  21. package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
  22. package/modern/internals/utils/releaseInfo.js +1 -1
  23. package/node/RichTreeViewPro/RichTreeViewPro.js +22 -5
  24. package/node/index.js +18 -42
  25. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +11 -13
  26. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
  27. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +42 -0
  28. package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +24 -16
  29. package/node/internals/utils/releaseInfo.js +1 -1
  30. package/package.json +9 -7
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view-pro v7.22.1
2
+ * @mui/x-tree-view-pro v8.0.0-alpha.1
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -19,18 +19,6 @@ Object.defineProperty(exports, "unstable_resetCleanupTracking", {
19
19
  return _internals.unstable_resetCleanupTracking;
20
20
  }
21
21
  });
22
- var _TreeView = require("@mui/x-tree-view/TreeView");
23
- Object.keys(_TreeView).forEach(function (key) {
24
- if (key === "default" || key === "__esModule") return;
25
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
- if (key in exports && exports[key] === _TreeView[key]) return;
27
- Object.defineProperty(exports, key, {
28
- enumerable: true,
29
- get: function () {
30
- return _TreeView[key];
31
- }
32
- });
33
- });
34
22
  var _SimpleTreeView = require("@mui/x-tree-view/SimpleTreeView");
35
23
  Object.keys(_SimpleTreeView).forEach(function (key) {
36
24
  if (key === "default" || key === "__esModule") return;
@@ -67,19 +55,7 @@ Object.keys(_TreeItem).forEach(function (key) {
67
55
  }
68
56
  });
69
57
  });
70
- var _TreeItem2 = require("@mui/x-tree-view/TreeItem2");
71
- Object.keys(_TreeItem2).forEach(function (key) {
72
- if (key === "default" || key === "__esModule") return;
73
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
74
- if (key in exports && exports[key] === _TreeItem2[key]) return;
75
- Object.defineProperty(exports, key, {
76
- enumerable: true,
77
- get: function () {
78
- return _TreeItem2[key];
79
- }
80
- });
81
- });
82
- var _useTreeItem = require("@mui/x-tree-view/useTreeItem2");
58
+ var _useTreeItem = require("@mui/x-tree-view/useTreeItem");
83
59
  Object.keys(_useTreeItem).forEach(function (key) {
84
60
  if (key === "default" || key === "__esModule") return;
85
61
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -91,51 +67,51 @@ Object.keys(_useTreeItem).forEach(function (key) {
91
67
  }
92
68
  });
93
69
  });
94
- var _TreeItem2Icon = require("@mui/x-tree-view/TreeItem2Icon");
95
- Object.keys(_TreeItem2Icon).forEach(function (key) {
70
+ var _TreeItemIcon = require("@mui/x-tree-view/TreeItemIcon");
71
+ Object.keys(_TreeItemIcon).forEach(function (key) {
96
72
  if (key === "default" || key === "__esModule") return;
97
73
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
98
- if (key in exports && exports[key] === _TreeItem2Icon[key]) return;
74
+ if (key in exports && exports[key] === _TreeItemIcon[key]) return;
99
75
  Object.defineProperty(exports, key, {
100
76
  enumerable: true,
101
77
  get: function () {
102
- return _TreeItem2Icon[key];
78
+ return _TreeItemIcon[key];
103
79
  }
104
80
  });
105
81
  });
106
- var _TreeItem2Provider = require("@mui/x-tree-view/TreeItem2Provider");
107
- Object.keys(_TreeItem2Provider).forEach(function (key) {
82
+ var _TreeItemProvider = require("@mui/x-tree-view/TreeItemProvider");
83
+ Object.keys(_TreeItemProvider).forEach(function (key) {
108
84
  if (key === "default" || key === "__esModule") return;
109
85
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
110
- if (key in exports && exports[key] === _TreeItem2Provider[key]) return;
86
+ if (key in exports && exports[key] === _TreeItemProvider[key]) return;
111
87
  Object.defineProperty(exports, key, {
112
88
  enumerable: true,
113
89
  get: function () {
114
- return _TreeItem2Provider[key];
90
+ return _TreeItemProvider[key];
115
91
  }
116
92
  });
117
93
  });
118
- var _TreeItem2DragAndDropOverlay = require("@mui/x-tree-view/TreeItem2DragAndDropOverlay");
119
- Object.keys(_TreeItem2DragAndDropOverlay).forEach(function (key) {
94
+ var _TreeItemDragAndDropOverlay = require("@mui/x-tree-view/TreeItemDragAndDropOverlay");
95
+ Object.keys(_TreeItemDragAndDropOverlay).forEach(function (key) {
120
96
  if (key === "default" || key === "__esModule") return;
121
97
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
122
- if (key in exports && exports[key] === _TreeItem2DragAndDropOverlay[key]) return;
98
+ if (key in exports && exports[key] === _TreeItemDragAndDropOverlay[key]) return;
123
99
  Object.defineProperty(exports, key, {
124
100
  enumerable: true,
125
101
  get: function () {
126
- return _TreeItem2DragAndDropOverlay[key];
102
+ return _TreeItemDragAndDropOverlay[key];
127
103
  }
128
104
  });
129
105
  });
130
- var _TreeItem2LabelInput = require("@mui/x-tree-view/TreeItem2LabelInput");
131
- Object.keys(_TreeItem2LabelInput).forEach(function (key) {
106
+ var _TreeItemLabelInput = require("@mui/x-tree-view/TreeItemLabelInput");
107
+ Object.keys(_TreeItemLabelInput).forEach(function (key) {
132
108
  if (key === "default" || key === "__esModule") return;
133
109
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
134
- if (key in exports && exports[key] === _TreeItem2LabelInput[key]) return;
110
+ if (key in exports && exports[key] === _TreeItemLabelInput[key]) return;
135
111
  Object.defineProperty(exports, key, {
136
112
  enumerable: true,
137
113
  get: function () {
138
- return _TreeItem2LabelInput[key];
114
+ return _TreeItemLabelInput[key];
139
115
  }
140
116
  });
141
117
  });
@@ -7,19 +7,23 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useTreeViewItemsReorderingItemPlugin = exports.isAndroid = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _internals = require("@mui/x-tree-view/internals");
10
+ var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering.selectors");
10
11
  const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
11
12
  exports.isAndroid = isAndroid;
12
13
  const useTreeViewItemsReorderingItemPlugin = ({
13
14
  props
14
15
  }) => {
15
16
  const {
16
- itemsReordering,
17
- instance
17
+ instance,
18
+ store,
19
+ itemsReordering
18
20
  } = (0, _internals.useTreeViewContext)();
19
21
  const {
20
22
  itemId
21
23
  } = props;
22
24
  const validActionsRef = React.useRef(null);
25
+ const draggedItemProperties = (0, _internals.useSelector)(store, _useTreeViewItemsReordering.selectorItemsReorderingDraggedItemProperties, itemId);
26
+ const isValidTarget = (0, _internals.useSelector)(store, _useTreeViewItemsReordering.selectorItemsReorderingIsValidTarget, itemId);
23
27
  return {
24
28
  propsEnhancers: {
25
29
  root: ({
@@ -27,8 +31,7 @@ const useTreeViewItemsReorderingItemPlugin = ({
27
31
  contentRefObject,
28
32
  externalEventHandlers
29
33
  }) => {
30
- const draggable = instance.canItemBeDragged(itemId);
31
- if (!draggable) {
34
+ if (!itemsReordering.enabled || itemsReordering.isItemReorderable && !itemsReordering.isItemReorderable(itemId)) {
32
35
  return {};
33
36
  }
34
37
  const handleDragStart = event => {
@@ -83,8 +86,7 @@ const useTreeViewItemsReorderingItemPlugin = ({
83
86
  externalEventHandlers,
84
87
  contentRefObject
85
88
  }) => {
86
- const currentDrag = itemsReordering.currentDrag;
87
- if (!currentDrag || currentDrag.draggedItemId === itemId) {
89
+ if (!isValidTarget) {
88
90
  return {};
89
91
  }
90
92
  const handleDragOver = event => {
@@ -117,17 +119,13 @@ const useTreeViewItemsReorderingItemPlugin = ({
117
119
  };
118
120
  },
119
121
  dragAndDropOverlay: () => {
120
- const currentDrag = itemsReordering.currentDrag;
121
- if (!currentDrag || currentDrag.targetItemId !== itemId || currentDrag.action == null) {
122
+ if (!draggedItemProperties) {
122
123
  return {};
123
124
  }
124
- const targetDepth = currentDrag.newPosition?.parentId == null ? 0 :
125
- // The depth is always defined because drag&drop is only usable with Rich Tree View components.
126
- instance.getItemMeta(currentDrag.newPosition.parentId).depth + 1;
127
125
  return {
128
- action: currentDrag.action,
126
+ action: draggedItemProperties.action,
129
127
  style: {
130
- '--TreeView-targetDepth': targetDepth
128
+ '--TreeView-targetDepth': draggedItemProperties.targetDepth
131
129
  }
132
130
  };
133
131
  }
@@ -8,14 +8,14 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useTreeViewItemsReordering = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
+ var _internals = require("@mui/x-tree-view/internals");
11
12
  var _warning = require("@mui/x-internals/warning");
12
13
  var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering.utils");
13
14
  var _useTreeViewItemsReordering2 = require("./useTreeViewItemsReordering.itemPlugin");
15
+ var _useTreeViewItemsReordering3 = require("./useTreeViewItemsReordering.selectors");
14
16
  const useTreeViewItemsReordering = ({
15
17
  params,
16
- instance,
17
- state,
18
- setState
18
+ store
19
19
  }) => {
20
20
  const canItemBeDragged = React.useCallback(itemId => {
21
21
  if (!params.itemsReordering) {
@@ -28,7 +28,7 @@ const useTreeViewItemsReordering = ({
28
28
  return true;
29
29
  }, [params.itemsReordering, params.isItemReorderable]);
30
30
  const getDroppingTargetValidActions = React.useCallback(itemId => {
31
- const itemsReordering = state.itemsReordering;
31
+ const itemsReordering = (0, _useTreeViewItemsReordering3.selectorItemsReordering)(store.value);
32
32
  if (!itemsReordering) {
33
33
  throw new Error('There is no ongoing reordering.');
34
34
  }
@@ -36,10 +36,10 @@ const useTreeViewItemsReordering = ({
36
36
  return {};
37
37
  }
38
38
  const canMoveItemToNewPosition = params.canMoveItemToNewPosition;
39
- const targetItemMeta = instance.getItemMeta(itemId);
40
- const targetItemIndex = instance.getItemIndex(targetItemMeta.id);
41
- const draggedItemMeta = instance.getItemMeta(itemsReordering.draggedItemId);
42
- const draggedItemIndex = instance.getItemIndex(draggedItemMeta.id);
39
+ const targetItemMeta = (0, _internals.selectorItemMeta)(store.value, itemId);
40
+ const targetItemIndex = (0, _internals.selectorItemIndex)(store.value, targetItemMeta.id);
41
+ const draggedItemMeta = (0, _internals.selectorItemMeta)(store.value, itemsReordering.draggedItemId);
42
+ const draggedItemIndex = (0, _internals.selectorItemIndex)(store.value, draggedItemMeta.id);
43
43
  const oldPosition = {
44
44
  parentId: draggedItemMeta.parentId,
45
45
  index: draggedItemIndex
@@ -75,7 +75,7 @@ const useTreeViewItemsReordering = ({
75
75
  },
76
76
  'move-to-parent': targetItemMeta.parentId == null ? null : {
77
77
  parentId: targetItemMeta.parentId,
78
- index: instance.getItemOrderedChildrenIds(targetItemMeta.parentId).length
78
+ index: (0, _internals.selectorItemOrderedChildrenIds)(store.value, targetItemMeta.parentId).length
79
79
  }
80
80
  };
81
81
  const validActions = {};
@@ -86,9 +86,9 @@ const useTreeViewItemsReordering = ({
86
86
  }
87
87
  });
88
88
  return validActions;
89
- }, [instance, state.itemsReordering, params.canMoveItemToNewPosition]);
89
+ }, [store, params.canMoveItemToNewPosition]);
90
90
  const startDraggingItem = React.useCallback(itemId => {
91
- setState(prevState => (0, _extends2.default)({}, prevState, {
91
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
92
92
  itemsReordering: {
93
93
  targetItemId: itemId,
94
94
  draggedItemId: itemId,
@@ -96,24 +96,25 @@ const useTreeViewItemsReordering = ({
96
96
  newPosition: null
97
97
  }
98
98
  }));
99
- }, [setState]);
99
+ }, [store]);
100
100
  const stopDraggingItem = React.useCallback(itemId => {
101
- if (state.itemsReordering == null || state.itemsReordering.draggedItemId !== itemId) {
101
+ const itemsReordering = (0, _useTreeViewItemsReordering3.selectorItemsReordering)(store.value);
102
+ if (itemsReordering == null || itemsReordering.draggedItemId !== itemId) {
102
103
  return;
103
104
  }
104
- if (state.itemsReordering.draggedItemId === state.itemsReordering.targetItemId || state.itemsReordering.action == null || state.itemsReordering.newPosition == null) {
105
- setState(prevState => (0, _extends2.default)({}, prevState, {
105
+ if (itemsReordering.draggedItemId === itemsReordering.targetItemId || itemsReordering.action == null || itemsReordering.newPosition == null) {
106
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
106
107
  itemsReordering: null
107
108
  }));
108
109
  return;
109
110
  }
110
- const draggedItemMeta = instance.getItemMeta(state.itemsReordering.draggedItemId);
111
+ const draggedItemMeta = (0, _internals.selectorItemMeta)(store.value, itemsReordering.draggedItemId);
111
112
  const oldPosition = {
112
113
  parentId: draggedItemMeta.parentId,
113
- index: instance.getItemIndex(draggedItemMeta.id)
114
+ index: (0, _internals.selectorItemIndex)(store.value, draggedItemMeta.id)
114
115
  };
115
- const newPosition = state.itemsReordering.newPosition;
116
- setState(prevState => (0, _extends2.default)({}, prevState, {
116
+ const newPosition = itemsReordering.newPosition;
117
+ store.update(prevState => (0, _extends2.default)({}, prevState, {
117
118
  itemsReordering: null,
118
119
  items: (0, _useTreeViewItemsReordering.moveItemInTree)({
119
120
  itemToMoveId: itemId,
@@ -128,7 +129,7 @@ const useTreeViewItemsReordering = ({
128
129
  newPosition,
129
130
  oldPosition
130
131
  });
131
- }, [setState, state.itemsReordering, instance, params.onItemPositionChange]);
132
+ }, [store, params.onItemPositionChange]);
132
133
  const setDragTargetItem = React.useCallback(({
133
134
  itemId,
134
135
  validActions,
@@ -137,16 +138,16 @@ const useTreeViewItemsReordering = ({
137
138
  cursorX,
138
139
  contentElement
139
140
  }) => {
140
- setState(prevState => {
141
+ store.update(prevState => {
141
142
  const prevSubState = prevState.itemsReordering;
142
- if (prevSubState == null || (0, _useTreeViewItemsReordering.isAncestor)(instance, itemId, prevSubState.draggedItemId)) {
143
+ if (prevSubState == null || (0, _useTreeViewItemsReordering.isAncestor)(store, itemId, prevSubState.draggedItemId)) {
143
144
  return prevState;
144
145
  }
145
146
  const action = (0, _useTreeViewItemsReordering.chooseActionToApply)({
146
147
  itemChildrenIndentation: params.itemChildrenIndentation,
147
148
  validActions,
148
149
  targetHeight,
149
- targetDepth: prevState.items.itemMetaMap[itemId].depth,
150
+ targetDepth: prevState.items.itemMetaLookup[itemId].depth,
150
151
  cursorY,
151
152
  cursorX,
152
153
  contentElement
@@ -163,7 +164,13 @@ const useTreeViewItemsReordering = ({
163
164
  })
164
165
  });
165
166
  });
166
- }, [instance, setState, params.itemChildrenIndentation]);
167
+ }, [store, params.itemChildrenIndentation]);
168
+ const pluginContextValue = React.useMemo(() => ({
169
+ itemsReordering: {
170
+ enabled: params.itemsReordering,
171
+ isItemReorderable: params.isItemReorderable
172
+ }
173
+ }), [params.itemsReordering, params.isItemReorderable]);
167
174
  return {
168
175
  instance: {
169
176
  canItemBeDragged,
@@ -172,12 +179,7 @@ const useTreeViewItemsReordering = ({
172
179
  stopDraggingItem,
173
180
  setDragTargetItem
174
181
  },
175
- contextValue: {
176
- itemsReordering: {
177
- enabled: params.itemsReordering,
178
- currentDrag: state.itemsReordering
179
- }
180
- }
182
+ contextValue: pluginContextValue
181
183
  };
182
184
  };
183
185
  exports.useTreeViewItemsReordering = useTreeViewItemsReordering;
@@ -186,10 +188,10 @@ useTreeViewItemsReordering.getDefaultizedParams = ({
186
188
  params,
187
189
  experimentalFeatures
188
190
  }) => {
189
- const canUseFeature = experimentalFeatures?.indentationAtItemLevel && experimentalFeatures?.itemsReordering;
191
+ const canUseFeature = experimentalFeatures?.itemsReordering;
190
192
  if (process.env.NODE_ENV !== 'production') {
191
193
  if (params.itemsReordering && !canUseFeature) {
192
- (0, _warning.warnOnce)(['MUI X: The items reordering feature requires the `indentationAtItemLevel` and `itemsReordering` experimental features to be enabled.', 'You can do it by passing `experimentalFeatures={{ indentationAtItemLevel: true, itemsReordering: true }}` to the `<RichTreeViewPro />`component.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/items/']);
194
+ (0, _warning.warnOnce)(['MUI X: The items reordering feature requires the `itemsReordering` experimental feature to be enabled.', 'You can do it by passing `experimentalFeatures={{ itemsReordering: true }}` to the `<RichTreeViewPro />`component.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/items/']);
193
195
  }
194
196
  }
195
197
  return (0, _extends2.default)({}, params, {
@@ -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;
@@ -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 = "MTczMDQzMzYwMDAwMA==";
9
+ const releaseInfo = "MTczMjIzMDAwMDAwMA==";
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view-pro",
3
- "version": "7.22.1",
3
+ "version": "8.0.0-alpha.1",
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",
@@ -33,23 +33,25 @@
33
33
  "directory": "packages/x-tree-view-pro"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.25.7",
36
+ "@babel/runtime": "^7.26.0",
37
37
  "@mui/utils": "^5.16.6 || ^6.0.0",
38
38
  "@types/react-transition-group": "^4.4.11",
39
39
  "clsx": "^2.1.1",
40
40
  "prop-types": "^15.8.1",
41
41
  "react-transition-group": "^4.4.5",
42
- "@mui/x-license": "7.21.0",
43
- "@mui/x-tree-view": "7.22.1",
44
- "@mui/x-internals": "7.21.0"
42
+ "reselect": "^5.1.1",
43
+ "use-sync-external-store": "^1.2.2",
44
+ "@mui/x-internals": "8.0.0-alpha.1",
45
+ "@mui/x-license": "8.0.0-alpha.1",
46
+ "@mui/x-tree-view": "8.0.0-alpha.1"
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": {