@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
|
@@ -3,54 +3,66 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
3
3
|
const _excluded = ["ownerState"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import useSlotProps from '@mui/utils/useSlotProps';
|
|
6
|
+
import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
|
|
6
7
|
import { TreeItem } from "../../TreeItem/index.js";
|
|
8
|
+
import { useSelector } from "../hooks/useSelector.js";
|
|
9
|
+
import { selectorItemMeta, selectorItemOrderedChildrenIds } from "../plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
10
|
+
import { useTreeViewContext } from "../TreeViewProvider/index.js";
|
|
7
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
|
|
13
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
14
|
+
RichTreeViewItemsContext.displayName = 'RichTreeViewItemsProvider';
|
|
15
|
+
}
|
|
16
|
+
const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
|
|
17
|
+
itemSlot,
|
|
18
|
+
itemSlotProps,
|
|
19
|
+
itemId
|
|
15
20
|
}) {
|
|
16
|
-
const
|
|
21
|
+
const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext);
|
|
22
|
+
const {
|
|
23
|
+
store
|
|
24
|
+
} = useTreeViewContext();
|
|
25
|
+
const itemMeta = useSelector(store, selectorItemMeta, itemId);
|
|
26
|
+
const children = useSelector(store, selectorItemOrderedChildrenIds, itemId);
|
|
27
|
+
const Item = itemSlot ?? TreeItem;
|
|
17
28
|
const _useSlotProps = useSlotProps({
|
|
18
29
|
elementType: Item,
|
|
19
|
-
externalSlotProps:
|
|
30
|
+
externalSlotProps: itemSlotProps,
|
|
20
31
|
additionalProps: {
|
|
21
|
-
|
|
22
|
-
id,
|
|
23
|
-
|
|
32
|
+
label: itemMeta?.label,
|
|
33
|
+
id: itemMeta?.idAttribute,
|
|
34
|
+
itemId
|
|
24
35
|
},
|
|
25
36
|
ownerState: {
|
|
26
37
|
itemId,
|
|
27
|
-
label
|
|
38
|
+
label: itemMeta?.label
|
|
28
39
|
}
|
|
29
40
|
}),
|
|
30
41
|
itemProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded);
|
|
31
|
-
const children = React.useMemo(() => itemsToRender ? /*#__PURE__*/_jsx(RichTreeViewItems, {
|
|
32
|
-
itemsToRender: itemsToRender,
|
|
33
|
-
slots: slots,
|
|
34
|
-
slotProps: slotProps
|
|
35
|
-
}) : null, [itemsToRender, slots, slotProps]);
|
|
36
42
|
return /*#__PURE__*/_jsx(Item, _extends({}, itemProps, {
|
|
37
|
-
children: children
|
|
43
|
+
children: children?.map(renderItemForRichTreeView)
|
|
38
44
|
}));
|
|
39
|
-
}
|
|
45
|
+
}, fastObjectShallowCompare);
|
|
40
46
|
export function RichTreeViewItems(props) {
|
|
41
47
|
const {
|
|
42
|
-
itemsToRender,
|
|
43
48
|
slots,
|
|
44
49
|
slotProps
|
|
45
50
|
} = props;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
const {
|
|
52
|
+
store
|
|
53
|
+
} = useTreeViewContext();
|
|
54
|
+
const itemSlot = slots?.item;
|
|
55
|
+
const itemSlotProps = slotProps?.item;
|
|
56
|
+
const items = useSelector(store, selectorItemOrderedChildrenIds, null);
|
|
57
|
+
const renderItem = React.useCallback(itemId => {
|
|
58
|
+
return /*#__PURE__*/_jsx(WrappedTreeItem, {
|
|
59
|
+
itemSlot: itemSlot,
|
|
60
|
+
itemSlotProps: itemSlotProps,
|
|
61
|
+
itemId: itemId
|
|
62
|
+
}, itemId);
|
|
63
|
+
}, [itemSlot, itemSlotProps]);
|
|
64
|
+
return /*#__PURE__*/_jsx(RichTreeViewItemsContext.Provider, {
|
|
65
|
+
value: renderItem,
|
|
66
|
+
children: items.map(renderItem)
|
|
55
67
|
});
|
|
56
68
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { useSelector } from "../../hooks/useSelector.js";
|
|
4
|
+
import { selectorTreeViewId } from "./useTreeViewId.selectors.js";
|
|
3
5
|
import { createTreeViewDefaultId } from "./useTreeViewId.utils.js";
|
|
4
6
|
export const useTreeViewId = ({
|
|
5
7
|
params,
|
|
6
|
-
|
|
7
|
-
setState
|
|
8
|
+
store
|
|
8
9
|
}) => {
|
|
9
10
|
React.useEffect(() => {
|
|
10
|
-
|
|
11
|
-
if (
|
|
11
|
+
store.update(prevState => {
|
|
12
|
+
if (params.id === prevState.id.providedTreeId && prevState.id.treeId !== undefined) {
|
|
12
13
|
return prevState;
|
|
13
14
|
}
|
|
14
15
|
return _extends({}, prevState, {
|
|
@@ -17,15 +18,12 @@ export const useTreeViewId = ({
|
|
|
17
18
|
})
|
|
18
19
|
});
|
|
19
20
|
});
|
|
20
|
-
}, [
|
|
21
|
-
const treeId =
|
|
21
|
+
}, [store, params.id]);
|
|
22
|
+
const treeId = useSelector(store, selectorTreeViewId);
|
|
22
23
|
return {
|
|
23
24
|
getRootProps: () => ({
|
|
24
25
|
id: treeId
|
|
25
|
-
})
|
|
26
|
-
contextValue: {
|
|
27
|
-
treeId
|
|
28
|
-
}
|
|
26
|
+
})
|
|
29
27
|
};
|
|
30
28
|
};
|
|
31
29
|
useTreeViewId.params = {
|
|
@@ -35,6 +33,7 @@ useTreeViewId.getInitialState = ({
|
|
|
35
33
|
id
|
|
36
34
|
}) => ({
|
|
37
35
|
id: {
|
|
38
|
-
treeId:
|
|
36
|
+
treeId: undefined,
|
|
37
|
+
providedTreeId: id
|
|
39
38
|
}
|
|
40
39
|
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TreeViewRootSelector } from '../../utils/selectors';
|
|
2
|
+
import { UseTreeViewIdSignature } from './useTreeViewId.types';
|
|
3
|
+
/**
|
|
4
|
+
* Get the id attribute of the tree view.
|
|
5
|
+
* @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
|
|
6
|
+
* @returns {string} The id attribute of the tree view.
|
|
7
|
+
*/
|
|
8
|
+
export declare const selectorTreeViewId: ((state: import("./useTreeViewId.types").UseTreeViewIdState & Partial<{}> & {
|
|
9
|
+
cacheKey: import("../../models").TreeViewStateCacheKey;
|
|
10
|
+
}) => string | undefined) & {
|
|
11
|
+
clearCache: () => void;
|
|
12
|
+
resultsCount: () => number;
|
|
13
|
+
resetResultsCount: () => void;
|
|
14
|
+
} & {
|
|
15
|
+
resultFunc: (resultFuncArgs_0: {
|
|
16
|
+
treeId: string | undefined;
|
|
17
|
+
providedTreeId: string | undefined;
|
|
18
|
+
}) => string | undefined;
|
|
19
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
20
|
+
treeId: string | undefined;
|
|
21
|
+
providedTreeId: string | undefined;
|
|
22
|
+
}) => string | undefined) & {
|
|
23
|
+
clearCache: () => void;
|
|
24
|
+
resultsCount: () => number;
|
|
25
|
+
resetResultsCount: () => void;
|
|
26
|
+
};
|
|
27
|
+
lastResult: () => string | undefined;
|
|
28
|
+
dependencies: [TreeViewRootSelector<UseTreeViewIdSignature>];
|
|
29
|
+
recomputations: () => number;
|
|
30
|
+
resetRecomputations: () => void;
|
|
31
|
+
dependencyRecomputations: () => number;
|
|
32
|
+
resetDependencyRecomputations: () => void;
|
|
33
|
+
} & {
|
|
34
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
35
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
36
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createSelector } from "../../utils/selectors.js";
|
|
2
|
+
const selectorTreeViewIdState = state => state.id;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Get the id attribute of the tree view.
|
|
6
|
+
* @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
|
|
7
|
+
* @returns {string} The id attribute of the tree view.
|
|
8
|
+
*/
|
|
9
|
+
export const selectorTreeViewId = createSelector(selectorTreeViewIdState, idState => idState.treeId);
|
|
@@ -10,15 +10,11 @@ export type UseTreeViewIdDefaultizedParameters = UseTreeViewIdParameters;
|
|
|
10
10
|
export interface UseTreeViewIdState {
|
|
11
11
|
id: {
|
|
12
12
|
treeId: string | undefined;
|
|
13
|
+
providedTreeId: string | undefined;
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
|
-
interface UseTreeViewIdContextValue {
|
|
16
|
-
treeId: string | undefined;
|
|
17
|
-
}
|
|
18
16
|
export type UseTreeViewIdSignature = TreeViewPluginSignature<{
|
|
19
17
|
params: UseTreeViewIdParameters;
|
|
20
18
|
defaultizedParams: UseTreeViewIdDefaultizedParameters;
|
|
21
19
|
state: UseTreeViewIdState;
|
|
22
|
-
contextValue: UseTreeViewIdContextValue;
|
|
23
20
|
}>;
|
|
24
|
-
export {};
|
|
@@ -14,7 +14,7 @@ export function createUseInstanceEventHandler(registryContainer) {
|
|
|
14
14
|
}
|
|
15
15
|
const [objectRetainedByReact] = React.useState(new ObjectToBeRetainedByReact());
|
|
16
16
|
const subscription = React.useRef(null);
|
|
17
|
-
const handlerRef = React.useRef();
|
|
17
|
+
const handlerRef = React.useRef(undefined);
|
|
18
18
|
handlerRef.current = handler;
|
|
19
19
|
const cleanupTokenRef = React.useRef(null);
|
|
20
20
|
if (!subscription.current && handlerRef.current) {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TreeViewAnyPluginSignature, TreeViewState } from '../models';
|
|
2
|
+
import { TreeViewStore } from '../utils/TreeViewStore';
|
|
3
|
+
import { TreeViewSelector } from '../utils/selectors';
|
|
4
|
+
export declare const useSelector: <TSignatures extends readonly TreeViewAnyPluginSignature[], TArgs, TValue>(store: TreeViewStore<TSignatures>, selector: TreeViewSelector<TreeViewState<TSignatures>, TArgs, TValue>, args?: TArgs, equals?: (a: TValue, b: TValue) => boolean) => TValue;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';
|
|
2
|
+
const defaultCompare = Object.is;
|
|
3
|
+
export const useSelector = (store, selector, args = undefined, equals = defaultCompare) => {
|
|
4
|
+
const selectorWithArgs = state => selector(state, args);
|
|
5
|
+
return useSyncExternalStoreWithSelector(store.subscribe, store.getSnapshot, store.getSnapshot, selectorWithArgs, equals);
|
|
6
|
+
};
|
package/internals/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { useTreeView } from './useTreeView';
|
|
2
2
|
export { TreeViewProvider, useTreeViewContext } from './TreeViewProvider';
|
|
3
3
|
export { RichTreeViewItems } from './components/RichTreeViewItems';
|
|
4
|
+
export type { RichTreeViewItemsSlots, RichTreeViewItemsSlotProps, } from './components/RichTreeViewItems';
|
|
4
5
|
export { unstable_resetCleanupTracking } from './hooks/useInstanceEventHandler';
|
|
5
|
-
export
|
|
6
|
+
export { useSelector } from './hooks/useSelector';
|
|
7
|
+
export type { TreeViewPlugin, TreeViewPluginSignature, ConvertPluginsIntoSignatures, MergeSignaturesProperty, TreeViewPublicAPI, TreeViewState, TreeViewExperimentalFeatures, TreeViewItemMeta, TreeViewInstance, TreeViewItemPlugin, TreeViewUsedStore, } from './models';
|
|
6
8
|
export type { TreeViewCorePluginParameters } from './corePlugins';
|
|
7
9
|
export { useTreeViewExpansion } from './plugins/useTreeViewExpansion';
|
|
8
10
|
export type { UseTreeViewExpansionSignature, UseTreeViewExpansionParameters, } from './plugins/useTreeViewExpansion';
|
|
@@ -15,9 +17,12 @@ export type { UseTreeViewKeyboardNavigationSignature } from './plugins/useTreeVi
|
|
|
15
17
|
export { useTreeViewIcons } from './plugins/useTreeViewIcons';
|
|
16
18
|
export type { UseTreeViewIconsSignature, UseTreeViewIconsParameters, } from './plugins/useTreeViewIcons';
|
|
17
19
|
export { useTreeViewItems, buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID, } from './plugins/useTreeViewItems';
|
|
20
|
+
export { selectorItemMetaLookup, selectorItemMeta, selectorItemIndex, selectorItemOrderedChildrenIds, } from './plugins/useTreeViewItems/useTreeViewItems.selectors';
|
|
18
21
|
export type { UseTreeViewItemsSignature, UseTreeViewItemsParameters, UseTreeViewItemsState, } from './plugins/useTreeViewItems';
|
|
19
22
|
export { useTreeViewLabel } from './plugins/useTreeViewLabel';
|
|
20
23
|
export type { UseTreeViewLabelSignature, UseTreeViewLabelParameters, } from './plugins/useTreeViewLabel';
|
|
21
24
|
export { useTreeViewJSXItems } from './plugins/useTreeViewJSXItems';
|
|
22
25
|
export type { UseTreeViewJSXItemsSignature, UseTreeViewJSXItemsParameters, } from './plugins/useTreeViewJSXItems';
|
|
26
|
+
export { createSelector } from './utils/selectors';
|
|
23
27
|
export { isTargetInDescendants } from './utils/tree';
|
|
28
|
+
export { TreeViewStore } from './utils/TreeViewStore';
|
package/internals/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { useTreeView } from "./useTreeView/index.js";
|
|
|
2
2
|
export { TreeViewProvider, useTreeViewContext } from "./TreeViewProvider/index.js";
|
|
3
3
|
export { RichTreeViewItems } from "./components/RichTreeViewItems.js";
|
|
4
4
|
export { unstable_resetCleanupTracking } from "./hooks/useInstanceEventHandler.js";
|
|
5
|
+
export { useSelector } from "./hooks/useSelector.js";
|
|
5
6
|
|
|
6
7
|
// Core plugins
|
|
7
8
|
|
|
@@ -12,6 +13,9 @@ export { useTreeViewFocus } from "./plugins/useTreeViewFocus/index.js";
|
|
|
12
13
|
export { useTreeViewKeyboardNavigation } from "./plugins/useTreeViewKeyboardNavigation/index.js";
|
|
13
14
|
export { useTreeViewIcons } from "./plugins/useTreeViewIcons/index.js";
|
|
14
15
|
export { useTreeViewItems, buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./plugins/useTreeViewItems/index.js";
|
|
16
|
+
export { selectorItemMetaLookup, selectorItemMeta, selectorItemIndex, selectorItemOrderedChildrenIds } from "./plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
15
17
|
export { useTreeViewLabel } from "./plugins/useTreeViewLabel/index.js";
|
|
16
18
|
export { useTreeViewJSXItems } from "./plugins/useTreeViewJSXItems/index.js";
|
|
17
|
-
export {
|
|
19
|
+
export { createSelector } from "./utils/selectors.js";
|
|
20
|
+
export { isTargetInDescendants } from "./utils/tree.js";
|
|
21
|
+
export { TreeViewStore } from "./utils/TreeViewStore.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { EventHandlers } from '@mui/utils';
|
|
3
|
-
import type { TreeItemProps } from '../../TreeItem';
|
|
2
|
+
import { EventHandlers } from '@mui/utils/types';
|
|
4
3
|
import type { UseTreeItemContentSlotOwnProps, UseTreeItemDragAndDropOverlaySlotOwnProps, UseTreeItemLabelInputSlotOwnProps, UseTreeItemRootSlotOwnProps, UseTreeItemCheckboxSlotOwnProps, UseTreeItemStatus } from '../../useTreeItem';
|
|
5
4
|
import type { UseTreeItemInteractions } from '../../hooks/useTreeItemUtils/useTreeItemUtils';
|
|
5
|
+
import type { TreeItemProps } from '../../TreeItem/TreeItem.types';
|
|
6
6
|
export interface TreeViewItemPluginSlotPropsEnhancerParams {
|
|
7
|
-
rootRefObject: React.
|
|
8
|
-
contentRefObject: React.
|
|
7
|
+
rootRefObject: React.RefObject<HTMLLIElement | null>;
|
|
8
|
+
contentRefObject: React.RefObject<HTMLDivElement | null>;
|
|
9
9
|
externalEventHandlers: EventHandlers;
|
|
10
10
|
interactions: UseTreeItemInteractions;
|
|
11
11
|
status: UseTreeItemStatus;
|
|
@@ -36,8 +36,8 @@ export interface TreeViewItemPluginResponse {
|
|
|
36
36
|
*/
|
|
37
37
|
propsEnhancers?: TreeViewItemPluginSlotPropsEnhancers;
|
|
38
38
|
}
|
|
39
|
-
export interface TreeViewItemPluginOptions
|
|
40
|
-
props:
|
|
39
|
+
export interface TreeViewItemPluginOptions extends Omit<TreeViewItemPluginResponse, 'propsEnhancers'> {
|
|
40
|
+
props: TreeItemProps;
|
|
41
41
|
}
|
|
42
|
-
export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions
|
|
42
|
+
export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions) => void | TreeViewItemPluginResponse;
|
|
43
43
|
export {};
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { EventHandlers } from '@mui/utils';
|
|
2
|
+
import { EventHandlers } from '@mui/utils/types';
|
|
3
3
|
import { TreeViewExperimentalFeatures, TreeViewInstance, TreeViewModel } from './treeView';
|
|
4
4
|
import type { MergeSignaturesProperty, OptionalIfEmpty } from './helpers';
|
|
5
5
|
import { TreeViewEventLookupElement } from './events';
|
|
6
6
|
import type { TreeViewCorePluginSignatures } from '../corePlugins';
|
|
7
7
|
import { TreeViewItemPlugin } from './itemPlugin';
|
|
8
8
|
import { TreeViewItemId } from '../../models';
|
|
9
|
+
import { TreeViewStore } from '../utils/TreeViewStore';
|
|
9
10
|
export interface TreeViewPluginOptions<TSignature extends TreeViewAnyPluginSignature> {
|
|
10
11
|
instance: TreeViewUsedInstance<TSignature>;
|
|
11
12
|
params: TreeViewUsedDefaultizedParams<TSignature>;
|
|
12
|
-
state: TreeViewUsedState<TSignature>;
|
|
13
13
|
slots: TSignature['slots'];
|
|
14
14
|
slotProps: TSignature['slotProps'];
|
|
15
15
|
experimentalFeatures: TreeViewUsedExperimentalFeatures<TSignature>;
|
|
16
16
|
models: TreeViewUsedModels<TSignature>;
|
|
17
|
-
|
|
18
|
-
rootRef: React.RefObject<HTMLUListElement>;
|
|
17
|
+
store: TreeViewUsedStore<TSignature>;
|
|
18
|
+
rootRef: React.RefObject<HTMLUListElement | null>;
|
|
19
19
|
plugins: TreeViewPlugin<TreeViewAnyPluginSignature>[];
|
|
20
20
|
}
|
|
21
21
|
type TreeViewModelsInitializer<TSignature extends TreeViewAnyPluginSignature> = {
|
|
@@ -35,6 +35,7 @@ export type TreeViewPluginSignature<T extends {
|
|
|
35
35
|
[key in keyof T['events']]: TreeViewEventLookupElement;
|
|
36
36
|
};
|
|
37
37
|
state?: {};
|
|
38
|
+
cache?: {};
|
|
38
39
|
contextValue?: {};
|
|
39
40
|
slots?: {
|
|
40
41
|
[key in keyof T['slots']]: React.ElementType;
|
|
@@ -65,6 +66,9 @@ export type TreeViewPluginSignature<T extends {
|
|
|
65
66
|
state: T extends {
|
|
66
67
|
state: {};
|
|
67
68
|
} ? T['state'] : {};
|
|
69
|
+
cache: T extends {
|
|
70
|
+
cache: {};
|
|
71
|
+
} ? T['cache'] : {};
|
|
68
72
|
contextValue: T extends {
|
|
69
73
|
contextValue: {};
|
|
70
74
|
} ? T['contextValue'] : {};
|
|
@@ -93,6 +97,7 @@ export type TreeViewPluginSignature<T extends {
|
|
|
93
97
|
} ? T['optionalDependencies'] : [];
|
|
94
98
|
};
|
|
95
99
|
export type TreeViewAnyPluginSignature = {
|
|
100
|
+
cache: any;
|
|
96
101
|
state: any;
|
|
97
102
|
instance: any;
|
|
98
103
|
params: any;
|
|
@@ -113,15 +118,21 @@ type TreeViewRequiredPlugins<TSignature extends TreeViewAnyPluginSignature> = [
|
|
|
113
118
|
];
|
|
114
119
|
type PluginPropertyWithDependencies<TSignature extends TreeViewAnyPluginSignature, TProperty extends keyof TreeViewAnyPluginSignature> = TSignature[TProperty] & MergeSignaturesProperty<TreeViewRequiredPlugins<TSignature>, TProperty> & Partial<MergeSignaturesProperty<TSignature['optionalDependencies'], TProperty>>;
|
|
115
120
|
export type TreeViewUsedParams<TSignature extends TreeViewAnyPluginSignature> = PluginPropertyWithDependencies<TSignature, 'params'>;
|
|
116
|
-
type TreeViewUsedDefaultizedParams<TSignature extends TreeViewAnyPluginSignature> = PluginPropertyWithDependencies<TSignature, 'defaultizedParams'>;
|
|
121
|
+
export type TreeViewUsedDefaultizedParams<TSignature extends TreeViewAnyPluginSignature> = PluginPropertyWithDependencies<TSignature, 'defaultizedParams'>;
|
|
117
122
|
export type TreeViewUsedInstance<TSignature extends TreeViewAnyPluginSignature> = PluginPropertyWithDependencies<TSignature, 'instance'> & {
|
|
118
123
|
/**
|
|
119
124
|
* Private property only defined in TypeScript to be able to access the plugin signature from the instance object.
|
|
120
125
|
*/
|
|
121
126
|
$$signature: TSignature;
|
|
122
127
|
};
|
|
123
|
-
type
|
|
124
|
-
|
|
128
|
+
export type TreeViewUsedStore<TSignature extends TreeViewAnyPluginSignature> = TreeViewStore<[
|
|
129
|
+
TSignature,
|
|
130
|
+
...TSignature['dependencies']
|
|
131
|
+
]>;
|
|
132
|
+
type TreeViewUsedExperimentalFeatures<TSignature extends TreeViewAnyPluginSignature> = TreeViewExperimentalFeatures<[
|
|
133
|
+
TSignature,
|
|
134
|
+
...TSignature['dependencies']
|
|
135
|
+
], TSignature['optionalDependencies']>;
|
|
125
136
|
type RemoveSetValue<Models extends Record<string, TreeViewModel<any>>> = {
|
|
126
137
|
[K in keyof Models]: Omit<Models[K], 'setValue'>;
|
|
127
138
|
};
|
|
@@ -131,10 +142,10 @@ export type TreeItemWrapper<TSignatures extends readonly TreeViewAnyPluginSignat
|
|
|
131
142
|
itemId: TreeViewItemId;
|
|
132
143
|
children: React.ReactNode;
|
|
133
144
|
instance: TreeViewInstance<TSignatures>;
|
|
145
|
+
idAttribute: string;
|
|
134
146
|
}) => React.ReactNode;
|
|
135
|
-
export type TreeRootWrapper
|
|
147
|
+
export type TreeRootWrapper = (params: {
|
|
136
148
|
children: React.ReactNode;
|
|
137
|
-
instance: TreeViewInstance<TSignatures>;
|
|
138
149
|
}) => React.ReactNode;
|
|
139
150
|
export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
|
|
140
151
|
(options: TreeViewPluginOptions<TSignature>): TreeViewResponse<TSignature>;
|
|
@@ -143,6 +154,7 @@ export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
|
|
|
143
154
|
experimentalFeatures: TreeViewUsedExperimentalFeatures<TSignature>;
|
|
144
155
|
}) => TSignature['defaultizedParams'];
|
|
145
156
|
getInitialState?: (params: TreeViewUsedDefaultizedParams<TSignature>) => TSignature['state'];
|
|
157
|
+
getInitialCache?: () => TSignature['cache'];
|
|
146
158
|
models?: TreeViewModelsInitializer<TSignature>;
|
|
147
159
|
params: Record<keyof TSignature['params'], true>;
|
|
148
160
|
itemPlugin?: TreeViewItemPlugin;
|
|
@@ -157,6 +169,6 @@ export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
|
|
|
157
169
|
* @param {{ children: React.ReactNode; }} params The params of the root.
|
|
158
170
|
* @returns {React.ReactNode} The wrapped root.
|
|
159
171
|
*/
|
|
160
|
-
wrapRoot?: TreeRootWrapper
|
|
172
|
+
wrapRoot?: TreeRootWrapper;
|
|
161
173
|
};
|
|
162
174
|
export {};
|
|
@@ -24,3 +24,9 @@ export interface TreeViewModel<TValue> {
|
|
|
24
24
|
export type TreeViewInstance<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'instance'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
|
|
25
25
|
export type TreeViewPublicAPI<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'publicAPI'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
|
|
26
26
|
export type TreeViewExperimentalFeatures<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TSignatures, ...TOptionalSignatures], 'experimentalFeatures'>;
|
|
27
|
+
export type TreeViewStateCacheKey = {
|
|
28
|
+
id: number;
|
|
29
|
+
};
|
|
30
|
+
export type TreeViewState<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'state'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'state'>> & {
|
|
31
|
+
cacheKey: TreeViewStateCacheKey;
|
|
32
|
+
};
|
|
@@ -1,30 +1,48 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import * as React from 'react';
|
|
3
2
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
3
|
+
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
4
|
+
import { selectorIsItemExpandable, selectorIsItemExpanded } from "./useTreeViewExpansion.selectors.js";
|
|
5
|
+
import { createExpandedItemsMap, getExpansionTrigger } from "./useTreeViewExpansion.utils.js";
|
|
6
|
+
import { selectorItemMeta, selectorItemOrderedChildrenIds } from "../useTreeViewItems/useTreeViewItems.selectors.js";
|
|
4
7
|
export const useTreeViewExpansion = ({
|
|
5
8
|
instance,
|
|
9
|
+
store,
|
|
6
10
|
params,
|
|
7
11
|
models
|
|
8
12
|
}) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
useEnhancedEffect(() => {
|
|
14
|
+
store.update(prevState => _extends({}, prevState, {
|
|
15
|
+
expansion: _extends({}, prevState.expansion, {
|
|
16
|
+
expandedItemsMap: createExpandedItemsMap(models.expandedItems.value)
|
|
17
|
+
})
|
|
18
|
+
}));
|
|
19
|
+
}, [store, models.expandedItems.value]);
|
|
20
|
+
useEnhancedEffect(() => {
|
|
21
|
+
store.update(prevState => {
|
|
22
|
+
const newExpansionTrigger = getExpansionTrigger({
|
|
23
|
+
isItemEditable: params.isItemEditable,
|
|
24
|
+
expansionTrigger: params.expansionTrigger
|
|
25
|
+
});
|
|
26
|
+
if (prevState.expansion.expansionTrigger === newExpansionTrigger) {
|
|
27
|
+
return prevState;
|
|
28
|
+
}
|
|
29
|
+
return _extends({}, prevState, {
|
|
30
|
+
expansion: _extends({}, prevState.expansion, {
|
|
31
|
+
expansionTrigger: newExpansionTrigger
|
|
32
|
+
})
|
|
33
|
+
});
|
|
13
34
|
});
|
|
14
|
-
|
|
15
|
-
}, [models.expandedItems.value]);
|
|
35
|
+
}, [store, params.isItemEditable, params.expansionTrigger]);
|
|
16
36
|
const setExpandedItems = (event, value) => {
|
|
17
37
|
params.onExpandedItemsChange?.(event, value);
|
|
18
38
|
models.expandedItems.setControlledValue(value);
|
|
19
39
|
};
|
|
20
|
-
const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
|
|
21
|
-
const isItemExpandable = React.useCallback(itemId => !!instance.getItemMeta(itemId)?.expandable, [instance]);
|
|
22
40
|
const toggleItemExpansion = useEventCallback((event, itemId) => {
|
|
23
|
-
const isExpandedBefore =
|
|
41
|
+
const isExpandedBefore = selectorIsItemExpanded(store.value, itemId);
|
|
24
42
|
instance.setItemExpansion(event, itemId, !isExpandedBefore);
|
|
25
43
|
});
|
|
26
44
|
const setItemExpansion = useEventCallback((event, itemId, isExpanded) => {
|
|
27
|
-
const isExpandedBefore =
|
|
45
|
+
const isExpandedBefore = selectorIsItemExpanded(store.value, itemId);
|
|
28
46
|
if (isExpandedBefore === isExpanded) {
|
|
29
47
|
return;
|
|
30
48
|
}
|
|
@@ -40,9 +58,12 @@ export const useTreeViewExpansion = ({
|
|
|
40
58
|
setExpandedItems(event, newExpanded);
|
|
41
59
|
});
|
|
42
60
|
const expandAllSiblings = (event, itemId) => {
|
|
43
|
-
const itemMeta =
|
|
44
|
-
|
|
45
|
-
|
|
61
|
+
const itemMeta = selectorItemMeta(store.value, itemId);
|
|
62
|
+
if (itemMeta == null) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const siblings = selectorItemOrderedChildrenIds(store.value, itemMeta.parentId);
|
|
66
|
+
const diff = siblings.filter(child => selectorIsItemExpandable(store.value, child) && !selectorIsItemExpanded(store.value, child));
|
|
46
67
|
const newExpanded = models.expandedItems.value.concat(diff);
|
|
47
68
|
if (diff.length > 0) {
|
|
48
69
|
if (params.onItemExpansionToggle) {
|
|
@@ -53,30 +74,14 @@ export const useTreeViewExpansion = ({
|
|
|
53
74
|
setExpandedItems(event, newExpanded);
|
|
54
75
|
}
|
|
55
76
|
};
|
|
56
|
-
const expansionTrigger = React.useMemo(() => {
|
|
57
|
-
if (params.expansionTrigger) {
|
|
58
|
-
return params.expansionTrigger;
|
|
59
|
-
}
|
|
60
|
-
if (instance.isTreeViewEditable) {
|
|
61
|
-
return 'iconContainer';
|
|
62
|
-
}
|
|
63
|
-
return 'content';
|
|
64
|
-
}, [params.expansionTrigger, instance.isTreeViewEditable]);
|
|
65
77
|
return {
|
|
66
78
|
publicAPI: {
|
|
67
79
|
setItemExpansion
|
|
68
80
|
},
|
|
69
81
|
instance: {
|
|
70
|
-
isItemExpanded,
|
|
71
|
-
isItemExpandable,
|
|
72
82
|
setItemExpansion,
|
|
73
83
|
toggleItemExpansion,
|
|
74
84
|
expandAllSiblings
|
|
75
|
-
},
|
|
76
|
-
contextValue: {
|
|
77
|
-
expansion: {
|
|
78
|
-
expansionTrigger
|
|
79
|
-
}
|
|
80
85
|
}
|
|
81
86
|
};
|
|
82
87
|
};
|
|
@@ -91,6 +96,12 @@ useTreeViewExpansion.getDefaultizedParams = ({
|
|
|
91
96
|
}) => _extends({}, params, {
|
|
92
97
|
defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
|
|
93
98
|
});
|
|
99
|
+
useTreeViewExpansion.getInitialState = params => ({
|
|
100
|
+
expansion: {
|
|
101
|
+
expandedItemsMap: createExpandedItemsMap(params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems),
|
|
102
|
+
expansionTrigger: getExpansionTrigger(params)
|
|
103
|
+
}
|
|
104
|
+
});
|
|
94
105
|
useTreeViewExpansion.params = {
|
|
95
106
|
expandedItems: true,
|
|
96
107
|
defaultExpandedItems: true,
|