@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.
- package/CHANGELOG.md +486 -11
- package/README.md +4 -4
- package/RichTreeViewPro/RichTreeViewPro.js +22 -5
- package/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -17
- package/index.d.ts +5 -7
- package/index.js +6 -8
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.d.ts +1 -2
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +159 -0
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +11 -10
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts +4 -6
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
- package/internals/utils/releaseInfo.js +1 -1
- package/modern/RichTreeViewPro/RichTreeViewPro.js +22 -5
- package/modern/index.js +6 -8
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -0
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
- package/modern/internals/utils/releaseInfo.js +1 -1
- package/node/RichTreeViewPro/RichTreeViewPro.js +22 -5
- package/node/index.js +18 -42
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +11 -13
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +34 -32
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +42 -0
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +24 -16
- package/node/internals/utils/releaseInfo.js +1 -1
- package/package.json +9 -7
package/node/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view-pro
|
|
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
|
|
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
|
|
95
|
-
Object.keys(
|
|
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] ===
|
|
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
|
|
78
|
+
return _TreeItemIcon[key];
|
|
103
79
|
}
|
|
104
80
|
});
|
|
105
81
|
});
|
|
106
|
-
var
|
|
107
|
-
Object.keys(
|
|
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] ===
|
|
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
|
|
90
|
+
return _TreeItemProvider[key];
|
|
115
91
|
}
|
|
116
92
|
});
|
|
117
93
|
});
|
|
118
|
-
var
|
|
119
|
-
Object.keys(
|
|
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] ===
|
|
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
|
|
102
|
+
return _TreeItemDragAndDropOverlay[key];
|
|
127
103
|
}
|
|
128
104
|
});
|
|
129
105
|
});
|
|
130
|
-
var
|
|
131
|
-
Object.keys(
|
|
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] ===
|
|
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
|
|
114
|
+
return _TreeItemLabelInput[key];
|
|
139
115
|
}
|
|
140
116
|
});
|
|
141
117
|
});
|
package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js
CHANGED
|
@@ -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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
40
|
-
const targetItemIndex =
|
|
41
|
-
const draggedItemMeta =
|
|
42
|
-
const draggedItemIndex =
|
|
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:
|
|
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
|
-
}, [
|
|
89
|
+
}, [store, params.canMoveItemToNewPosition]);
|
|
90
90
|
const startDraggingItem = React.useCallback(itemId => {
|
|
91
|
-
|
|
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
|
-
}, [
|
|
99
|
+
}, [store]);
|
|
100
100
|
const stopDraggingItem = React.useCallback(itemId => {
|
|
101
|
-
|
|
101
|
+
const itemsReordering = (0, _useTreeViewItemsReordering3.selectorItemsReordering)(store.value);
|
|
102
|
+
if (itemsReordering == null || itemsReordering.draggedItemId !== itemId) {
|
|
102
103
|
return;
|
|
103
104
|
}
|
|
104
|
-
if (
|
|
105
|
-
|
|
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 =
|
|
111
|
+
const draggedItemMeta = (0, _internals.selectorItemMeta)(store.value, itemsReordering.draggedItemId);
|
|
111
112
|
const oldPosition = {
|
|
112
113
|
parentId: draggedItemMeta.parentId,
|
|
113
|
-
index:
|
|
114
|
+
index: (0, _internals.selectorItemIndex)(store.value, draggedItemMeta.id)
|
|
114
115
|
};
|
|
115
|
-
const newPosition =
|
|
116
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
141
|
+
store.update(prevState => {
|
|
141
142
|
const prevSubState = prevState.itemsReordering;
|
|
142
|
-
if (prevSubState == null || (0, _useTreeViewItemsReordering.isAncestor)(
|
|
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.
|
|
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
|
-
}, [
|
|
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?.
|
|
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 `
|
|
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, {
|
package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js
ADDED
|
@@ -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);
|
package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js
CHANGED
|
@@ -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 = (
|
|
14
|
-
const itemMetaA =
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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 `
|
|
128
|
-
const
|
|
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
|
-
|
|
140
|
+
updateExpandable(oldParentId);
|
|
133
141
|
}
|
|
134
142
|
if (newParentId !== _internals.TREE_VIEW_ROOT_PARENT_ID && newParentId !== oldParentId) {
|
|
135
|
-
|
|
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 :
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = "
|
|
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": "
|
|
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.
|
|
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
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"@mui/x-internals": "
|
|
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": {
|