@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
|
@@ -11,7 +11,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _useTreeViewContext = require("./useTreeViewContext");
|
|
13
13
|
var _utils = require("../utils/utils");
|
|
14
|
-
var
|
|
14
|
+
var _useTreeViewItems = require("../plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
15
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
16
|
const TreeViewChildrenItemContext = exports.TreeViewChildrenItemContext = /*#__PURE__*/React.createContext(null);
|
|
17
17
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -20,11 +20,12 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
20
20
|
function TreeViewChildrenItemProvider(props) {
|
|
21
21
|
const {
|
|
22
22
|
children,
|
|
23
|
-
itemId = null
|
|
23
|
+
itemId = null,
|
|
24
|
+
idAttribute
|
|
24
25
|
} = props;
|
|
25
26
|
const {
|
|
26
27
|
instance,
|
|
27
|
-
|
|
28
|
+
store,
|
|
28
29
|
rootRef
|
|
29
30
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
30
31
|
const childrenIdAttrToIdRef = React.useRef(new Map());
|
|
@@ -32,25 +33,8 @@ function TreeViewChildrenItemProvider(props) {
|
|
|
32
33
|
if (!rootRef.current) {
|
|
33
34
|
return;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
idAttr = rootRef.current.id;
|
|
38
|
-
} else {
|
|
39
|
-
// Undefined during 1st render
|
|
40
|
-
const itemMeta = instance.getItemMeta(itemId);
|
|
41
|
-
if (itemMeta !== undefined) {
|
|
42
|
-
idAttr = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
43
|
-
itemId,
|
|
44
|
-
treeId,
|
|
45
|
-
id: itemMeta.idAttribute
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (idAttr == null) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const previousChildrenIds = instance.getItemOrderedChildrenIds(itemId ?? null) ?? [];
|
|
53
|
-
const escapedIdAttr = (0, _utils.escapeOperandAttributeSelector)(idAttr);
|
|
36
|
+
const previousChildrenIds = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemId ?? null) ?? [];
|
|
37
|
+
const escapedIdAttr = (0, _utils.escapeOperandAttributeSelector)(idAttribute ?? rootRef.current.id);
|
|
54
38
|
const childrenElements = rootRef.current.querySelectorAll(`${itemId == null ? '' : `*[id="${escapedIdAttr}"] `}[role="treeitem"]:not(*[id="${escapedIdAttr}"] [role="treeitem"] [role="treeitem"])`);
|
|
55
39
|
const childrenIds = Array.from(childrenElements).map(child => childrenIdAttrToIdRef.current.get(child.id));
|
|
56
40
|
const hasChanged = childrenIds.length !== previousChildrenIds.length || childrenIds.some((childId, index) => childId !== previousChildrenIds[index]);
|
|
@@ -10,55 +10,67 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
10
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
|
|
13
|
+
var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare");
|
|
13
14
|
var _TreeItem = require("../../TreeItem");
|
|
15
|
+
var _useSelector = require("../hooks/useSelector");
|
|
16
|
+
var _useTreeViewItems = require("../plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
17
|
+
var _TreeViewProvider = require("../TreeViewProvider");
|
|
14
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
19
|
const _excluded = ["ownerState"];
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
|
|
21
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
22
|
+
RichTreeViewItemsContext.displayName = 'RichTreeViewItemsProvider';
|
|
23
|
+
}
|
|
24
|
+
const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
|
|
25
|
+
itemSlot,
|
|
26
|
+
itemSlotProps,
|
|
27
|
+
itemId
|
|
23
28
|
}) {
|
|
24
|
-
const
|
|
29
|
+
const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext);
|
|
30
|
+
const {
|
|
31
|
+
store
|
|
32
|
+
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
33
|
+
const itemMeta = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemMeta, itemId);
|
|
34
|
+
const children = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemOrderedChildrenIds, itemId);
|
|
35
|
+
const Item = itemSlot ?? _TreeItem.TreeItem;
|
|
25
36
|
const _useSlotProps = (0, _useSlotProps2.default)({
|
|
26
37
|
elementType: Item,
|
|
27
|
-
externalSlotProps:
|
|
38
|
+
externalSlotProps: itemSlotProps,
|
|
28
39
|
additionalProps: {
|
|
29
|
-
|
|
30
|
-
id,
|
|
31
|
-
|
|
40
|
+
label: itemMeta?.label,
|
|
41
|
+
id: itemMeta?.idAttribute,
|
|
42
|
+
itemId
|
|
32
43
|
},
|
|
33
44
|
ownerState: {
|
|
34
45
|
itemId,
|
|
35
|
-
label
|
|
46
|
+
label: itemMeta?.label
|
|
36
47
|
}
|
|
37
48
|
}),
|
|
38
49
|
itemProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded);
|
|
39
|
-
const children = React.useMemo(() => itemsToRender ? /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItems, {
|
|
40
|
-
itemsToRender: itemsToRender,
|
|
41
|
-
slots: slots,
|
|
42
|
-
slotProps: slotProps
|
|
43
|
-
}) : null, [itemsToRender, slots, slotProps]);
|
|
44
50
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, {
|
|
45
|
-
children: children
|
|
51
|
+
children: children?.map(renderItemForRichTreeView)
|
|
46
52
|
}));
|
|
47
|
-
}
|
|
53
|
+
}, _fastObjectShallowCompare.fastObjectShallowCompare);
|
|
48
54
|
function RichTreeViewItems(props) {
|
|
49
55
|
const {
|
|
50
|
-
itemsToRender,
|
|
51
56
|
slots,
|
|
52
57
|
slotProps
|
|
53
58
|
} = props;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
const {
|
|
60
|
+
store
|
|
61
|
+
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
62
|
+
const itemSlot = slots?.item;
|
|
63
|
+
const itemSlotProps = slotProps?.item;
|
|
64
|
+
const items = (0, _useSelector.useSelector)(store, _useTreeViewItems.selectorItemOrderedChildrenIds, null);
|
|
65
|
+
const renderItem = React.useCallback(itemId => {
|
|
66
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedTreeItem, {
|
|
67
|
+
itemSlot: itemSlot,
|
|
68
|
+
itemSlotProps: itemSlotProps,
|
|
69
|
+
itemId: itemId
|
|
70
|
+
}, itemId);
|
|
71
|
+
}, [itemSlot, itemSlotProps]);
|
|
72
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItemsContext.Provider, {
|
|
73
|
+
value: renderItem,
|
|
74
|
+
children: items.map(renderItem)
|
|
63
75
|
});
|
|
64
76
|
}
|
|
@@ -8,32 +8,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useTreeViewId = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
-
var
|
|
11
|
+
var _useSelector = require("../../hooks/useSelector");
|
|
12
|
+
var _useTreeViewId = require("./useTreeViewId.selectors");
|
|
13
|
+
var _useTreeViewId2 = require("./useTreeViewId.utils");
|
|
12
14
|
const useTreeViewId = ({
|
|
13
15
|
params,
|
|
14
|
-
|
|
15
|
-
setState
|
|
16
|
+
store
|
|
16
17
|
}) => {
|
|
17
18
|
React.useEffect(() => {
|
|
18
|
-
|
|
19
|
-
if (
|
|
19
|
+
store.update(prevState => {
|
|
20
|
+
if (params.id === prevState.id.providedTreeId && prevState.id.treeId !== undefined) {
|
|
20
21
|
return prevState;
|
|
21
22
|
}
|
|
22
23
|
return (0, _extends2.default)({}, prevState, {
|
|
23
24
|
id: (0, _extends2.default)({}, prevState.id, {
|
|
24
|
-
treeId: params.id ?? (0,
|
|
25
|
+
treeId: params.id ?? (0, _useTreeViewId2.createTreeViewDefaultId)()
|
|
25
26
|
})
|
|
26
27
|
});
|
|
27
28
|
});
|
|
28
|
-
}, [
|
|
29
|
-
const treeId =
|
|
29
|
+
}, [store, params.id]);
|
|
30
|
+
const treeId = (0, _useSelector.useSelector)(store, _useTreeViewId.selectorTreeViewId);
|
|
30
31
|
return {
|
|
31
32
|
getRootProps: () => ({
|
|
32
33
|
id: treeId
|
|
33
|
-
})
|
|
34
|
-
contextValue: {
|
|
35
|
-
treeId
|
|
36
|
-
}
|
|
34
|
+
})
|
|
37
35
|
};
|
|
38
36
|
};
|
|
39
37
|
exports.useTreeViewId = useTreeViewId;
|
|
@@ -44,6 +42,7 @@ useTreeViewId.getInitialState = ({
|
|
|
44
42
|
id
|
|
45
43
|
}) => ({
|
|
46
44
|
id: {
|
|
47
|
-
treeId:
|
|
45
|
+
treeId: undefined,
|
|
46
|
+
providedTreeId: id
|
|
48
47
|
}
|
|
49
48
|
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorTreeViewId = void 0;
|
|
7
|
+
var _selectors = require("../../utils/selectors");
|
|
8
|
+
const selectorTreeViewIdState = state => state.id;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get the id attribute of the tree view.
|
|
12
|
+
* @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
|
|
13
|
+
* @returns {string} The id attribute of the tree view.
|
|
14
|
+
*/
|
|
15
|
+
const selectorTreeViewId = exports.selectorTreeViewId = (0, _selectors.createSelector)(selectorTreeViewIdState, idState => idState.treeId);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSelector = void 0;
|
|
7
|
+
var _withSelector = require("use-sync-external-store/with-selector");
|
|
8
|
+
const defaultCompare = Object.is;
|
|
9
|
+
const useSelector = (store, selector, args = undefined, equals = defaultCompare) => {
|
|
10
|
+
const selectorWithArgs = state => selector(state, args);
|
|
11
|
+
return (0, _withSelector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, selectorWithArgs, equals);
|
|
12
|
+
};
|
|
13
|
+
exports.useSelector = useSelector;
|
package/node/internals/index.js
CHANGED
|
@@ -21,24 +21,66 @@ Object.defineProperty(exports, "TreeViewProvider", {
|
|
|
21
21
|
return _TreeViewProvider.TreeViewProvider;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
+
Object.defineProperty(exports, "TreeViewStore", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _TreeViewStore.TreeViewStore;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
24
30
|
Object.defineProperty(exports, "buildSiblingIndexes", {
|
|
25
31
|
enumerable: true,
|
|
26
32
|
get: function () {
|
|
27
33
|
return _useTreeViewItems.buildSiblingIndexes;
|
|
28
34
|
}
|
|
29
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "createSelector", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _selectors.createSelector;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
30
42
|
Object.defineProperty(exports, "isTargetInDescendants", {
|
|
31
43
|
enumerable: true,
|
|
32
44
|
get: function () {
|
|
33
45
|
return _tree.isTargetInDescendants;
|
|
34
46
|
}
|
|
35
47
|
});
|
|
48
|
+
Object.defineProperty(exports, "selectorItemIndex", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _useTreeViewItems2.selectorItemIndex;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "selectorItemMeta", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _useTreeViewItems2.selectorItemMeta;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "selectorItemMetaLookup", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _useTreeViewItems2.selectorItemMetaLookup;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "selectorItemOrderedChildrenIds", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _useTreeViewItems2.selectorItemOrderedChildrenIds;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
36
72
|
Object.defineProperty(exports, "unstable_resetCleanupTracking", {
|
|
37
73
|
enumerable: true,
|
|
38
74
|
get: function () {
|
|
39
75
|
return _useInstanceEventHandler.unstable_resetCleanupTracking;
|
|
40
76
|
}
|
|
41
77
|
});
|
|
78
|
+
Object.defineProperty(exports, "useSelector", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _useSelector.useSelector;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
42
84
|
Object.defineProperty(exports, "useTreeView", {
|
|
43
85
|
enumerable: true,
|
|
44
86
|
get: function () {
|
|
@@ -103,12 +145,16 @@ var _useTreeView = require("./useTreeView");
|
|
|
103
145
|
var _TreeViewProvider = require("./TreeViewProvider");
|
|
104
146
|
var _RichTreeViewItems = require("./components/RichTreeViewItems");
|
|
105
147
|
var _useInstanceEventHandler = require("./hooks/useInstanceEventHandler");
|
|
148
|
+
var _useSelector = require("./hooks/useSelector");
|
|
106
149
|
var _useTreeViewExpansion = require("./plugins/useTreeViewExpansion");
|
|
107
150
|
var _useTreeViewSelection = require("./plugins/useTreeViewSelection");
|
|
108
151
|
var _useTreeViewFocus = require("./plugins/useTreeViewFocus");
|
|
109
152
|
var _useTreeViewKeyboardNavigation = require("./plugins/useTreeViewKeyboardNavigation");
|
|
110
153
|
var _useTreeViewIcons = require("./plugins/useTreeViewIcons");
|
|
111
154
|
var _useTreeViewItems = require("./plugins/useTreeViewItems");
|
|
155
|
+
var _useTreeViewItems2 = require("./plugins/useTreeViewItems/useTreeViewItems.selectors");
|
|
112
156
|
var _useTreeViewLabel = require("./plugins/useTreeViewLabel");
|
|
113
157
|
var _useTreeViewJSXItems = require("./plugins/useTreeViewJSXItems");
|
|
114
|
-
var
|
|
158
|
+
var _selectors = require("./utils/selectors");
|
|
159
|
+
var _tree = require("./utils/tree");
|
|
160
|
+
var _TreeViewStore = require("./utils/TreeViewStore");
|
|
@@ -9,30 +9,35 @@ exports.useTreeViewExpansion = void 0;
|
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
12
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
13
|
+
var _useTreeViewExpansion = require("./useTreeViewExpansion.selectors");
|
|
14
|
+
var _useTreeViewExpansion2 = require("./useTreeViewExpansion.utils");
|
|
15
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
12
16
|
const useTreeViewExpansion = ({
|
|
13
17
|
instance,
|
|
18
|
+
store,
|
|
14
19
|
params,
|
|
15
|
-
models
|
|
20
|
+
models,
|
|
21
|
+
experimentalFeatures
|
|
16
22
|
}) => {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
const isTreeViewEditable = Boolean(params.isItemEditable) && !!experimentalFeatures.labelEditing;
|
|
24
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
25
|
+
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
26
|
+
expansion: {
|
|
27
|
+
expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(models.expandedItems.value)
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
}, [store, models.expandedItems.value]);
|
|
24
31
|
const setExpandedItems = (event, value) => {
|
|
25
32
|
params.onExpandedItemsChange?.(event, value);
|
|
26
33
|
models.expandedItems.setControlledValue(value);
|
|
27
34
|
};
|
|
28
|
-
const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
|
|
29
|
-
const isItemExpandable = React.useCallback(itemId => !!instance.getItemMeta(itemId)?.expandable, [instance]);
|
|
30
35
|
const toggleItemExpansion = (0, _useEventCallback.default)((event, itemId) => {
|
|
31
|
-
const isExpandedBefore =
|
|
36
|
+
const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
|
|
32
37
|
instance.setItemExpansion(event, itemId, !isExpandedBefore);
|
|
33
38
|
});
|
|
34
39
|
const setItemExpansion = (0, _useEventCallback.default)((event, itemId, isExpanded) => {
|
|
35
|
-
const isExpandedBefore =
|
|
40
|
+
const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
|
|
36
41
|
if (isExpandedBefore === isExpanded) {
|
|
37
42
|
return;
|
|
38
43
|
}
|
|
@@ -48,9 +53,12 @@ const useTreeViewExpansion = ({
|
|
|
48
53
|
setExpandedItems(event, newExpanded);
|
|
49
54
|
});
|
|
50
55
|
const expandAllSiblings = (event, itemId) => {
|
|
51
|
-
const itemMeta =
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
|
|
57
|
+
if (itemMeta == null) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemMeta.parentId);
|
|
61
|
+
const diff = siblings.filter(child => (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, child) && !(0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, child));
|
|
54
62
|
const newExpanded = models.expandedItems.value.concat(diff);
|
|
55
63
|
if (diff.length > 0) {
|
|
56
64
|
if (params.onItemExpansionToggle) {
|
|
@@ -65,27 +73,26 @@ const useTreeViewExpansion = ({
|
|
|
65
73
|
if (params.expansionTrigger) {
|
|
66
74
|
return params.expansionTrigger;
|
|
67
75
|
}
|
|
68
|
-
if (
|
|
76
|
+
if (isTreeViewEditable) {
|
|
69
77
|
return 'iconContainer';
|
|
70
78
|
}
|
|
71
79
|
return 'content';
|
|
72
|
-
}, [params.expansionTrigger,
|
|
80
|
+
}, [params.expansionTrigger, isTreeViewEditable]);
|
|
81
|
+
const pluginContextValue = React.useMemo(() => ({
|
|
82
|
+
expansion: {
|
|
83
|
+
expansionTrigger
|
|
84
|
+
}
|
|
85
|
+
}), [expansionTrigger]);
|
|
73
86
|
return {
|
|
74
87
|
publicAPI: {
|
|
75
88
|
setItemExpansion
|
|
76
89
|
},
|
|
77
90
|
instance: {
|
|
78
|
-
isItemExpanded,
|
|
79
|
-
isItemExpandable,
|
|
80
91
|
setItemExpansion,
|
|
81
92
|
toggleItemExpansion,
|
|
82
93
|
expandAllSiblings
|
|
83
94
|
},
|
|
84
|
-
contextValue:
|
|
85
|
-
expansion: {
|
|
86
|
-
expansionTrigger
|
|
87
|
-
}
|
|
88
|
-
}
|
|
95
|
+
contextValue: pluginContextValue
|
|
89
96
|
};
|
|
90
97
|
};
|
|
91
98
|
exports.useTreeViewExpansion = useTreeViewExpansion;
|
|
@@ -100,6 +107,11 @@ useTreeViewExpansion.getDefaultizedParams = ({
|
|
|
100
107
|
}) => (0, _extends2.default)({}, params, {
|
|
101
108
|
defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
|
|
102
109
|
});
|
|
110
|
+
useTreeViewExpansion.getInitialState = params => ({
|
|
111
|
+
expansion: {
|
|
112
|
+
expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems)
|
|
113
|
+
}
|
|
114
|
+
});
|
|
103
115
|
useTreeViewExpansion.params = {
|
|
104
116
|
expandedItems: true,
|
|
105
117
|
defaultExpandedItems: true,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorIsItemExpanded = exports.selectorIsItemExpandable = void 0;
|
|
7
|
+
var _selectors = require("../../utils/selectors");
|
|
8
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
9
|
+
const selectorExpansion = state => state.expansion;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if an item is expanded.
|
|
13
|
+
* @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
|
|
14
|
+
* @returns {boolean} `true` if the item is expanded, `false` otherwise.
|
|
15
|
+
*/
|
|
16
|
+
const selectorIsItemExpanded = exports.selectorIsItemExpanded = (0, _selectors.createSelector)([selectorExpansion, (_, itemId) => itemId], (expansionState, itemId) => expansionState.expandedItemsMap.has(itemId));
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Check if an item is expandable.
|
|
20
|
+
* @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
|
|
21
|
+
* @returns {boolean} `true` if the item is expandable, `false` otherwise.
|
|
22
|
+
*/
|
|
23
|
+
const selectorIsItemExpandable = exports.selectorIsItemExpandable = (0, _selectors.createSelector)([_useTreeViewItems.selectorItemMeta], itemMeta => itemMeta?.expandable ?? false);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createExpandedItemsMap = void 0;
|
|
7
|
+
const createExpandedItemsMap = expandedItems => {
|
|
8
|
+
const expandedItemsMap = new Map();
|
|
9
|
+
expandedItems.forEach(id => {
|
|
10
|
+
expandedItemsMap.set(id, true);
|
|
11
|
+
});
|
|
12
|
+
return expandedItemsMap;
|
|
13
|
+
};
|
|
14
|
+
exports.createExpandedItemsMap = createExpandedItemsMap;
|
|
@@ -9,46 +9,56 @@ exports.useTreeViewFocus = void 0;
|
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
12
|
-
var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
|
|
13
12
|
var _useInstanceEventHandler = require("../../hooks/useInstanceEventHandler");
|
|
14
|
-
var _utils = require("../../utils/utils");
|
|
15
13
|
var _tree = require("../../utils/tree");
|
|
16
14
|
var _useTreeViewSelection = require("../useTreeViewSelection/useTreeViewSelection.utils");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
const itemMeta = instance.getItemMeta(itemId);
|
|
23
|
-
return itemMeta && (itemMeta.parentId == null || instance.isItemExpanded(itemMeta.parentId));
|
|
24
|
-
});
|
|
25
|
-
if (tabbableItemId == null) {
|
|
26
|
-
tabbableItemId = (0, _tree.getFirstNavigableItem)(instance);
|
|
27
|
-
}
|
|
28
|
-
return tabbableItemId;
|
|
29
|
-
};
|
|
15
|
+
var _useTreeViewFocus = require("./useTreeViewFocus.selectors");
|
|
16
|
+
var _useTreeViewExpansion = require("../useTreeViewExpansion/useTreeViewExpansion.selectors");
|
|
17
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
30
18
|
const useTreeViewFocus = ({
|
|
31
19
|
instance,
|
|
32
20
|
params,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
models,
|
|
36
|
-
rootRef
|
|
21
|
+
store,
|
|
22
|
+
models
|
|
37
23
|
}) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
let defaultFocusableItemId = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).find(itemId => {
|
|
26
|
+
if (!(0, _useTreeViewItems.selectorCanItemBeFocused)(store.value, itemId)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
|
|
30
|
+
return itemMeta && (itemMeta.parentId == null || (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemMeta.parentId));
|
|
31
|
+
});
|
|
32
|
+
if (defaultFocusableItemId == null) {
|
|
33
|
+
defaultFocusableItemId = (0, _tree.getFirstNavigableItem)(store.value) ?? null;
|
|
45
34
|
}
|
|
35
|
+
store.update(prevState => {
|
|
36
|
+
if (defaultFocusableItemId === prevState.focus.defaultFocusableItemId) {
|
|
37
|
+
return prevState;
|
|
38
|
+
}
|
|
39
|
+
return (0, _extends2.default)({}, prevState, {
|
|
40
|
+
focus: (0, _extends2.default)({}, prevState.focus, {
|
|
41
|
+
defaultFocusableItemId
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}, [store, models.selectedItems.value]);
|
|
46
|
+
const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
|
|
47
|
+
store.update(prevState => {
|
|
48
|
+
const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(prevState);
|
|
49
|
+
if (focusedItemId === itemId) {
|
|
50
|
+
return prevState;
|
|
51
|
+
}
|
|
52
|
+
return (0, _extends2.default)({}, prevState, {
|
|
53
|
+
focus: (0, _extends2.default)({}, prevState.focus, {
|
|
54
|
+
focusedItemId: itemId
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
});
|
|
46
58
|
});
|
|
47
|
-
const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current.contains((0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current))), [rootRef]);
|
|
48
|
-
const isItemFocused = React.useCallback(itemId => state.focusedItemId === itemId && isTreeViewFocused(), [state.focusedItemId, isTreeViewFocused]);
|
|
49
59
|
const isItemVisible = itemId => {
|
|
50
|
-
const itemMeta =
|
|
51
|
-
return itemMeta && (itemMeta.parentId == null ||
|
|
60
|
+
const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
|
|
61
|
+
return itemMeta && (itemMeta.parentId == null || (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemMeta.parentId));
|
|
52
62
|
};
|
|
53
63
|
const innerFocusItem = (event, itemId) => {
|
|
54
64
|
const itemElement = instance.getItemDOMElement(itemId);
|
|
@@ -67,23 +77,25 @@ const useTreeViewFocus = ({
|
|
|
67
77
|
}
|
|
68
78
|
});
|
|
69
79
|
const removeFocusedItem = (0, _useEventCallback.default)(() => {
|
|
70
|
-
|
|
80
|
+
const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
|
|
81
|
+
if (focusedItemId == null) {
|
|
71
82
|
return;
|
|
72
83
|
}
|
|
73
|
-
const itemMeta =
|
|
84
|
+
const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, focusedItemId);
|
|
74
85
|
if (itemMeta) {
|
|
75
|
-
const itemElement = instance.getItemDOMElement(
|
|
86
|
+
const itemElement = instance.getItemDOMElement(focusedItemId);
|
|
76
87
|
if (itemElement) {
|
|
77
88
|
itemElement.blur();
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
91
|
setFocusedItemId(null);
|
|
81
92
|
});
|
|
82
|
-
const canItemBeTabbed = itemId => itemId === defaultFocusableItemId;
|
|
83
93
|
(0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeItem', ({
|
|
84
94
|
id
|
|
85
95
|
}) => {
|
|
86
|
-
|
|
96
|
+
const focusedItemId = (0, _useTreeViewFocus.selectorFocusedItemId)(store.value);
|
|
97
|
+
const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
|
|
98
|
+
if (focusedItemId === id && defaultFocusableItemId != null) {
|
|
87
99
|
innerFocusItem(null, defaultFocusableItemId);
|
|
88
100
|
}
|
|
89
101
|
});
|
|
@@ -94,20 +106,27 @@ const useTreeViewFocus = ({
|
|
|
94
106
|
}
|
|
95
107
|
|
|
96
108
|
// if the event bubbled (which is React specific) we don't want to steal focus
|
|
97
|
-
|
|
109
|
+
const defaultFocusableItemId = (0, _useTreeViewFocus.selectorDefaultFocusableItemId)(store.value);
|
|
110
|
+
if (event.target === event.currentTarget && defaultFocusableItemId != null) {
|
|
98
111
|
innerFocusItem(event, defaultFocusableItemId);
|
|
99
112
|
}
|
|
100
113
|
};
|
|
114
|
+
const createRootHandleBlur = otherHandlers => event => {
|
|
115
|
+
otherHandlers.onBlur?.(event);
|
|
116
|
+
if (event.defaultMuiPrevented) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
setFocusedItemId(null);
|
|
120
|
+
};
|
|
101
121
|
return {
|
|
102
122
|
getRootProps: otherHandlers => ({
|
|
103
|
-
onFocus: createRootHandleFocus(otherHandlers)
|
|
123
|
+
onFocus: createRootHandleFocus(otherHandlers),
|
|
124
|
+
onBlur: createRootHandleBlur(otherHandlers)
|
|
104
125
|
}),
|
|
105
126
|
publicAPI: {
|
|
106
127
|
focusItem
|
|
107
128
|
},
|
|
108
129
|
instance: {
|
|
109
|
-
isItemFocused,
|
|
110
|
-
canItemBeTabbed,
|
|
111
130
|
focusItem,
|
|
112
131
|
removeFocusedItem
|
|
113
132
|
}
|
|
@@ -115,7 +134,10 @@ const useTreeViewFocus = ({
|
|
|
115
134
|
};
|
|
116
135
|
exports.useTreeViewFocus = useTreeViewFocus;
|
|
117
136
|
useTreeViewFocus.getInitialState = () => ({
|
|
118
|
-
|
|
137
|
+
focus: {
|
|
138
|
+
focusedItemId: null,
|
|
139
|
+
defaultFocusableItemId: null
|
|
140
|
+
}
|
|
119
141
|
});
|
|
120
142
|
useTreeViewFocus.params = {
|
|
121
143
|
onItemFocus: true
|