@mui/x-tree-view 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/RichTreeView/RichTreeView.js +2 -4
- package/RichTreeView/RichTreeView.types.d.ts +5 -18
- package/SimpleTreeView/SimpleTreeView.types.d.ts +2 -2
- package/TreeItem/TreeItem.js +4 -4
- package/TreeItem/TreeItem.types.d.ts +4 -2
- package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +1 -1
- package/TreeItemIcon/TreeItemIcon.types.d.ts +1 -1
- package/TreeItemProvider/TreeItemProvider.d.ts +2 -4
- package/TreeItemProvider/TreeItemProvider.js +26 -11
- package/TreeItemProvider/TreeItemProvider.types.d.ts +1 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +2 -1
- package/hooks/useTreeItemModel.d.ts +2 -0
- package/hooks/useTreeItemModel.js +11 -0
- package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +2 -1
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +31 -15
- package/hooks/useTreeViewApiRef.d.ts +1 -0
- package/index.js +1 -1
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +2 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
- package/internals/components/RichTreeViewItems.d.ts +3 -5
- package/internals/components/RichTreeViewItems.js +42 -30
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +36 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -5
- package/internals/hooks/useSelector.d.ts +4 -0
- package/internals/hooks/useSelector.js +6 -0
- package/internals/index.d.ts +6 -1
- package/internals/index.js +5 -1
- package/internals/models/itemPlugin.d.ts +5 -5
- package/internals/models/plugin.d.ts +20 -8
- package/internals/models/treeView.d.ts +6 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +124 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +6 -14
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +1 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +182 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -16
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -98
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +718 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +15 -52
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +74 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +7 -24
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -34
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +32 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +6 -6
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +6 -6
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +23 -13
- package/internals/useTreeView/useTreeView.js +30 -17
- package/internals/useTreeView/useTreeView.types.d.ts +2 -3
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +3 -1
- package/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/internals/utils/TreeViewStore.d.ts +12 -0
- package/internals/utils/TreeViewStore.js +24 -0
- package/internals/utils/selectors.d.ts +9 -0
- package/internals/utils/selectors.js +37 -0
- package/internals/utils/tree.d.ts +8 -8
- package/internals/utils/tree.js +51 -43
- package/models/items.d.ts +3 -2
- package/modern/RichTreeView/RichTreeView.js +2 -4
- package/modern/TreeItem/TreeItem.js +4 -4
- package/modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +1 -1
- package/modern/TreeItemProvider/TreeItemProvider.js +26 -11
- package/modern/hooks/index.js +2 -1
- package/modern/hooks/useTreeItemModel.js +11 -0
- package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +31 -15
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/modern/internals/components/RichTreeViewItems.js +42 -30
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/modern/internals/hooks/useSelector.js +6 -0
- package/modern/internals/index.js +5 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -98
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -34
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +23 -13
- package/modern/internals/useTreeView/useTreeView.js +30 -17
- package/modern/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/modern/internals/utils/TreeViewStore.js +24 -0
- package/modern/internals/utils/selectors.js +37 -0
- package/modern/internals/utils/tree.js +51 -43
- package/modern/useTreeItem/useTreeItem.js +26 -11
- package/node/RichTreeView/RichTreeView.js +2 -4
- package/node/TreeItem/TreeItem.js +4 -4
- package/node/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +2 -2
- package/node/TreeItemProvider/TreeItemProvider.js +26 -10
- package/node/hooks/index.js +8 -1
- package/node/hooks/useTreeItemModel.js +17 -0
- package/node/hooks/useTreeItemUtils/useTreeItemUtils.js +32 -15
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/node/internals/components/RichTreeViewItems.js +42 -30
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +12 -13
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +15 -0
- package/node/internals/hooks/useSelector.js +13 -0
- package/node/internals/index.js +47 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +23 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +14 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +40 -0
- package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +16 -13
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +60 -100
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +109 -0
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +30 -27
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +32 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +46 -35
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +15 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +24 -14
- package/node/internals/useTreeView/useTreeView.js +30 -17
- package/node/internals/useTreeView/useTreeViewBuildContext.js +25 -18
- package/node/internals/utils/TreeViewStore.js +31 -0
- package/node/internals/utils/selectors.js +44 -0
- package/node/internals/utils/tree.js +51 -43
- package/node/useTreeItem/useTreeItem.js +26 -11
- package/package.json +6 -4
- package/useTreeItem/useTreeItem.js +26 -11
- package/useTreeItem/useTreeItem.types.d.ts +9 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { selectorIsItemExpandable, selectorIsItemExpanded } from "../plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js";
|
|
2
|
+
import { selectorCanItemBeFocused, selectorIsItemDisabled, selectorItemIndex, selectorItemMeta, selectorItemOrderedChildrenIds, selectorItemParentId } from "../plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
3
|
+
const getLastNavigableItemInArray = (state, items) => {
|
|
2
4
|
// Equivalent to Array.prototype.findLastIndex
|
|
3
5
|
let itemIndex = items.length - 1;
|
|
4
|
-
while (itemIndex >= 0 && !
|
|
6
|
+
while (itemIndex >= 0 && !selectorCanItemBeFocused(state, items[itemIndex])) {
|
|
5
7
|
itemIndex -= 1;
|
|
6
8
|
}
|
|
7
9
|
if (itemIndex === -1) {
|
|
@@ -9,10 +11,13 @@ const getLastNavigableItemInArray = (instance, items) => {
|
|
|
9
11
|
}
|
|
10
12
|
return items[itemIndex];
|
|
11
13
|
};
|
|
12
|
-
export const getPreviousNavigableItem = (
|
|
13
|
-
const itemMeta =
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
export const getPreviousNavigableItem = (state, itemId) => {
|
|
15
|
+
const itemMeta = selectorItemMeta(state, itemId);
|
|
16
|
+
if (!itemMeta) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const siblings = selectorItemOrderedChildrenIds(state, itemMeta.parentId);
|
|
20
|
+
const itemIndex = selectorItemIndex(state, itemId);
|
|
16
21
|
|
|
17
22
|
// TODO: What should we do if the parent is not navigable?
|
|
18
23
|
if (itemIndex === 0) {
|
|
@@ -21,7 +26,7 @@ export const getPreviousNavigableItem = (instance, itemId) => {
|
|
|
21
26
|
|
|
22
27
|
// Finds the previous navigable sibling.
|
|
23
28
|
let previousNavigableSiblingIndex = itemIndex - 1;
|
|
24
|
-
while (!
|
|
29
|
+
while (!selectorCanItemBeFocused(state, siblings[previousNavigableSiblingIndex]) && previousNavigableSiblingIndex >= 0) {
|
|
25
30
|
previousNavigableSiblingIndex -= 1;
|
|
26
31
|
}
|
|
27
32
|
if (previousNavigableSiblingIndex === -1) {
|
|
@@ -31,51 +36,51 @@ export const getPreviousNavigableItem = (instance, itemId) => {
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
// Otherwise, we can try to go up a level and find the previous navigable item.
|
|
34
|
-
return getPreviousNavigableItem(
|
|
39
|
+
return getPreviousNavigableItem(state, itemMeta.parentId);
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
// Finds the last navigable ancestor of the previous navigable sibling.
|
|
38
43
|
let currentItemId = siblings[previousNavigableSiblingIndex];
|
|
39
|
-
let lastNavigableChild = getLastNavigableItemInArray(
|
|
40
|
-
while (
|
|
44
|
+
let lastNavigableChild = getLastNavigableItemInArray(state, selectorItemOrderedChildrenIds(state, currentItemId));
|
|
45
|
+
while (selectorIsItemExpanded(state, currentItemId) && lastNavigableChild != null) {
|
|
41
46
|
currentItemId = lastNavigableChild;
|
|
42
|
-
lastNavigableChild =
|
|
47
|
+
lastNavigableChild = selectorItemOrderedChildrenIds(state, currentItemId).find(childId => selectorCanItemBeFocused(state, childId));
|
|
43
48
|
}
|
|
44
49
|
return currentItemId;
|
|
45
50
|
};
|
|
46
|
-
export const getNextNavigableItem = (
|
|
51
|
+
export const getNextNavigableItem = (state, itemId) => {
|
|
47
52
|
// If the item is expanded and has some navigable children, return the first of them.
|
|
48
|
-
if (
|
|
49
|
-
const firstNavigableChild =
|
|
53
|
+
if (selectorIsItemExpanded(state, itemId)) {
|
|
54
|
+
const firstNavigableChild = selectorItemOrderedChildrenIds(state, itemId).find(childId => selectorCanItemBeFocused(state, childId));
|
|
50
55
|
if (firstNavigableChild != null) {
|
|
51
56
|
return firstNavigableChild;
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
|
-
let itemMeta =
|
|
59
|
+
let itemMeta = selectorItemMeta(state, itemId);
|
|
55
60
|
while (itemMeta != null) {
|
|
56
61
|
// Try to find the first navigable sibling after the current item.
|
|
57
|
-
const siblings =
|
|
58
|
-
const currentItemIndex =
|
|
62
|
+
const siblings = selectorItemOrderedChildrenIds(state, itemMeta.parentId);
|
|
63
|
+
const currentItemIndex = selectorItemIndex(state, itemMeta.id);
|
|
59
64
|
if (currentItemIndex < siblings.length - 1) {
|
|
60
65
|
let nextItemIndex = currentItemIndex + 1;
|
|
61
|
-
while (!
|
|
66
|
+
while (!selectorCanItemBeFocused(state, siblings[nextItemIndex]) && nextItemIndex < siblings.length - 1) {
|
|
62
67
|
nextItemIndex += 1;
|
|
63
68
|
}
|
|
64
|
-
if (
|
|
69
|
+
if (selectorCanItemBeFocused(state, siblings[nextItemIndex])) {
|
|
65
70
|
return siblings[nextItemIndex];
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
// If the sibling does not exist, go up a level to the parent and try again.
|
|
70
|
-
itemMeta =
|
|
75
|
+
itemMeta = selectorItemMeta(state, itemMeta.parentId);
|
|
71
76
|
}
|
|
72
77
|
return null;
|
|
73
78
|
};
|
|
74
|
-
export const getLastNavigableItem =
|
|
79
|
+
export const getLastNavigableItem = state => {
|
|
75
80
|
let itemId = null;
|
|
76
|
-
while (itemId == null ||
|
|
77
|
-
const children =
|
|
78
|
-
const lastNavigableChild = getLastNavigableItemInArray(
|
|
81
|
+
while (itemId == null || selectorIsItemExpanded(state, itemId)) {
|
|
82
|
+
const children = selectorItemOrderedChildrenIds(state, itemId);
|
|
83
|
+
const lastNavigableChild = getLastNavigableItemInArray(state, children);
|
|
79
84
|
|
|
80
85
|
// The item has no navigable children.
|
|
81
86
|
if (lastNavigableChild == null) {
|
|
@@ -85,7 +90,7 @@ export const getLastNavigableItem = instance => {
|
|
|
85
90
|
}
|
|
86
91
|
return itemId;
|
|
87
92
|
};
|
|
88
|
-
export const getFirstNavigableItem =
|
|
93
|
+
export const getFirstNavigableItem = state => selectorItemOrderedChildrenIds(state, null).find(itemId => selectorCanItemBeFocused(state, itemId));
|
|
89
94
|
|
|
90
95
|
/**
|
|
91
96
|
* This is used to determine the start and end of a selection range so
|
|
@@ -101,12 +106,15 @@ export const getFirstNavigableItem = instance => instance.getItemOrderedChildren
|
|
|
101
106
|
* Another way to put it is which item is shallower in a trémaux tree
|
|
102
107
|
* https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
|
|
103
108
|
*/
|
|
104
|
-
export const findOrderInTremauxTree = (
|
|
109
|
+
export const findOrderInTremauxTree = (state, itemAId, itemBId) => {
|
|
105
110
|
if (itemAId === itemBId) {
|
|
106
111
|
return [itemAId, itemBId];
|
|
107
112
|
}
|
|
108
|
-
const itemMetaA =
|
|
109
|
-
const itemMetaB =
|
|
113
|
+
const itemMetaA = selectorItemMeta(state, itemAId);
|
|
114
|
+
const itemMetaB = selectorItemMeta(state, itemBId);
|
|
115
|
+
if (!itemMetaA || !itemMetaB) {
|
|
116
|
+
return [itemAId, itemBId];
|
|
117
|
+
}
|
|
110
118
|
if (itemMetaA.parentId === itemMetaB.id || itemMetaB.parentId === itemMetaA.id) {
|
|
111
119
|
return itemMetaB.parentId === itemMetaA.id ? [itemMetaA.id, itemMetaB.id] : [itemMetaB.id, itemMetaA.id];
|
|
112
120
|
}
|
|
@@ -124,7 +132,7 @@ export const findOrderInTremauxTree = (instance, itemAId, itemBId) => {
|
|
|
124
132
|
aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
125
133
|
continueA = aAncestor !== null;
|
|
126
134
|
if (!aAncestorIsCommon && continueA) {
|
|
127
|
-
aAncestor =
|
|
135
|
+
aAncestor = selectorItemParentId(state, aAncestor);
|
|
128
136
|
}
|
|
129
137
|
}
|
|
130
138
|
if (continueB && !aAncestorIsCommon) {
|
|
@@ -132,53 +140,53 @@ export const findOrderInTremauxTree = (instance, itemAId, itemBId) => {
|
|
|
132
140
|
bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
133
141
|
continueB = bAncestor !== null;
|
|
134
142
|
if (!bAncestorIsCommon && continueB) {
|
|
135
|
-
bAncestor =
|
|
143
|
+
bAncestor = selectorItemParentId(state, bAncestor);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
}
|
|
139
147
|
const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
|
|
140
|
-
const ancestorFamily =
|
|
148
|
+
const ancestorFamily = selectorItemOrderedChildrenIds(state, commonAncestor);
|
|
141
149
|
const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
|
|
142
150
|
const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
|
|
143
151
|
return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [itemAId, itemBId] : [itemBId, itemAId];
|
|
144
152
|
};
|
|
145
|
-
export const getNonDisabledItemsInRange = (
|
|
153
|
+
export const getNonDisabledItemsInRange = (state, itemAId, itemBId) => {
|
|
146
154
|
const getNextItem = itemId => {
|
|
147
155
|
// If the item is expanded and has some children, return the first of them.
|
|
148
|
-
if (
|
|
149
|
-
return
|
|
156
|
+
if (selectorIsItemExpandable(state, itemId) && selectorIsItemExpanded(state, itemId)) {
|
|
157
|
+
return selectorItemOrderedChildrenIds(state, itemId)[0];
|
|
150
158
|
}
|
|
151
|
-
let itemMeta =
|
|
159
|
+
let itemMeta = selectorItemMeta(state, itemId);
|
|
152
160
|
while (itemMeta != null) {
|
|
153
161
|
// Try to find the first navigable sibling after the current item.
|
|
154
|
-
const siblings =
|
|
155
|
-
const currentItemIndex =
|
|
162
|
+
const siblings = selectorItemOrderedChildrenIds(state, itemMeta.parentId);
|
|
163
|
+
const currentItemIndex = selectorItemIndex(state, itemMeta.id);
|
|
156
164
|
if (currentItemIndex < siblings.length - 1) {
|
|
157
165
|
return siblings[currentItemIndex + 1];
|
|
158
166
|
}
|
|
159
167
|
|
|
160
168
|
// If the item is the last of its siblings, go up a level to the parent and try again.
|
|
161
|
-
itemMeta =
|
|
169
|
+
itemMeta = itemMeta.parentId ? selectorItemMeta(state, itemMeta.parentId) : null;
|
|
162
170
|
}
|
|
163
171
|
throw new Error('Invalid range');
|
|
164
172
|
};
|
|
165
|
-
const [first, last] = findOrderInTremauxTree(
|
|
173
|
+
const [first, last] = findOrderInTremauxTree(state, itemAId, itemBId);
|
|
166
174
|
const items = [first];
|
|
167
175
|
let current = first;
|
|
168
176
|
while (current !== last) {
|
|
169
177
|
current = getNextItem(current);
|
|
170
|
-
if (!
|
|
178
|
+
if (!selectorIsItemDisabled(state, current)) {
|
|
171
179
|
items.push(current);
|
|
172
180
|
}
|
|
173
181
|
}
|
|
174
182
|
return items;
|
|
175
183
|
};
|
|
176
|
-
export const getAllNavigableItems =
|
|
177
|
-
let item = getFirstNavigableItem(
|
|
184
|
+
export const getAllNavigableItems = state => {
|
|
185
|
+
let item = getFirstNavigableItem(state);
|
|
178
186
|
const navigableItems = [];
|
|
179
187
|
while (item != null) {
|
|
180
188
|
navigableItems.push(item);
|
|
181
|
-
item = getNextNavigableItem(
|
|
189
|
+
item = getNextNavigableItem(state, item);
|
|
182
190
|
}
|
|
183
191
|
return navigableItems;
|
|
184
192
|
};
|
|
@@ -8,13 +8,16 @@ import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
|
|
|
8
8
|
import { useTreeItemUtils } from "../hooks/useTreeItemUtils/index.js";
|
|
9
9
|
import { TreeViewItemDepthContext } from "../internals/TreeViewItemDepthContext/index.js";
|
|
10
10
|
import { isTargetInDescendants } from "../internals/utils/tree.js";
|
|
11
|
+
import { useSelector } from "../internals/hooks/useSelector.js";
|
|
12
|
+
import { selectorIsItemTheDefaultFocusableItem } from "../internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js";
|
|
11
13
|
import { generateTreeItemIdAttribute } from "../internals/corePlugins/useTreeViewId/useTreeViewId.utils.js";
|
|
14
|
+
import { selectorCanItemBeFocused } from "../internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
15
|
+
import { selectorTreeViewId } from "../internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js";
|
|
12
16
|
export const useTreeItem = parameters => {
|
|
13
17
|
const {
|
|
14
18
|
runItemPlugins,
|
|
15
19
|
items: {
|
|
16
|
-
onItemClick
|
|
17
|
-
disabledItemsFocusable
|
|
20
|
+
onItemClick
|
|
18
21
|
},
|
|
19
22
|
selection: {
|
|
20
23
|
disableSelection,
|
|
@@ -23,11 +26,18 @@ export const useTreeItem = parameters => {
|
|
|
23
26
|
expansion: {
|
|
24
27
|
expansionTrigger
|
|
25
28
|
},
|
|
26
|
-
|
|
29
|
+
label: labelContext,
|
|
27
30
|
instance,
|
|
28
|
-
publicAPI
|
|
31
|
+
publicAPI,
|
|
32
|
+
store
|
|
29
33
|
} = useTreeViewContext();
|
|
30
34
|
const depthContext = React.useContext(TreeViewItemDepthContext);
|
|
35
|
+
const depth = useSelector(store, (...params) => {
|
|
36
|
+
if (typeof depthContext === 'function') {
|
|
37
|
+
return depthContext(...params);
|
|
38
|
+
}
|
|
39
|
+
return depthContext;
|
|
40
|
+
}, parameters.itemId);
|
|
31
41
|
const {
|
|
32
42
|
id,
|
|
33
43
|
itemId,
|
|
@@ -52,12 +62,13 @@ export const useTreeItem = parameters => {
|
|
|
52
62
|
const handleRootRef = useForkRef(rootRef, pluginRootRef, rootRefObject);
|
|
53
63
|
const handleContentRef = useForkRef(contentRef, contentRefObject);
|
|
54
64
|
const checkboxRef = React.useRef(null);
|
|
65
|
+
const treeId = useSelector(store, selectorTreeViewId);
|
|
55
66
|
const idAttribute = generateTreeItemIdAttribute({
|
|
56
67
|
itemId,
|
|
57
68
|
treeId,
|
|
58
69
|
id
|
|
59
70
|
});
|
|
60
|
-
const
|
|
71
|
+
const shouldBeAccessibleWithTab = useSelector(store, selectorIsItemTheDefaultFocusableItem, itemId);
|
|
61
72
|
const sharedPropsEnhancerParams = {
|
|
62
73
|
rootRefObject,
|
|
63
74
|
contentRefObject,
|
|
@@ -69,8 +80,7 @@ export const useTreeItem = parameters => {
|
|
|
69
80
|
if (event.defaultMuiPrevented) {
|
|
70
81
|
return;
|
|
71
82
|
}
|
|
72
|
-
|
|
73
|
-
if (!status.focused && canBeFocused && event.currentTarget === event.target) {
|
|
83
|
+
if (!status.focused && selectorCanItemBeFocused(store.value, itemId) && event.currentTarget === event.target) {
|
|
74
84
|
instance.focusItem(event, itemId);
|
|
75
85
|
}
|
|
76
86
|
};
|
|
@@ -108,7 +118,7 @@ export const useTreeItem = parameters => {
|
|
|
108
118
|
};
|
|
109
119
|
const createContentHandleClick = otherHandlers => event => {
|
|
110
120
|
otherHandlers.onClick?.(event);
|
|
111
|
-
onItemClick
|
|
121
|
+
onItemClick(event, itemId);
|
|
112
122
|
if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
|
|
113
123
|
return;
|
|
114
124
|
}
|
|
@@ -139,6 +149,10 @@ export const useTreeItem = parameters => {
|
|
|
139
149
|
interactions.handleExpansion(event);
|
|
140
150
|
}
|
|
141
151
|
};
|
|
152
|
+
const getContextProviderProps = () => ({
|
|
153
|
+
itemId,
|
|
154
|
+
id
|
|
155
|
+
});
|
|
142
156
|
const getRootProps = (externalProps = {}) => {
|
|
143
157
|
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
144
158
|
|
|
@@ -157,14 +171,14 @@ export const useTreeItem = parameters => {
|
|
|
157
171
|
const props = _extends({}, externalEventHandlers, {
|
|
158
172
|
ref: handleRootRef,
|
|
159
173
|
role: 'treeitem',
|
|
160
|
-
tabIndex:
|
|
174
|
+
tabIndex: shouldBeAccessibleWithTab ? 0 : -1,
|
|
161
175
|
id: idAttribute,
|
|
162
176
|
'aria-expanded': status.expandable ? status.expanded : undefined,
|
|
163
177
|
'aria-selected': ariaSelected,
|
|
164
178
|
'aria-disabled': status.disabled || undefined
|
|
165
179
|
}, externalProps, {
|
|
166
180
|
style: _extends({}, externalProps.style ?? {}, {
|
|
167
|
-
'--TreeView-itemDepth':
|
|
181
|
+
'--TreeView-itemDepth': depth
|
|
168
182
|
}),
|
|
169
183
|
onFocus: createRootHandleFocus(externalEventHandlers),
|
|
170
184
|
onBlur: createRootHandleBlur(externalEventHandlers),
|
|
@@ -205,7 +219,7 @@ export const useTreeItem = parameters => {
|
|
|
205
219
|
}, externalProps, {
|
|
206
220
|
onDoubleClick: createLabelHandleDoubleClick(externalEventHandlers)
|
|
207
221
|
});
|
|
208
|
-
if (
|
|
222
|
+
if (labelContext?.isItemEditable) {
|
|
209
223
|
props.editable = status.editable;
|
|
210
224
|
}
|
|
211
225
|
return props;
|
|
@@ -242,6 +256,7 @@ export const useTreeItem = parameters => {
|
|
|
242
256
|
return _extends({}, externalProps, enhancedDragAndDropOverlayProps);
|
|
243
257
|
};
|
|
244
258
|
return {
|
|
259
|
+
getContextProviderProps,
|
|
245
260
|
getRootProps,
|
|
246
261
|
getContentProps,
|
|
247
262
|
getGroupTransitionProps,
|
|
@@ -63,8 +63,7 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
63
63
|
}
|
|
64
64
|
const {
|
|
65
65
|
getRootProps,
|
|
66
|
-
contextValue
|
|
67
|
-
instance
|
|
66
|
+
contextValue
|
|
68
67
|
} = (0, _useTreeView.useTreeView)({
|
|
69
68
|
plugins: _RichTreeView.RICH_TREE_VIEW_PLUGINS,
|
|
70
69
|
rootRef: ref,
|
|
@@ -88,8 +87,7 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
88
87
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, (0, _extends2.default)({}, rootProps, {
|
|
89
88
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewItems.RichTreeViewItems, {
|
|
90
89
|
slots: slots,
|
|
91
|
-
slotProps: slotProps
|
|
92
|
-
itemsToRender: instance.getItemsToRender()
|
|
90
|
+
slotProps: slotProps
|
|
93
91
|
})
|
|
94
92
|
}))
|
|
95
93
|
});
|
|
@@ -217,6 +217,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
217
217
|
} = props,
|
|
218
218
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded2);
|
|
219
219
|
const {
|
|
220
|
+
getContextProviderProps,
|
|
220
221
|
getRootProps,
|
|
221
222
|
getContentProps,
|
|
222
223
|
getIconContainerProps,
|
|
@@ -303,8 +304,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
303
304
|
ownerState: {},
|
|
304
305
|
className: classes.dragAndDropOverlay
|
|
305
306
|
});
|
|
306
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItemProvider.TreeItemProvider, {
|
|
307
|
-
itemId: itemId,
|
|
307
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItemProvider.TreeItemProvider, (0, _extends2.default)({}, getContextProviderProps(), {
|
|
308
308
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Root, (0, _extends2.default)({}, rootProps, {
|
|
309
309
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Content, (0, _extends2.default)({}, contentProps, {
|
|
310
310
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(IconContainer, (0, _extends2.default)({}, iconContainerProps, {
|
|
@@ -318,7 +318,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
318
318
|
as: GroupTransition
|
|
319
319
|
}, groupTransitionProps))]
|
|
320
320
|
}))
|
|
321
|
-
});
|
|
321
|
+
}));
|
|
322
322
|
});
|
|
323
323
|
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
324
324
|
// ----------------------------- Warning --------------------------------
|
|
@@ -328,7 +328,7 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
328
328
|
/**
|
|
329
329
|
* The content of the component.
|
|
330
330
|
*/
|
|
331
|
-
children: _propTypes.default
|
|
331
|
+
children: _propTypes.default /* @typescript-to-proptypes-ignore */.any,
|
|
332
332
|
/**
|
|
333
333
|
* Override or extend the styles applied to the component.
|
|
334
334
|
*/
|
|
@@ -11,14 +11,14 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
13
|
var _styles = require("@mui/material/styles");
|
|
14
|
-
var
|
|
14
|
+
var _createStyled = require("@mui/system/createStyled");
|
|
15
15
|
var _zeroStyled = require("../internals/zero-styled");
|
|
16
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
17
|
const TreeItemDragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
|
|
18
18
|
name: 'MuiTreeItemDragAndDropOverlay',
|
|
19
19
|
slot: 'Root',
|
|
20
20
|
overridesResolver: (props, styles) => styles.root,
|
|
21
|
-
shouldForwardProp: prop => (0,
|
|
21
|
+
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'action'
|
|
22
22
|
})(({
|
|
23
23
|
theme
|
|
24
24
|
}) => ({
|
|
@@ -1,35 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
|
|
3
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
6
|
Object.defineProperty(exports, "__esModule", {
|
|
5
7
|
value: true
|
|
6
8
|
});
|
|
7
9
|
exports.TreeItemProvider = TreeItemProvider;
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
12
|
var _TreeViewProvider = require("../internals/TreeViewProvider");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
var _useTreeViewId = require("../internals/corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
14
|
+
var _useSelector = require("../internals/hooks/useSelector");
|
|
15
|
+
var _useTreeViewId2 = require("../internals/corePlugins/useTreeViewId/useTreeViewId.selectors");
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
17
|
function TreeItemProvider(props) {
|
|
14
18
|
const {
|
|
15
19
|
children,
|
|
16
|
-
itemId
|
|
20
|
+
itemId,
|
|
21
|
+
id
|
|
17
22
|
} = props;
|
|
18
23
|
const {
|
|
19
24
|
wrapItem,
|
|
20
|
-
instance
|
|
25
|
+
instance,
|
|
26
|
+
store
|
|
21
27
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId2.selectorTreeViewId);
|
|
29
|
+
const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
24
30
|
itemId,
|
|
25
|
-
|
|
31
|
+
treeId,
|
|
32
|
+
id
|
|
33
|
+
});
|
|
34
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
|
|
35
|
+
children: wrapItem({
|
|
36
|
+
children,
|
|
37
|
+
itemId,
|
|
38
|
+
instance,
|
|
39
|
+
idAttribute
|
|
40
|
+
})
|
|
26
41
|
});
|
|
27
42
|
}
|
|
28
|
-
TreeItemProvider.propTypes = {
|
|
43
|
+
process.env.NODE_ENV !== "production" ? TreeItemProvider.propTypes = {
|
|
29
44
|
// ----------------------------- Warning --------------------------------
|
|
30
45
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
31
46
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
32
47
|
// ----------------------------------------------------------------------
|
|
33
48
|
children: _propTypes.default.node,
|
|
49
|
+
id: _propTypes.default.string,
|
|
34
50
|
itemId: _propTypes.default.string.isRequired
|
|
35
|
-
};
|
|
51
|
+
} : void 0;
|
package/node/hooks/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeItemModel", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeItemModel.useTreeItemModel;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "useTreeItemUtils", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -16,4 +22,5 @@ Object.defineProperty(exports, "useTreeViewApiRef", {
|
|
|
16
22
|
}
|
|
17
23
|
});
|
|
18
24
|
var _useTreeViewApiRef = require("./useTreeViewApiRef");
|
|
19
|
-
var _useTreeItemUtils = require("./useTreeItemUtils");
|
|
25
|
+
var _useTreeItemUtils = require("./useTreeItemUtils");
|
|
26
|
+
var _useTreeItemModel = require("./useTreeItemModel");
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeItemModel = void 0;
|
|
8
|
+
var _TreeViewProvider = require("../internals/TreeViewProvider");
|
|
9
|
+
var _useSelector = require("../internals/hooks/useSelector");
|
|
10
|
+
var _useTreeViewItems = require("../internals/plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
11
|
+
const useTreeItemModel = itemId => {
|
|
12
|
+
const {
|
|
13
|
+
store
|
|
14
|
+
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
15
|
+
return (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemModel, itemId);
|
|
16
|
+
};
|
|
17
|
+
exports.useTreeItemModel = useTreeItemModel;
|
|
@@ -4,10 +4,16 @@
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.useTreeItemUtils = void 0;
|
|
7
|
+
exports.useTreeItemUtils = exports.isItemExpandable = void 0;
|
|
8
8
|
var _TreeViewProvider = require("../../internals/TreeViewProvider");
|
|
9
9
|
var _useTreeViewLabel = require("../../internals/plugins/useTreeViewLabel");
|
|
10
10
|
var _plugins = require("../../internals/utils/plugins");
|
|
11
|
+
var _useSelector = require("../../internals/hooks/useSelector");
|
|
12
|
+
var _useTreeViewExpansion = require("../../internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors");
|
|
13
|
+
var _useTreeViewFocus = require("../../internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors");
|
|
14
|
+
var _useTreeViewItems = require("../../internals/plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
15
|
+
var _useTreeViewSelection = require("../../internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors");
|
|
16
|
+
var _useTreeViewLabel2 = require("../../internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors");
|
|
11
17
|
/**
|
|
12
18
|
* Plugins that need to be present in the Tree View in order for `useTreeItemUtils` to work correctly.
|
|
13
19
|
*/
|
|
@@ -22,25 +28,37 @@ const isItemExpandable = reactChildren => {
|
|
|
22
28
|
}
|
|
23
29
|
return Boolean(reactChildren);
|
|
24
30
|
};
|
|
31
|
+
exports.isItemExpandable = isItemExpandable;
|
|
25
32
|
const useTreeItemUtils = ({
|
|
26
33
|
itemId,
|
|
27
34
|
children
|
|
28
35
|
}) => {
|
|
29
36
|
const {
|
|
30
37
|
instance,
|
|
38
|
+
label,
|
|
39
|
+
store,
|
|
31
40
|
selection: {
|
|
32
41
|
multiSelect
|
|
33
42
|
},
|
|
34
43
|
publicAPI
|
|
35
44
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
45
|
+
const isExpanded = (0, _useSelector.useSelector)(store, _useTreeViewExpansion.selectorIsItemExpanded, itemId);
|
|
46
|
+
const isFocused = (0, _useSelector.useSelector)(store, _useTreeViewFocus.selectorIsItemFocused, itemId);
|
|
47
|
+
const isSelected = (0, _useSelector.useSelector)(store, _useTreeViewSelection.selectorIsItemSelected, itemId);
|
|
48
|
+
const isDisabled = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorIsItemDisabled, itemId);
|
|
49
|
+
const isEditing = (0, _useSelector.useSelector)(store, state => label == null ? false : (0, _useTreeViewLabel2.selectorIsItemBeingEdited)(state, itemId));
|
|
50
|
+
const isEditable = (0, _useSelector.useSelector)(store, state => label == null ? false : (0, _useTreeViewLabel2.selectorIsItemEditable)(state, {
|
|
51
|
+
itemId,
|
|
52
|
+
isItemEditable: label.isItemEditable
|
|
53
|
+
}));
|
|
36
54
|
const status = {
|
|
37
55
|
expandable: isItemExpandable(children),
|
|
38
|
-
expanded:
|
|
39
|
-
focused:
|
|
40
|
-
selected:
|
|
41
|
-
disabled:
|
|
42
|
-
editing:
|
|
43
|
-
editable:
|
|
56
|
+
expanded: isExpanded,
|
|
57
|
+
focused: isFocused,
|
|
58
|
+
selected: isSelected,
|
|
59
|
+
disabled: isDisabled,
|
|
60
|
+
editing: isEditing,
|
|
61
|
+
editable: isEditable
|
|
44
62
|
};
|
|
45
63
|
const handleExpansion = event => {
|
|
46
64
|
if (status.disabled) {
|
|
@@ -52,7 +70,7 @@ const useTreeItemUtils = ({
|
|
|
52
70
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
53
71
|
|
|
54
72
|
// If already expanded and trying to toggle selection don't close
|
|
55
|
-
if (status.expandable && !(multiple &&
|
|
73
|
+
if (status.expandable && !(multiple && (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId))) {
|
|
56
74
|
instance.toggleItemExpansion(event, itemId);
|
|
57
75
|
}
|
|
58
76
|
};
|
|
@@ -99,15 +117,15 @@ const useTreeItemUtils = ({
|
|
|
99
117
|
if (!(0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel)) {
|
|
100
118
|
return;
|
|
101
119
|
}
|
|
102
|
-
if (
|
|
103
|
-
if (
|
|
120
|
+
if (isEditable) {
|
|
121
|
+
if (isEditing) {
|
|
104
122
|
instance.setEditedItemId(null);
|
|
105
123
|
} else {
|
|
106
124
|
instance.setEditedItemId(itemId);
|
|
107
125
|
}
|
|
108
126
|
}
|
|
109
127
|
};
|
|
110
|
-
const handleSaveItemLabel = (event,
|
|
128
|
+
const handleSaveItemLabel = (event, newLabel) => {
|
|
111
129
|
if (!(0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel)) {
|
|
112
130
|
return;
|
|
113
131
|
}
|
|
@@ -115,9 +133,8 @@ const useTreeItemUtils = ({
|
|
|
115
133
|
// As a side effect of `instance.focusItem` called here and in `handleCancelItemLabelEditing` the `labelInput` is blurred
|
|
116
134
|
// The `onBlur` event is triggered, which calls `handleSaveItemLabel` again.
|
|
117
135
|
// To avoid creating an unwanted behavior we need to check if the item is being edited before calling `updateItemLabel`
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
instance.updateItemLabel(itemId, label);
|
|
136
|
+
if ((0, _useTreeViewLabel2.selectorIsItemBeingEdited)(store.value, itemId)) {
|
|
137
|
+
instance.updateItemLabel(itemId, newLabel);
|
|
121
138
|
toggleItemEditing();
|
|
122
139
|
instance.focusItem(event, itemId);
|
|
123
140
|
}
|
|
@@ -126,7 +143,7 @@ const useTreeItemUtils = ({
|
|
|
126
143
|
if (!(0, _plugins.hasPlugin)(instance, _useTreeViewLabel.useTreeViewLabel)) {
|
|
127
144
|
return;
|
|
128
145
|
}
|
|
129
|
-
if (
|
|
146
|
+
if ((0, _useTreeViewLabel2.selectorIsItemBeingEdited)(store.value, itemId)) {
|
|
130
147
|
toggleItemEditing();
|
|
131
148
|
instance.focusItem(event, itemId);
|
|
132
149
|
}
|
package/node/index.js
CHANGED