@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
|
@@ -15,13 +15,16 @@ var _TreeViewProvider = require("../internals/TreeViewProvider");
|
|
|
15
15
|
var _useTreeItemUtils = require("../hooks/useTreeItemUtils");
|
|
16
16
|
var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
|
|
17
17
|
var _tree = require("../internals/utils/tree");
|
|
18
|
+
var _useSelector = require("../internals/hooks/useSelector");
|
|
19
|
+
var _useTreeViewFocus = require("../internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors");
|
|
18
20
|
var _useTreeViewId = require("../internals/corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
21
|
+
var _useTreeViewItems = require("../internals/plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
22
|
+
var _useTreeViewId2 = require("../internals/corePlugins/useTreeViewId/useTreeViewId.selectors");
|
|
19
23
|
const useTreeItem = parameters => {
|
|
20
24
|
const {
|
|
21
25
|
runItemPlugins,
|
|
22
26
|
items: {
|
|
23
|
-
onItemClick
|
|
24
|
-
disabledItemsFocusable
|
|
27
|
+
onItemClick
|
|
25
28
|
},
|
|
26
29
|
selection: {
|
|
27
30
|
disableSelection,
|
|
@@ -30,11 +33,18 @@ const useTreeItem = parameters => {
|
|
|
30
33
|
expansion: {
|
|
31
34
|
expansionTrigger
|
|
32
35
|
},
|
|
33
|
-
|
|
36
|
+
label: labelContext,
|
|
34
37
|
instance,
|
|
35
|
-
publicAPI
|
|
38
|
+
publicAPI,
|
|
39
|
+
store
|
|
36
40
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
37
41
|
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
42
|
+
const depth = (0, _useSelector.useSelector)(store, (...params) => {
|
|
43
|
+
if (typeof depthContext === 'function') {
|
|
44
|
+
return depthContext(...params);
|
|
45
|
+
}
|
|
46
|
+
return depthContext;
|
|
47
|
+
}, parameters.itemId);
|
|
38
48
|
const {
|
|
39
49
|
id,
|
|
40
50
|
itemId,
|
|
@@ -59,12 +69,13 @@ const useTreeItem = parameters => {
|
|
|
59
69
|
const handleRootRef = (0, _useForkRef.default)(rootRef, pluginRootRef, rootRefObject);
|
|
60
70
|
const handleContentRef = (0, _useForkRef.default)(contentRef, contentRefObject);
|
|
61
71
|
const checkboxRef = React.useRef(null);
|
|
72
|
+
const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId2.selectorTreeViewId);
|
|
62
73
|
const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
63
74
|
itemId,
|
|
64
75
|
treeId,
|
|
65
76
|
id
|
|
66
77
|
});
|
|
67
|
-
const
|
|
78
|
+
const shouldBeAccessibleWithTab = (0, _useSelector.useSelector)(store, _useTreeViewFocus.selectorIsItemTheDefaultFocusableItem, itemId);
|
|
68
79
|
const sharedPropsEnhancerParams = {
|
|
69
80
|
rootRefObject,
|
|
70
81
|
contentRefObject,
|
|
@@ -76,8 +87,7 @@ const useTreeItem = parameters => {
|
|
|
76
87
|
if (event.defaultMuiPrevented) {
|
|
77
88
|
return;
|
|
78
89
|
}
|
|
79
|
-
|
|
80
|
-
if (!status.focused && canBeFocused && event.currentTarget === event.target) {
|
|
90
|
+
if (!status.focused && (0, _useTreeViewItems.selectorCanItemBeFocused)(store.value, itemId) && event.currentTarget === event.target) {
|
|
81
91
|
instance.focusItem(event, itemId);
|
|
82
92
|
}
|
|
83
93
|
};
|
|
@@ -115,7 +125,7 @@ const useTreeItem = parameters => {
|
|
|
115
125
|
};
|
|
116
126
|
const createContentHandleClick = otherHandlers => event => {
|
|
117
127
|
otherHandlers.onClick?.(event);
|
|
118
|
-
onItemClick
|
|
128
|
+
onItemClick(event, itemId);
|
|
119
129
|
if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
|
|
120
130
|
return;
|
|
121
131
|
}
|
|
@@ -146,6 +156,10 @@ const useTreeItem = parameters => {
|
|
|
146
156
|
interactions.handleExpansion(event);
|
|
147
157
|
}
|
|
148
158
|
};
|
|
159
|
+
const getContextProviderProps = () => ({
|
|
160
|
+
itemId,
|
|
161
|
+
id
|
|
162
|
+
});
|
|
149
163
|
const getRootProps = (externalProps = {}) => {
|
|
150
164
|
const externalEventHandlers = (0, _extends2.default)({}, (0, _extractEventHandlers.default)(parameters), (0, _extractEventHandlers.default)(externalProps));
|
|
151
165
|
|
|
@@ -164,14 +178,14 @@ const useTreeItem = parameters => {
|
|
|
164
178
|
const props = (0, _extends2.default)({}, externalEventHandlers, {
|
|
165
179
|
ref: handleRootRef,
|
|
166
180
|
role: 'treeitem',
|
|
167
|
-
tabIndex:
|
|
181
|
+
tabIndex: shouldBeAccessibleWithTab ? 0 : -1,
|
|
168
182
|
id: idAttribute,
|
|
169
183
|
'aria-expanded': status.expandable ? status.expanded : undefined,
|
|
170
184
|
'aria-selected': ariaSelected,
|
|
171
185
|
'aria-disabled': status.disabled || undefined
|
|
172
186
|
}, externalProps, {
|
|
173
187
|
style: (0, _extends2.default)({}, externalProps.style ?? {}, {
|
|
174
|
-
'--TreeView-itemDepth':
|
|
188
|
+
'--TreeView-itemDepth': depth
|
|
175
189
|
}),
|
|
176
190
|
onFocus: createRootHandleFocus(externalEventHandlers),
|
|
177
191
|
onBlur: createRootHandleBlur(externalEventHandlers),
|
|
@@ -212,7 +226,7 @@ const useTreeItem = parameters => {
|
|
|
212
226
|
}, externalProps, {
|
|
213
227
|
onDoubleClick: createLabelHandleDoubleClick(externalEventHandlers)
|
|
214
228
|
});
|
|
215
|
-
if (
|
|
229
|
+
if (labelContext?.isItemEditable) {
|
|
216
230
|
props.editable = status.editable;
|
|
217
231
|
}
|
|
218
232
|
return props;
|
|
@@ -249,6 +263,7 @@ const useTreeItem = parameters => {
|
|
|
249
263
|
return (0, _extends2.default)({}, externalProps, enhancedDragAndDropOverlayProps);
|
|
250
264
|
};
|
|
251
265
|
return {
|
|
266
|
+
getContextProviderProps,
|
|
252
267
|
getRootProps,
|
|
253
268
|
getContentProps,
|
|
254
269
|
getGroupTransitionProps,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-tree-view",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.2",
|
|
4
4
|
"description": "The community edition of the Tree View components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -39,15 +39,17 @@
|
|
|
39
39
|
"clsx": "^2.1.1",
|
|
40
40
|
"prop-types": "^15.8.1",
|
|
41
41
|
"react-transition-group": "^4.4.5",
|
|
42
|
-
"
|
|
42
|
+
"reselect": "^5.1.1",
|
|
43
|
+
"use-sync-external-store": "^1.2.2",
|
|
44
|
+
"@mui/x-internals": "8.0.0-alpha.2"
|
|
43
45
|
},
|
|
44
46
|
"peerDependencies": {
|
|
45
47
|
"@emotion/react": "^11.9.0",
|
|
46
48
|
"@emotion/styled": "^11.8.1",
|
|
47
49
|
"@mui/material": "^5.15.14 || ^6.0.0",
|
|
48
50
|
"@mui/system": "^5.15.14 || ^6.0.0",
|
|
49
|
-
"react": "^17.0.0 || ^18.0.0",
|
|
50
|
-
"react-dom": "^17.0.0 || ^18.0.0"
|
|
51
|
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
52
|
+
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
51
53
|
},
|
|
52
54
|
"peerDependenciesMeta": {
|
|
53
55
|
"@emotion/react": {
|
|
@@ -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,
|
|
@@ -32,6 +32,10 @@ export interface UseTreeItemParameters {
|
|
|
32
32
|
*/
|
|
33
33
|
children?: React.ReactNode;
|
|
34
34
|
}
|
|
35
|
+
export interface UseTreeItemContextProviderProps {
|
|
36
|
+
itemId: string;
|
|
37
|
+
id: string | undefined;
|
|
38
|
+
}
|
|
35
39
|
export interface UseTreeItemRootSlotPropsFromUseTreeItem {
|
|
36
40
|
role: 'treeitem';
|
|
37
41
|
tabIndex: 0 | -1;
|
|
@@ -98,6 +102,11 @@ export interface UseTreeItemStatus {
|
|
|
98
102
|
editable: boolean;
|
|
99
103
|
}
|
|
100
104
|
export interface UseTreeItemReturnValue<TSignatures extends UseTreeItemMinimalPlugins, TOptionalSignatures extends UseTreeItemOptionalPlugins> {
|
|
105
|
+
/**
|
|
106
|
+
* Resolver for the context provider's props.
|
|
107
|
+
* @returns {UseTreeItemContextProviderProps} Props that should be spread on the context provider slot.
|
|
108
|
+
*/
|
|
109
|
+
getContextProviderProps: () => UseTreeItemContextProviderProps;
|
|
101
110
|
/**
|
|
102
111
|
* Resolver for the root slot's props.
|
|
103
112
|
* @param {ExternalProps} externalProps Additional props for the root slot.
|