@mui/x-tree-view 7.0.0 → 7.1.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 +246 -4
- package/README.md +1 -1
- package/RichTreeView/RichTreeView.d.ts +2 -2
- package/RichTreeView/RichTreeView.js +11 -9
- package/SimpleTreeView/SimpleTreeView.js +4 -2
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/TreeItem/TreeItem.js +4 -4
- package/TreeItem/treeItemClasses.d.ts +1 -1
- package/TreeItem/useTreeItemState.js +9 -9
- package/TreeItem2Icon/TreeItem2Icon.types.d.ts +4 -4
- package/TreeView/TreeView.js +2 -1
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
- package/hooks/useTreeViewApiRef.d.ts +1 -1
- package/index.js +1 -1
- package/internals/TreeViewProvider/DescendantProvider.d.ts +1 -1
- package/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/internals/index.d.ts +18 -8
- package/internals/index.js +11 -0
- package/internals/models/plugin.d.ts +1 -1
- package/internals/plugins/defaultPlugins.d.ts +3 -3
- package/internals/plugins/defaultPlugins.js +2 -2
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -18
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +16 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +17 -9
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +6 -6
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/index.d.ts +2 -0
- package/internals/plugins/useTreeViewItems/index.js +1 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +3 -0
- package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +43 -33
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +104 -0
- package/internals/plugins/useTreeViewJSXItems/index.d.ts +2 -0
- package/internals/plugins/useTreeViewJSXItems/index.js +1 -0
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +3 -0
- package/{modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +26 -25
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +18 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +40 -44
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +6 -6
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +7 -7
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/internals/useTreeView/useTreeView.utils.d.ts +5 -5
- package/internals/useTreeView/useTreeView.utils.js +15 -15
- package/internals/useTreeView/useTreeViewModels.js +2 -2
- package/modern/RichTreeView/RichTreeView.js +11 -9
- package/modern/SimpleTreeView/SimpleTreeView.js +4 -2
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/modern/TreeItem/TreeItem.js +4 -4
- package/modern/TreeItem/useTreeItemState.js +9 -9
- package/modern/TreeView/TreeView.js +2 -1
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/modern/internals/index.js +11 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -2
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -18
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
- package/modern/internals/plugins/useTreeViewItems/index.js +1 -0
- package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +43 -33
- package/modern/internals/plugins/useTreeViewJSXItems/index.js +1 -0
- package/{internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +26 -25
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +40 -44
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/modern/internals/useTreeView/useTreeView.utils.js +15 -15
- package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
- package/node/RichTreeView/RichTreeView.js +11 -9
- package/node/SimpleTreeView/SimpleTreeView.js +4 -2
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
- package/node/TreeItem/TreeItem.js +4 -4
- package/node/TreeItem/useTreeItemState.js +9 -9
- package/node/TreeView/TreeView.js +2 -1
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/DescendantProvider.js +1 -1
- package/node/internals/index.js +70 -0
- package/node/internals/plugins/defaultPlugins.js +2 -2
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +31 -17
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
- package/node/internals/plugins/useTreeViewItems/index.js +12 -0
- package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +45 -35
- package/node/internals/plugins/useTreeViewJSXItems/index.js +12 -0
- package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.js → useTreeViewJSXItems/useTreeViewJSXItems.js} +28 -27
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +39 -43
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +33 -33
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
- package/node/internals/useTreeView/useTreeView.utils.js +20 -20
- package/node/internals/useTreeView/useTreeViewModels.js +2 -2
- package/package.json +2 -2
- package/useTreeItem2/useTreeItem2.d.ts +1 -1
- package/internals/plugins/useTreeViewJSXNodes/index.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +0 -3
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +0 -18
- package/internals/plugins/useTreeViewNodes/index.d.ts +0 -2
- package/internals/plugins/useTreeViewNodes/index.js +0 -1
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +0 -3
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +0 -88
- package/modern/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
- package/modern/internals/plugins/useTreeViewNodes/index.js +0 -1
- package/node/internals/plugins/useTreeViewJSXNodes/index.js +0 -12
- package/node/internals/plugins/useTreeViewNodes/index.js +0 -12
- /package/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
|
@@ -13,37 +13,47 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
|
|
|
13
13
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
14
14
|
const useTreeViewExpansion = ({
|
|
15
15
|
instance,
|
|
16
|
+
publicAPI,
|
|
16
17
|
params,
|
|
17
18
|
models
|
|
18
19
|
}) => {
|
|
20
|
+
const expandedItemsMap = React.useMemo(() => {
|
|
21
|
+
const temp = new Map();
|
|
22
|
+
models.expandedItems.value.forEach(id => {
|
|
23
|
+
temp.set(id, true);
|
|
24
|
+
});
|
|
25
|
+
return temp;
|
|
26
|
+
}, [models.expandedItems.value]);
|
|
19
27
|
const setExpandedItems = (event, value) => {
|
|
20
28
|
params.onExpandedItemsChange?.(event, value);
|
|
21
29
|
models.expandedItems.setControlledValue(value);
|
|
22
30
|
};
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
|
|
32
|
+
const isItemExpandable = React.useCallback(itemId => !!instance.getNode(itemId)?.expandable, [instance]);
|
|
33
|
+
const toggleItemExpansion = (0, _useEventCallback.default)((event, itemId) => {
|
|
34
|
+
const isExpandedBefore = instance.isItemExpanded(itemId);
|
|
35
|
+
instance.setItemExpansion(event, itemId, !isExpandedBefore);
|
|
36
|
+
});
|
|
37
|
+
const setItemExpansion = (0, _useEventCallback.default)((event, itemId, isExpanded) => {
|
|
38
|
+
const isExpandedBefore = instance.isItemExpanded(itemId);
|
|
39
|
+
if (isExpandedBefore === isExpanded) {
|
|
29
40
|
return;
|
|
30
41
|
}
|
|
31
|
-
const isExpandedBefore = models.expandedItems.value.indexOf(itemId) !== -1;
|
|
32
42
|
let newExpanded;
|
|
33
|
-
if (
|
|
34
|
-
newExpanded = models.expandedItems.value.filter(id => id !== itemId);
|
|
35
|
-
} else {
|
|
43
|
+
if (isExpanded) {
|
|
36
44
|
newExpanded = [itemId].concat(models.expandedItems.value);
|
|
45
|
+
} else {
|
|
46
|
+
newExpanded = models.expandedItems.value.filter(id => id !== itemId);
|
|
37
47
|
}
|
|
38
48
|
if (params.onItemExpansionToggle) {
|
|
39
|
-
params.onItemExpansionToggle(event, itemId,
|
|
49
|
+
params.onItemExpansionToggle(event, itemId, isExpanded);
|
|
40
50
|
}
|
|
41
51
|
setExpandedItems(event, newExpanded);
|
|
42
52
|
});
|
|
43
53
|
const expandAllSiblings = (event, itemId) => {
|
|
44
54
|
const node = instance.getNode(itemId);
|
|
45
55
|
const siblings = instance.getChildrenIds(node.parentId);
|
|
46
|
-
const diff = siblings.filter(child => instance.
|
|
56
|
+
const diff = siblings.filter(child => instance.isItemExpandable(child) && !instance.isItemExpanded(child));
|
|
47
57
|
const newExpanded = models.expandedItems.value.concat(diff);
|
|
48
58
|
if (diff.length > 0) {
|
|
49
59
|
if (params.onItemExpansionToggle) {
|
|
@@ -55,11 +65,15 @@ const useTreeViewExpansion = ({
|
|
|
55
65
|
}
|
|
56
66
|
};
|
|
57
67
|
(0, _useTreeView.populateInstance)(instance, {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
isItemExpanded,
|
|
69
|
+
isItemExpandable,
|
|
70
|
+
setItemExpansion,
|
|
71
|
+
toggleItemExpansion,
|
|
61
72
|
expandAllSiblings
|
|
62
73
|
});
|
|
74
|
+
(0, _useTreeView.populatePublicAPI)(publicAPI, {
|
|
75
|
+
setItemExpansion
|
|
76
|
+
});
|
|
63
77
|
};
|
|
64
78
|
exports.useTreeViewExpansion = useTreeViewExpansion;
|
|
65
79
|
useTreeViewExpansion.models = {
|
|
@@ -67,9 +81,9 @@ useTreeViewExpansion.models = {
|
|
|
67
81
|
getDefaultValue: params => params.defaultExpandedItems
|
|
68
82
|
}
|
|
69
83
|
};
|
|
70
|
-
const
|
|
84
|
+
const DEFAULT_EXPANDED_ITEMS = [];
|
|
71
85
|
useTreeViewExpansion.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
|
|
72
|
-
defaultExpandedItems: params.defaultExpandedItems ??
|
|
86
|
+
defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
|
|
73
87
|
});
|
|
74
88
|
useTreeViewExpansion.params = {
|
|
75
89
|
expandedItems: true,
|
|
@@ -17,7 +17,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
17
17
|
const useTabbableItemId = (instance, selectedItems) => {
|
|
18
18
|
const isItemVisible = itemId => {
|
|
19
19
|
const node = instance.getNode(itemId);
|
|
20
|
-
return node && (node.parentId == null || instance.
|
|
20
|
+
return node && (node.parentId == null || instance.isItemExpanded(node.parentId));
|
|
21
21
|
};
|
|
22
22
|
let tabbableItemId;
|
|
23
23
|
if (Array.isArray(selectedItems)) {
|
|
@@ -41,18 +41,18 @@ const useTreeViewFocus = ({
|
|
|
41
41
|
}) => {
|
|
42
42
|
const tabbableItemId = useTabbableItemId(instance, models.selectedItems.value);
|
|
43
43
|
const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
|
|
44
|
-
const cleanItemId = typeof itemId === 'function' ? itemId(state.
|
|
45
|
-
if (state.
|
|
44
|
+
const cleanItemId = typeof itemId === 'function' ? itemId(state.focusedItemId) : itemId;
|
|
45
|
+
if (state.focusedItemId !== cleanItemId) {
|
|
46
46
|
setState(prevState => (0, _extends2.default)({}, prevState, {
|
|
47
|
-
|
|
47
|
+
focusedItemId: cleanItemId
|
|
48
48
|
}));
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
51
|
const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current.contains((0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current))), [rootRef]);
|
|
52
|
-
const
|
|
53
|
-
const
|
|
52
|
+
const isItemFocused = React.useCallback(itemId => state.focusedItemId === itemId && isTreeViewFocused(), [state.focusedItemId, isTreeViewFocused]);
|
|
53
|
+
const isItemVisible = itemId => {
|
|
54
54
|
const node = instance.getNode(itemId);
|
|
55
|
-
return node && (node.parentId == null || instance.
|
|
55
|
+
return node && (node.parentId == null || instance.isItemExpanded(node.parentId));
|
|
56
56
|
};
|
|
57
57
|
const innerFocusItem = (event, itemId) => {
|
|
58
58
|
const node = instance.getNode(itemId);
|
|
@@ -65,62 +65,64 @@ const useTreeViewFocus = ({
|
|
|
65
65
|
params.onItemFocus(event, itemId);
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
const focusItem = (0, _useEventCallback.default)((event,
|
|
69
|
-
// If we receive
|
|
70
|
-
if (
|
|
71
|
-
innerFocusItem(event,
|
|
68
|
+
const focusItem = (0, _useEventCallback.default)((event, itemId) => {
|
|
69
|
+
// If we receive an itemId, and it is visible, the focus will be set to it
|
|
70
|
+
if (isItemVisible(itemId)) {
|
|
71
|
+
innerFocusItem(event, itemId);
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
-
const
|
|
75
|
-
let
|
|
74
|
+
const focusDefaultItem = (0, _useEventCallback.default)(event => {
|
|
75
|
+
let itemToFocusId;
|
|
76
76
|
if (Array.isArray(models.selectedItems.value)) {
|
|
77
|
-
|
|
78
|
-
} else if (models.selectedItems.value != null &&
|
|
79
|
-
|
|
77
|
+
itemToFocusId = models.selectedItems.value.find(isItemVisible);
|
|
78
|
+
} else if (models.selectedItems.value != null && isItemVisible(models.selectedItems.value)) {
|
|
79
|
+
itemToFocusId = models.selectedItems.value;
|
|
80
80
|
}
|
|
81
|
-
if (
|
|
82
|
-
|
|
81
|
+
if (itemToFocusId == null) {
|
|
82
|
+
itemToFocusId = instance.getNavigableChildrenIds(null)[0];
|
|
83
83
|
}
|
|
84
|
-
innerFocusItem(event,
|
|
84
|
+
innerFocusItem(event, itemToFocusId);
|
|
85
85
|
});
|
|
86
86
|
const removeFocusedItem = (0, _useEventCallback.default)(() => {
|
|
87
|
-
if (state.
|
|
87
|
+
if (state.focusedItemId == null) {
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
|
-
const node = instance.getNode(state.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
itemElement
|
|
90
|
+
const node = instance.getNode(state.focusedItemId);
|
|
91
|
+
if (node) {
|
|
92
|
+
const itemElement = document.getElementById(instance.getTreeItemId(state.focusedItemId, node.idAttribute));
|
|
93
|
+
if (itemElement) {
|
|
94
|
+
itemElement.blur();
|
|
95
|
+
}
|
|
94
96
|
}
|
|
95
97
|
setFocusedItemId(null);
|
|
96
98
|
});
|
|
97
99
|
const canItemBeTabbed = itemId => itemId === tabbableItemId;
|
|
98
100
|
(0, _useTreeView.populateInstance)(instance, {
|
|
99
|
-
|
|
101
|
+
isItemFocused,
|
|
100
102
|
canItemBeTabbed,
|
|
101
103
|
focusItem,
|
|
102
|
-
|
|
104
|
+
focusDefaultItem,
|
|
103
105
|
removeFocusedItem
|
|
104
106
|
});
|
|
105
107
|
(0, _useTreeView.populatePublicAPI)(publicAPI, {
|
|
106
108
|
focusItem
|
|
107
109
|
});
|
|
108
|
-
(0, _useInstanceEventHandler.useInstanceEventHandler)(instance, '
|
|
110
|
+
(0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeItem', ({
|
|
109
111
|
id
|
|
110
112
|
}) => {
|
|
111
|
-
if (state.
|
|
112
|
-
instance.
|
|
113
|
+
if (state.focusedItemId === id) {
|
|
114
|
+
instance.focusDefaultItem(null);
|
|
113
115
|
}
|
|
114
116
|
});
|
|
115
117
|
const createHandleFocus = otherHandlers => event => {
|
|
116
118
|
otherHandlers.onFocus?.(event);
|
|
117
119
|
// if the event bubbled (which is React specific) we don't want to steal focus
|
|
118
120
|
if (event.target === event.currentTarget) {
|
|
119
|
-
instance.
|
|
121
|
+
instance.focusDefaultItem(event);
|
|
120
122
|
}
|
|
121
123
|
};
|
|
122
|
-
const
|
|
123
|
-
const activeDescendant =
|
|
124
|
+
const focusedItem = instance.getNode(state.focusedItemId);
|
|
125
|
+
const activeDescendant = focusedItem ? instance.getTreeItemId(focusedItem.id, focusedItem.idAttribute) : null;
|
|
124
126
|
return {
|
|
125
127
|
getRootProps: otherHandlers => ({
|
|
126
128
|
onFocus: createHandleFocus(otherHandlers),
|
|
@@ -130,7 +132,7 @@ const useTreeViewFocus = ({
|
|
|
130
132
|
};
|
|
131
133
|
exports.useTreeViewFocus = useTreeViewFocus;
|
|
132
134
|
useTreeViewFocus.getInitialState = () => ({
|
|
133
|
-
|
|
135
|
+
focusedItemId: null
|
|
134
136
|
});
|
|
135
137
|
useTreeViewFocus.params = {
|
|
136
138
|
onItemFocus: true
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeViewItems", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewItems.useTreeViewItems;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useTreeViewItems = require("./useTreeViewItems");
|
|
@@ -4,14 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.useTreeViewItems = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
11
11
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
12
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
13
13
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
14
|
-
const
|
|
14
|
+
const updateItemsState = ({
|
|
15
15
|
items,
|
|
16
16
|
isItemDisabled,
|
|
17
17
|
getItemLabel,
|
|
@@ -25,7 +25,7 @@ const updateNodesState = ({
|
|
|
25
25
|
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
26
26
|
}
|
|
27
27
|
if (nodeMap[id] != null) {
|
|
28
|
-
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `
|
|
28
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
|
|
29
29
|
}
|
|
30
30
|
const label = getItemLabel ? getItemLabel(item) : item.label;
|
|
31
31
|
if (label == null) {
|
|
@@ -53,86 +53,96 @@ const updateNodesState = ({
|
|
|
53
53
|
itemMap
|
|
54
54
|
};
|
|
55
55
|
};
|
|
56
|
-
const
|
|
56
|
+
const useTreeViewItems = ({
|
|
57
57
|
instance,
|
|
58
58
|
publicAPI,
|
|
59
59
|
params,
|
|
60
60
|
state,
|
|
61
61
|
setState
|
|
62
62
|
}) => {
|
|
63
|
-
const getNode = React.useCallback(itemId => state.
|
|
64
|
-
const getItem = React.useCallback(itemId => state.
|
|
65
|
-
const
|
|
63
|
+
const getNode = React.useCallback(itemId => state.items.nodeMap[itemId], [state.items.nodeMap]);
|
|
64
|
+
const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
|
|
65
|
+
const isItemDisabled = React.useCallback(itemId => {
|
|
66
66
|
if (itemId == null) {
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
|
-
let
|
|
69
|
+
let node = instance.getNode(itemId);
|
|
70
70
|
|
|
71
|
-
// This can be called before the item has been added to the
|
|
72
|
-
if (!
|
|
71
|
+
// This can be called before the item has been added to the item map.
|
|
72
|
+
if (!node) {
|
|
73
73
|
return false;
|
|
74
74
|
}
|
|
75
|
-
if (
|
|
75
|
+
if (node.disabled) {
|
|
76
76
|
return true;
|
|
77
77
|
}
|
|
78
|
-
while (
|
|
79
|
-
|
|
80
|
-
if (
|
|
78
|
+
while (node.parentId != null) {
|
|
79
|
+
node = instance.getNode(node.parentId);
|
|
80
|
+
if (node.disabled) {
|
|
81
81
|
return true;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
return false;
|
|
85
85
|
}, [instance]);
|
|
86
|
-
const getChildrenIds = React.useCallback(itemId => Object.values(state.
|
|
86
|
+
const getChildrenIds = React.useCallback(itemId => Object.values(state.items.nodeMap).filter(item => item.parentId === itemId).sort((a, b) => a.index - b.index).map(child => child.id), [state.items.nodeMap]);
|
|
87
87
|
const getNavigableChildrenIds = itemId => {
|
|
88
88
|
let childrenIds = instance.getChildrenIds(itemId);
|
|
89
89
|
if (!params.disabledItemsFocusable) {
|
|
90
|
-
childrenIds = childrenIds.filter(item => !instance.
|
|
90
|
+
childrenIds = childrenIds.filter(item => !instance.isItemDisabled(item));
|
|
91
91
|
}
|
|
92
92
|
return childrenIds;
|
|
93
93
|
};
|
|
94
|
+
const areItemUpdatesPreventedRef = React.useRef(false);
|
|
95
|
+
const preventItemUpdates = React.useCallback(() => {
|
|
96
|
+
areItemUpdatesPreventedRef.current = true;
|
|
97
|
+
}, []);
|
|
98
|
+
const areItemUpdatesPrevented = React.useCallback(() => areItemUpdatesPreventedRef.current, []);
|
|
94
99
|
React.useEffect(() => {
|
|
100
|
+
if (instance.areItemUpdatesPrevented()) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
95
103
|
setState(prevState => {
|
|
96
|
-
const newState =
|
|
104
|
+
const newState = updateItemsState({
|
|
97
105
|
items: params.items,
|
|
98
106
|
isItemDisabled: params.isItemDisabled,
|
|
99
107
|
getItemId: params.getItemId,
|
|
100
108
|
getItemLabel: params.getItemLabel
|
|
101
109
|
});
|
|
102
|
-
Object.values(prevState.
|
|
103
|
-
if (!newState.nodeMap[
|
|
104
|
-
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, '
|
|
105
|
-
id:
|
|
110
|
+
Object.values(prevState.items.nodeMap).forEach(item => {
|
|
111
|
+
if (!newState.nodeMap[item.id]) {
|
|
112
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
113
|
+
id: item.id
|
|
106
114
|
});
|
|
107
115
|
}
|
|
108
116
|
});
|
|
109
117
|
return (0, _extends2.default)({}, prevState, {
|
|
110
|
-
|
|
118
|
+
items: newState
|
|
111
119
|
});
|
|
112
120
|
});
|
|
113
121
|
}, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
114
|
-
const
|
|
122
|
+
const getItemsToRender = () => {
|
|
115
123
|
const getPropsFromItemId = ({
|
|
116
124
|
id,
|
|
117
125
|
children
|
|
118
126
|
}) => {
|
|
119
|
-
const
|
|
127
|
+
const item = state.items.nodeMap[id];
|
|
120
128
|
return {
|
|
121
|
-
label:
|
|
122
|
-
itemId:
|
|
123
|
-
id:
|
|
129
|
+
label: item.label,
|
|
130
|
+
itemId: item.id,
|
|
131
|
+
id: item.idAttribute,
|
|
124
132
|
children: children?.map(getPropsFromItemId)
|
|
125
133
|
};
|
|
126
134
|
};
|
|
127
|
-
return state.
|
|
135
|
+
return state.items.nodeTree.map(getPropsFromItemId);
|
|
128
136
|
};
|
|
129
137
|
(0, _useTreeView.populateInstance)(instance, {
|
|
130
138
|
getNode,
|
|
131
139
|
getItem,
|
|
132
|
-
|
|
140
|
+
getItemsToRender,
|
|
133
141
|
getChildrenIds,
|
|
134
142
|
getNavigableChildrenIds,
|
|
135
|
-
|
|
143
|
+
isItemDisabled,
|
|
144
|
+
preventItemUpdates,
|
|
145
|
+
areItemUpdatesPrevented
|
|
136
146
|
});
|
|
137
147
|
(0, _useTreeView.populatePublicAPI)(publicAPI, {
|
|
138
148
|
getItem
|
|
@@ -143,19 +153,19 @@ const useTreeViewNodes = ({
|
|
|
143
153
|
}
|
|
144
154
|
};
|
|
145
155
|
};
|
|
146
|
-
exports.
|
|
147
|
-
|
|
148
|
-
|
|
156
|
+
exports.useTreeViewItems = useTreeViewItems;
|
|
157
|
+
useTreeViewItems.getInitialState = params => ({
|
|
158
|
+
items: updateItemsState({
|
|
149
159
|
items: params.items,
|
|
150
160
|
isItemDisabled: params.isItemDisabled,
|
|
151
161
|
getItemId: params.getItemId,
|
|
152
162
|
getItemLabel: params.getItemLabel
|
|
153
163
|
})
|
|
154
164
|
});
|
|
155
|
-
|
|
165
|
+
useTreeViewItems.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
|
|
156
166
|
disabledItemsFocusable: params.disabledItemsFocusable ?? false
|
|
157
167
|
});
|
|
158
|
-
|
|
168
|
+
useTreeViewItems.params = {
|
|
159
169
|
disabledItemsFocusable: true,
|
|
160
170
|
items: true,
|
|
161
171
|
isItemDisabled: true,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeViewJSXItems", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewJSXItems.useTreeViewJSXItems;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useTreeViewJSXItems = require("./useTreeViewJSXItems");
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.useTreeViewJSXItems = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
@@ -16,45 +16,46 @@ var _DescendantProvider = require("../../TreeViewProvider/DescendantProvider");
|
|
|
16
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
-
const
|
|
19
|
+
const useTreeViewJSXItems = ({
|
|
20
20
|
instance,
|
|
21
21
|
setState
|
|
22
22
|
}) => {
|
|
23
|
-
|
|
23
|
+
instance.preventItemUpdates();
|
|
24
|
+
const insertJSXItem = (0, _useEventCallback.default)(item => {
|
|
24
25
|
setState(prevState => {
|
|
25
|
-
if (prevState.
|
|
26
|
-
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `
|
|
26
|
+
if (prevState.items.nodeMap[item.id] != null) {
|
|
27
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n'));
|
|
27
28
|
}
|
|
28
29
|
return (0, _extends2.default)({}, prevState, {
|
|
29
|
-
|
|
30
|
-
nodeMap: (0, _extends2.default)({}, prevState.
|
|
31
|
-
[
|
|
30
|
+
items: (0, _extends2.default)({}, prevState.items, {
|
|
31
|
+
nodeMap: (0, _extends2.default)({}, prevState.items.nodeMap, {
|
|
32
|
+
[item.id]: item
|
|
32
33
|
}),
|
|
33
34
|
// For `SimpleTreeView`, we don't have a proper `item` object, so we create a very basic one.
|
|
34
|
-
itemMap: (0, _extends2.default)({}, prevState.
|
|
35
|
-
[
|
|
36
|
-
id:
|
|
37
|
-
label:
|
|
35
|
+
itemMap: (0, _extends2.default)({}, prevState.items.itemMap, {
|
|
36
|
+
[item.id]: {
|
|
37
|
+
id: item.id,
|
|
38
|
+
label: item.label
|
|
38
39
|
}
|
|
39
40
|
})
|
|
40
41
|
})
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
});
|
|
44
|
-
const
|
|
45
|
+
const removeJSXItem = (0, _useEventCallback.default)(itemId => {
|
|
45
46
|
setState(prevState => {
|
|
46
|
-
const newNodeMap = (0, _extends2.default)({}, prevState.
|
|
47
|
-
const newItemMap = (0, _extends2.default)({}, prevState.
|
|
47
|
+
const newNodeMap = (0, _extends2.default)({}, prevState.items.nodeMap);
|
|
48
|
+
const newItemMap = (0, _extends2.default)({}, prevState.items.itemMap);
|
|
48
49
|
delete newNodeMap[itemId];
|
|
49
50
|
delete newItemMap[itemId];
|
|
50
51
|
return (0, _extends2.default)({}, prevState, {
|
|
51
|
-
|
|
52
|
+
items: (0, _extends2.default)({}, prevState.items, {
|
|
52
53
|
nodeMap: newNodeMap,
|
|
53
54
|
itemMap: newItemMap
|
|
54
55
|
})
|
|
55
56
|
});
|
|
56
57
|
});
|
|
57
|
-
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, '
|
|
58
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
58
59
|
id: itemId
|
|
59
60
|
});
|
|
60
61
|
});
|
|
@@ -72,13 +73,13 @@ const useTreeViewJSXNodes = ({
|
|
|
72
73
|
};
|
|
73
74
|
});
|
|
74
75
|
(0, _useTreeView.populateInstance)(instance, {
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
insertJSXItem,
|
|
77
|
+
removeJSXItem,
|
|
77
78
|
mapFirstCharFromJSX
|
|
78
79
|
});
|
|
79
80
|
};
|
|
80
|
-
exports.
|
|
81
|
-
const
|
|
81
|
+
exports.useTreeViewJSXItems = useTreeViewJSXItems;
|
|
82
|
+
const useTreeViewJSXItemsItemPlugin = ({
|
|
82
83
|
props,
|
|
83
84
|
rootRef,
|
|
84
85
|
contentRef
|
|
@@ -113,9 +114,9 @@ const useTreeViewJSXNodesItemPlugin = ({
|
|
|
113
114
|
parentId
|
|
114
115
|
} = (0, _DescendantProvider.useDescendant)(descendant);
|
|
115
116
|
React.useEffect(() => {
|
|
116
|
-
// On the first render a
|
|
117
|
+
// On the first render a item's index will be -1. We want to wait for the real index.
|
|
117
118
|
if (index !== -1) {
|
|
118
|
-
instance.
|
|
119
|
+
instance.insertJSXItem({
|
|
119
120
|
id: itemId,
|
|
120
121
|
idAttribute: id,
|
|
121
122
|
index,
|
|
@@ -123,7 +124,7 @@ const useTreeViewJSXNodesItemPlugin = ({
|
|
|
123
124
|
expandable,
|
|
124
125
|
disabled
|
|
125
126
|
});
|
|
126
|
-
return () => instance.
|
|
127
|
+
return () => instance.removeJSXItem(itemId);
|
|
127
128
|
}
|
|
128
129
|
return undefined;
|
|
129
130
|
}, [instance, parentId, index, itemId, expandable, disabled, id]);
|
|
@@ -138,12 +139,12 @@ const useTreeViewJSXNodesItemPlugin = ({
|
|
|
138
139
|
rootRef: handleRootRef
|
|
139
140
|
};
|
|
140
141
|
};
|
|
141
|
-
|
|
142
|
-
|
|
142
|
+
useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
|
|
143
|
+
useTreeViewJSXItems.wrapItem = ({
|
|
143
144
|
children,
|
|
144
145
|
itemId
|
|
145
146
|
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
|
|
146
147
|
id: itemId,
|
|
147
148
|
children: children
|
|
148
149
|
});
|
|
149
|
-
|
|
150
|
+
useTreeViewJSXItems.params = {};
|