@mui/x-tree-view 8.0.0-alpha.0 → 8.0.0-alpha.10
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 +2215 -119
- package/README.md +3 -3
- package/RichTreeView/RichTreeView.js +2 -4
- package/RichTreeView/RichTreeView.types.d.ts +6 -19
- package/SimpleTreeView/SimpleTreeView.types.d.ts +3 -3
- package/TreeItem/TreeItem.d.ts +1 -1
- 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 +6 -5
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +31 -15
- package/hooks/useTreeViewApiRef.d.ts +2 -1
- 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 +5 -3
- 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/useInstanceEventHandler.js +1 -1
- 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 +7 -7
- package/internals/models/plugin.d.ts +22 -10
- package/internals/models/treeView.d.ts +6 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +41 -30
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +180 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +24 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +6 -18
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +4 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +19 -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 +886 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +36 -55
- 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 +16 -17
- 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.d.ts +1 -1
- package/internals/useTreeView/useTreeView.js +30 -17
- package/internals/useTreeView/useTreeView.types.d.ts +3 -4
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +4 -2
- 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/useInstanceEventHandler.js +1 -1
- package/modern/internals/hooks/useSelector.js +6 -0
- package/modern/internals/index.js +5 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +41 -30
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +24 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +19 -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 +16 -17
- 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 +29 -16
- 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/useInstanceEventHandler.js +1 -1
- package/node/internals/hooks/useSelector.js +13 -0
- package/node/internals/index.js +47 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +41 -31
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +30 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +27 -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 +16 -17
- 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 +29 -16
- package/package.json +8 -6
- package/useTreeItem/useTreeItem.js +29 -16
- package/useTreeItem/useTreeItem.types.d.ts +10 -1
|
@@ -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);
|
|
@@ -22,7 +22,7 @@ function createUseInstanceEventHandler(registryContainer) {
|
|
|
22
22
|
}
|
|
23
23
|
const [objectRetainedByReact] = React.useState(new ObjectToBeRetainedByReact());
|
|
24
24
|
const subscription = React.useRef(null);
|
|
25
|
-
const handlerRef = React.useRef();
|
|
25
|
+
const handlerRef = React.useRef(undefined);
|
|
26
26
|
handlerRef.current = handler;
|
|
27
27
|
const cleanupTokenRef = React.useRef(null);
|
|
28
28
|
if (!subscription.current && handlerRef.current) {
|
|
@@ -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");
|
|
@@ -1,38 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.useTreeViewExpansion = void 0;
|
|
9
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var React = _interopRequireWildcard(require("react"));
|
|
11
9
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
10
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
11
|
+
var _useTreeViewExpansion = require("./useTreeViewExpansion.selectors");
|
|
12
|
+
var _useTreeViewExpansion2 = require("./useTreeViewExpansion.utils");
|
|
13
|
+
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors");
|
|
12
14
|
const useTreeViewExpansion = ({
|
|
13
15
|
instance,
|
|
16
|
+
store,
|
|
14
17
|
params,
|
|
15
18
|
models
|
|
16
19
|
}) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
21
|
+
store.update(prevState => (0, _extends2.default)({}, prevState, {
|
|
22
|
+
expansion: (0, _extends2.default)({}, prevState.expansion, {
|
|
23
|
+
expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(models.expandedItems.value)
|
|
24
|
+
})
|
|
25
|
+
}));
|
|
26
|
+
}, [store, models.expandedItems.value]);
|
|
27
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
28
|
+
store.update(prevState => {
|
|
29
|
+
const newExpansionTrigger = (0, _useTreeViewExpansion2.getExpansionTrigger)({
|
|
30
|
+
isItemEditable: params.isItemEditable,
|
|
31
|
+
expansionTrigger: params.expansionTrigger
|
|
32
|
+
});
|
|
33
|
+
if (prevState.expansion.expansionTrigger === newExpansionTrigger) {
|
|
34
|
+
return prevState;
|
|
35
|
+
}
|
|
36
|
+
return (0, _extends2.default)({}, prevState, {
|
|
37
|
+
expansion: (0, _extends2.default)({}, prevState.expansion, {
|
|
38
|
+
expansionTrigger: newExpansionTrigger
|
|
39
|
+
})
|
|
40
|
+
});
|
|
21
41
|
});
|
|
22
|
-
|
|
23
|
-
}, [models.expandedItems.value]);
|
|
42
|
+
}, [store, params.isItemEditable, params.expansionTrigger]);
|
|
24
43
|
const setExpandedItems = (event, value) => {
|
|
25
44
|
params.onExpandedItemsChange?.(event, value);
|
|
26
45
|
models.expandedItems.setControlledValue(value);
|
|
27
46
|
};
|
|
28
|
-
const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
|
|
29
|
-
const isItemExpandable = React.useCallback(itemId => !!instance.getItemMeta(itemId)?.expandable, [instance]);
|
|
30
47
|
const toggleItemExpansion = (0, _useEventCallback.default)((event, itemId) => {
|
|
31
|
-
const isExpandedBefore =
|
|
48
|
+
const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
|
|
32
49
|
instance.setItemExpansion(event, itemId, !isExpandedBefore);
|
|
33
50
|
});
|
|
34
51
|
const setItemExpansion = (0, _useEventCallback.default)((event, itemId, isExpanded) => {
|
|
35
|
-
const isExpandedBefore =
|
|
52
|
+
const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId);
|
|
36
53
|
if (isExpandedBefore === isExpanded) {
|
|
37
54
|
return;
|
|
38
55
|
}
|
|
@@ -48,9 +65,12 @@ const useTreeViewExpansion = ({
|
|
|
48
65
|
setExpandedItems(event, newExpanded);
|
|
49
66
|
});
|
|
50
67
|
const expandAllSiblings = (event, itemId) => {
|
|
51
|
-
const itemMeta =
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId);
|
|
69
|
+
if (itemMeta == null) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemMeta.parentId);
|
|
73
|
+
const diff = siblings.filter(child => (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, child) && !(0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, child));
|
|
54
74
|
const newExpanded = models.expandedItems.value.concat(diff);
|
|
55
75
|
if (diff.length > 0) {
|
|
56
76
|
if (params.onItemExpansionToggle) {
|
|
@@ -61,30 +81,14 @@ const useTreeViewExpansion = ({
|
|
|
61
81
|
setExpandedItems(event, newExpanded);
|
|
62
82
|
}
|
|
63
83
|
};
|
|
64
|
-
const expansionTrigger = React.useMemo(() => {
|
|
65
|
-
if (params.expansionTrigger) {
|
|
66
|
-
return params.expansionTrigger;
|
|
67
|
-
}
|
|
68
|
-
if (instance.isTreeViewEditable) {
|
|
69
|
-
return 'iconContainer';
|
|
70
|
-
}
|
|
71
|
-
return 'content';
|
|
72
|
-
}, [params.expansionTrigger, instance.isTreeViewEditable]);
|
|
73
84
|
return {
|
|
74
85
|
publicAPI: {
|
|
75
86
|
setItemExpansion
|
|
76
87
|
},
|
|
77
88
|
instance: {
|
|
78
|
-
isItemExpanded,
|
|
79
|
-
isItemExpandable,
|
|
80
89
|
setItemExpansion,
|
|
81
90
|
toggleItemExpansion,
|
|
82
91
|
expandAllSiblings
|
|
83
|
-
},
|
|
84
|
-
contextValue: {
|
|
85
|
-
expansion: {
|
|
86
|
-
expansionTrigger
|
|
87
|
-
}
|
|
88
92
|
}
|
|
89
93
|
};
|
|
90
94
|
};
|
|
@@ -100,6 +104,12 @@ useTreeViewExpansion.getDefaultizedParams = ({
|
|
|
100
104
|
}) => (0, _extends2.default)({}, params, {
|
|
101
105
|
defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
|
|
102
106
|
});
|
|
107
|
+
useTreeViewExpansion.getInitialState = params => ({
|
|
108
|
+
expansion: {
|
|
109
|
+
expandedItemsMap: (0, _useTreeViewExpansion2.createExpandedItemsMap)(params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems),
|
|
110
|
+
expansionTrigger: (0, _useTreeViewExpansion2.getExpansionTrigger)(params)
|
|
111
|
+
}
|
|
112
|
+
});
|
|
103
113
|
useTreeViewExpansion.params = {
|
|
104
114
|
expandedItems: true,
|
|
105
115
|
defaultExpandedItems: true,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectorItemExpansionTrigger = 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);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the slot that triggers the item's expansion when clicked.
|
|
27
|
+
* @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
|
|
28
|
+
* @returns {'content' | 'iconContainer'} The slot that triggers the item's expansion when clicked. Is `null` if the item is not expandable.
|
|
29
|
+
*/
|
|
30
|
+
const selectorItemExpansionTrigger = exports.selectorItemExpansionTrigger = (0, _selectors.createSelector)([selectorExpansion], expansionState => expansionState.expansionTrigger);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getExpansionTrigger = 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;
|
|
15
|
+
const getExpansionTrigger = ({
|
|
16
|
+
isItemEditable,
|
|
17
|
+
expansionTrigger
|
|
18
|
+
}) => {
|
|
19
|
+
if (expansionTrigger) {
|
|
20
|
+
return expansionTrigger;
|
|
21
|
+
}
|
|
22
|
+
if (isItemEditable) {
|
|
23
|
+
return 'iconContainer';
|
|
24
|
+
}
|
|
25
|
+
return 'content';
|
|
26
|
+
};
|
|
27
|
+
exports.getExpansionTrigger = getExpansionTrigger;
|