@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.
- package/CHANGELOG.md +651 -6
- package/README.md +2 -2
- package/RichTreeViewPro/RichTreeViewPro.js +2 -4
- package/RichTreeViewPro/RichTreeViewPro.types.d.ts +5 -18
- package/index.js +1 -1
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
- 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 +1 -1
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts +4 -6
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +25 -17
- package/internals/utils/releaseInfo.js +2 -2
- package/modern/RichTreeViewPro/RichTreeViewPro.js +2 -4
- package/modern/index.js +1 -1
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +12 -14
- package/modern/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
- 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 +2 -2
- package/node/RichTreeViewPro/RichTreeViewPro.js +2 -4
- package/node/index.js +1 -1
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +11 -13
- package/node/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +32 -30
- 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 +4 -3
- package/package.json +8 -6
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;
|
|
@@ -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
|
|
8
|
+
var _ponyfillGlobal = _interopRequireDefault(require("@mui/utils/ponyfillGlobal"));
|
|
8
9
|
const getReleaseInfo = () => {
|
|
9
|
-
const releaseInfo = "
|
|
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
|
|
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.
|
|
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
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"@mui/x-license": "8.0.0-alpha.
|
|
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": {
|