@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.
Files changed (159) hide show
  1. package/CHANGELOG.md +651 -6
  2. package/README.md +2 -2
  3. package/RichTreeView/RichTreeView.js +2 -4
  4. package/RichTreeView/RichTreeView.types.d.ts +5 -18
  5. package/SimpleTreeView/SimpleTreeView.types.d.ts +2 -2
  6. package/TreeItem/TreeItem.js +4 -4
  7. package/TreeItem/TreeItem.types.d.ts +4 -2
  8. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +1 -1
  9. package/TreeItemIcon/TreeItemIcon.types.d.ts +1 -1
  10. package/TreeItemProvider/TreeItemProvider.d.ts +2 -4
  11. package/TreeItemProvider/TreeItemProvider.js +26 -11
  12. package/TreeItemProvider/TreeItemProvider.types.d.ts +1 -0
  13. package/hooks/index.d.ts +1 -0
  14. package/hooks/index.js +2 -1
  15. package/hooks/useTreeItemModel.d.ts +2 -0
  16. package/hooks/useTreeItemModel.js +11 -0
  17. package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +2 -1
  18. package/hooks/useTreeItemUtils/useTreeItemUtils.js +31 -15
  19. package/hooks/useTreeViewApiRef.d.ts +1 -0
  20. package/index.js +1 -1
  21. package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -1
  22. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +2 -1
  23. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  24. package/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  25. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  26. package/internals/components/RichTreeViewItems.d.ts +3 -5
  27. package/internals/components/RichTreeViewItems.js +42 -30
  28. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
  29. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +36 -0
  30. package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
  31. package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -5
  32. package/internals/hooks/useSelector.d.ts +4 -0
  33. package/internals/hooks/useSelector.js +6 -0
  34. package/internals/index.d.ts +6 -1
  35. package/internals/index.js +5 -1
  36. package/internals/models/itemPlugin.d.ts +5 -5
  37. package/internals/models/plugin.d.ts +20 -8
  38. package/internals/models/treeView.d.ts +6 -0
  39. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  40. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +124 -0
  41. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
  42. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +6 -14
  43. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +1 -0
  44. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
  45. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  46. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +182 -0
  47. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
  48. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -16
  49. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
  50. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
  51. package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
  52. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -98
  53. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +718 -0
  54. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
  55. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +15 -52
  56. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
  57. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  58. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  59. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  60. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +74 -0
  61. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
  62. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +7 -24
  63. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
  64. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -34
  65. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +32 -0
  66. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
  67. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +6 -6
  68. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +6 -6
  69. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +23 -13
  70. package/internals/useTreeView/useTreeView.js +30 -17
  71. package/internals/useTreeView/useTreeView.types.d.ts +2 -3
  72. package/internals/useTreeView/useTreeViewBuildContext.d.ts +3 -1
  73. package/internals/useTreeView/useTreeViewBuildContext.js +24 -18
  74. package/internals/utils/TreeViewStore.d.ts +12 -0
  75. package/internals/utils/TreeViewStore.js +24 -0
  76. package/internals/utils/selectors.d.ts +9 -0
  77. package/internals/utils/selectors.js +37 -0
  78. package/internals/utils/tree.d.ts +8 -8
  79. package/internals/utils/tree.js +51 -43
  80. package/models/items.d.ts +3 -2
  81. package/modern/RichTreeView/RichTreeView.js +2 -4
  82. package/modern/TreeItem/TreeItem.js +4 -4
  83. package/modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +1 -1
  84. package/modern/TreeItemProvider/TreeItemProvider.js +26 -11
  85. package/modern/hooks/index.js +2 -1
  86. package/modern/hooks/useTreeItemModel.js +11 -0
  87. package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +31 -15
  88. package/modern/index.js +1 -1
  89. package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  90. package/modern/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  91. package/modern/internals/components/RichTreeViewItems.js +42 -30
  92. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
  93. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
  94. package/modern/internals/hooks/useSelector.js +6 -0
  95. package/modern/internals/index.js +5 -1
  96. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  97. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
  98. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
  99. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  100. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
  101. package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
  102. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -98
  103. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
  104. package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
  105. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  106. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  107. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  108. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
  109. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
  110. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -34
  111. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
  112. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +23 -13
  113. package/modern/internals/useTreeView/useTreeView.js +30 -17
  114. package/modern/internals/useTreeView/useTreeViewBuildContext.js +24 -18
  115. package/modern/internals/utils/TreeViewStore.js +24 -0
  116. package/modern/internals/utils/selectors.js +37 -0
  117. package/modern/internals/utils/tree.js +51 -43
  118. package/modern/useTreeItem/useTreeItem.js +26 -11
  119. package/node/RichTreeView/RichTreeView.js +2 -4
  120. package/node/TreeItem/TreeItem.js +4 -4
  121. package/node/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +2 -2
  122. package/node/TreeItemProvider/TreeItemProvider.js +26 -10
  123. package/node/hooks/index.js +8 -1
  124. package/node/hooks/useTreeItemModel.js +17 -0
  125. package/node/hooks/useTreeItemUtils/useTreeItemUtils.js +32 -15
  126. package/node/index.js +1 -1
  127. package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
  128. package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -2
  129. package/node/internals/components/RichTreeViewItems.js +42 -30
  130. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +12 -13
  131. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +15 -0
  132. package/node/internals/hooks/useSelector.js +13 -0
  133. package/node/internals/index.js +47 -1
  134. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
  135. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +23 -0
  136. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +14 -0
  137. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
  138. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +40 -0
  139. package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +16 -13
  140. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +60 -100
  141. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +109 -0
  142. package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +30 -27
  143. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
  144. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
  145. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
  146. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +32 -0
  147. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +8 -6
  148. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +46 -35
  149. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +15 -0
  150. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +24 -14
  151. package/node/internals/useTreeView/useTreeView.js +30 -17
  152. package/node/internals/useTreeView/useTreeViewBuildContext.js +25 -18
  153. package/node/internals/utils/TreeViewStore.js +31 -0
  154. package/node/internals/utils/selectors.js +44 -0
  155. package/node/internals/utils/tree.js +51 -43
  156. package/node/useTreeItem/useTreeItem.js +26 -11
  157. package/package.json +6 -4
  158. package/useTreeItem/useTreeItem.js +26 -11
  159. package/useTreeItem/useTreeItem.types.d.ts +9 -0
@@ -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
- state,
7
- setState
8
+ store
8
9
  }) => {
9
10
  React.useEffect(() => {
10
- setState(prevState => {
11
- if (prevState.id.treeId === params.id && prevState.id.treeId !== undefined) {
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
- }, [setState, params.id]);
21
- const treeId = params.id ?? state.id.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: id ?? undefined
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 {};
@@ -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
+ };
@@ -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 type { TreeViewPlugin, TreeViewPluginSignature, ConvertPluginsIntoSignatures, MergeSignaturesProperty, TreeViewPublicAPI, TreeViewExperimentalFeatures, TreeViewItemMeta, TreeViewInstance, TreeViewItemPlugin, } from './models';
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';
@@ -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 { isTargetInDescendants } from "./utils/tree.js";
19
+ export { createSelector } from "./utils/selectors.js";
20
+ export { isTargetInDescendants } from "./utils/tree.js";
21
+ export { TreeViewStore } from "./utils/TreeViewStore.js";
@@ -1,8 +1,8 @@
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
7
  rootRefObject: React.MutableRefObject<HTMLLIElement | null>;
8
8
  contentRefObject: React.MutableRefObject<HTMLDivElement | null>;
@@ -36,8 +36,8 @@ export interface TreeViewItemPluginResponse {
36
36
  */
37
37
  propsEnhancers?: TreeViewItemPluginSlotPropsEnhancers;
38
38
  }
39
- export interface TreeViewItemPluginOptions<TProps extends {}> extends Omit<TreeViewItemPluginResponse, 'propsEnhancers'> {
40
- props: TProps;
39
+ export interface TreeViewItemPluginOptions extends Omit<TreeViewItemPluginResponse, 'propsEnhancers'> {
40
+ props: TreeItemProps;
41
41
  }
42
- export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions<TreeItemProps>) => void | TreeViewItemPluginResponse;
42
+ export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions) => void | TreeViewItemPluginResponse;
43
43
  export {};
@@ -1,20 +1,20 @@
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
- setState: React.Dispatch<React.SetStateAction<TreeViewUsedState<TSignature>>>;
17
+ store: TreeViewUsedStore<TSignature>;
18
18
  rootRef: React.RefObject<HTMLUListElement>;
19
19
  plugins: TreeViewPlugin<TreeViewAnyPluginSignature>[];
20
20
  }
@@ -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;
@@ -120,8 +125,14 @@ export type TreeViewUsedInstance<TSignature extends TreeViewAnyPluginSignature>
120
125
  */
121
126
  $$signature: TSignature;
122
127
  };
123
- type TreeViewUsedState<TSignature extends TreeViewAnyPluginSignature> = PluginPropertyWithDependencies<TSignature, 'state'>;
124
- type TreeViewUsedExperimentalFeatures<TSignature extends TreeViewAnyPluginSignature> = TreeViewExperimentalFeatures<[TSignature, ...TSignature['dependencies']]>;
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<TSignatures extends readonly TreeViewAnyPluginSignature[]> = (params: {
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<[TSignature, ...TSignature['dependencies']]>;
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,35 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import useEventCallback from '@mui/utils/useEventCallback';
4
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
5
+ import { selectorIsItemExpandable, selectorIsItemExpanded } from "./useTreeViewExpansion.selectors.js";
6
+ import { createExpandedItemsMap } from "./useTreeViewExpansion.utils.js";
7
+ import { selectorItemMeta, selectorItemOrderedChildrenIds } from "../useTreeViewItems/useTreeViewItems.selectors.js";
4
8
  export const useTreeViewExpansion = ({
5
9
  instance,
10
+ store,
6
11
  params,
7
- models
12
+ models,
13
+ experimentalFeatures
8
14
  }) => {
9
- const expandedItemsMap = React.useMemo(() => {
10
- const temp = new Map();
11
- models.expandedItems.value.forEach(id => {
12
- temp.set(id, true);
13
- });
14
- return temp;
15
- }, [models.expandedItems.value]);
15
+ const isTreeViewEditable = Boolean(params.isItemEditable) && !!experimentalFeatures.labelEditing;
16
+ useEnhancedEffect(() => {
17
+ store.update(prevState => _extends({}, prevState, {
18
+ expansion: {
19
+ expandedItemsMap: createExpandedItemsMap(models.expandedItems.value)
20
+ }
21
+ }));
22
+ }, [store, models.expandedItems.value]);
16
23
  const setExpandedItems = (event, value) => {
17
24
  params.onExpandedItemsChange?.(event, value);
18
25
  models.expandedItems.setControlledValue(value);
19
26
  };
20
- const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
21
- const isItemExpandable = React.useCallback(itemId => !!instance.getItemMeta(itemId)?.expandable, [instance]);
22
27
  const toggleItemExpansion = useEventCallback((event, itemId) => {
23
- const isExpandedBefore = instance.isItemExpanded(itemId);
28
+ const isExpandedBefore = selectorIsItemExpanded(store.value, itemId);
24
29
  instance.setItemExpansion(event, itemId, !isExpandedBefore);
25
30
  });
26
31
  const setItemExpansion = useEventCallback((event, itemId, isExpanded) => {
27
- const isExpandedBefore = instance.isItemExpanded(itemId);
32
+ const isExpandedBefore = selectorIsItemExpanded(store.value, itemId);
28
33
  if (isExpandedBefore === isExpanded) {
29
34
  return;
30
35
  }
@@ -40,9 +45,12 @@ export const useTreeViewExpansion = ({
40
45
  setExpandedItems(event, newExpanded);
41
46
  });
42
47
  const expandAllSiblings = (event, itemId) => {
43
- const itemMeta = instance.getItemMeta(itemId);
44
- const siblings = instance.getItemOrderedChildrenIds(itemMeta.parentId);
45
- const diff = siblings.filter(child => instance.isItemExpandable(child) && !instance.isItemExpanded(child));
48
+ const itemMeta = selectorItemMeta(store.value, itemId);
49
+ if (itemMeta == null) {
50
+ return;
51
+ }
52
+ const siblings = selectorItemOrderedChildrenIds(store.value, itemMeta.parentId);
53
+ const diff = siblings.filter(child => selectorIsItemExpandable(store.value, child) && !selectorIsItemExpanded(store.value, child));
46
54
  const newExpanded = models.expandedItems.value.concat(diff);
47
55
  if (diff.length > 0) {
48
56
  if (params.onItemExpansionToggle) {
@@ -57,27 +65,26 @@ export const useTreeViewExpansion = ({
57
65
  if (params.expansionTrigger) {
58
66
  return params.expansionTrigger;
59
67
  }
60
- if (instance.isTreeViewEditable) {
68
+ if (isTreeViewEditable) {
61
69
  return 'iconContainer';
62
70
  }
63
71
  return 'content';
64
- }, [params.expansionTrigger, instance.isTreeViewEditable]);
72
+ }, [params.expansionTrigger, isTreeViewEditable]);
73
+ const pluginContextValue = React.useMemo(() => ({
74
+ expansion: {
75
+ expansionTrigger
76
+ }
77
+ }), [expansionTrigger]);
65
78
  return {
66
79
  publicAPI: {
67
80
  setItemExpansion
68
81
  },
69
82
  instance: {
70
- isItemExpanded,
71
- isItemExpandable,
72
83
  setItemExpansion,
73
84
  toggleItemExpansion,
74
85
  expandAllSiblings
75
86
  },
76
- contextValue: {
77
- expansion: {
78
- expansionTrigger
79
- }
80
- }
87
+ contextValue: pluginContextValue
81
88
  };
82
89
  };
83
90
  useTreeViewExpansion.models = {
@@ -91,6 +98,11 @@ useTreeViewExpansion.getDefaultizedParams = ({
91
98
  }) => _extends({}, params, {
92
99
  defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
93
100
  });
101
+ useTreeViewExpansion.getInitialState = params => ({
102
+ expansion: {
103
+ expandedItemsMap: createExpandedItemsMap(params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems)
104
+ }
105
+ });
94
106
  useTreeViewExpansion.params = {
95
107
  expandedItems: true,
96
108
  defaultExpandedItems: true,
@@ -0,0 +1,124 @@
1
+ import { TreeViewRootSelector } from '../../utils/selectors';
2
+ import { UseTreeViewExpansionSignature } from './useTreeViewExpansion.types';
3
+ /**
4
+ * Check if an item is expanded.
5
+ * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
6
+ * @returns {boolean} `true` if the item is expanded, `false` otherwise.
7
+ */
8
+ export declare const selectorIsItemExpanded: ((state: any, itemId: string) => boolean) & {
9
+ clearCache: () => void;
10
+ resultsCount: () => number;
11
+ resetResultsCount: () => void;
12
+ } & {
13
+ resultFunc: (resultFuncArgs_0: {
14
+ expandedItemsMap: Map<string, true>;
15
+ }, resultFuncArgs_1: string) => boolean;
16
+ memoizedResultFunc: ((resultFuncArgs_0: {
17
+ expandedItemsMap: Map<string, true>;
18
+ }, resultFuncArgs_1: string) => boolean) & {
19
+ clearCache: () => void;
20
+ resultsCount: () => number;
21
+ resetResultsCount: () => void;
22
+ };
23
+ lastResult: () => boolean;
24
+ dependencies: [TreeViewRootSelector<UseTreeViewExpansionSignature>, (_: any, itemId: string) => string];
25
+ recomputations: () => number;
26
+ resetRecomputations: () => void;
27
+ dependencyRecomputations: () => number;
28
+ resetDependencyRecomputations: () => void;
29
+ } & {
30
+ argsMemoize: typeof import("reselect").weakMapMemoize;
31
+ memoize: typeof import("reselect").weakMapMemoize;
32
+ };
33
+ /**
34
+ * Check if an item is expandable.
35
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
36
+ * @returns {boolean} `true` if the item is expandable, `false` otherwise.
37
+ */
38
+ export declare const selectorIsItemExpandable: ((state: any, itemId: string | null) => boolean) & {
39
+ clearCache: () => void;
40
+ resultsCount: () => number;
41
+ resetResultsCount: () => void;
42
+ } & {
43
+ resultFunc: (resultFuncArgs_0: import("../..").TreeViewItemMeta | null) => boolean;
44
+ memoizedResultFunc: ((resultFuncArgs_0: import("../..").TreeViewItemMeta | null) => boolean) & {
45
+ clearCache: () => void;
46
+ resultsCount: () => number;
47
+ resetResultsCount: () => void;
48
+ };
49
+ lastResult: () => boolean;
50
+ dependencies: [((state: any, itemId: string | null) => import("../..").TreeViewItemMeta | null) & {
51
+ clearCache: () => void;
52
+ resultsCount: () => number;
53
+ resetResultsCount: () => void;
54
+ } & {
55
+ resultFunc: (resultFuncArgs_0: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup, resultFuncArgs_1: string | null) => import("../..").TreeViewItemMeta | null;
56
+ memoizedResultFunc: ((resultFuncArgs_0: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup, resultFuncArgs_1: string | null) => import("../..").TreeViewItemMeta | null) & {
57
+ clearCache: () => void;
58
+ resultsCount: () => number;
59
+ resetResultsCount: () => void;
60
+ };
61
+ lastResult: () => import("../..").TreeViewItemMeta | null;
62
+ dependencies: [((state: import("../../corePlugins/useTreeViewId/useTreeViewId.types").UseTreeViewIdState & import("../useTreeViewItems").UseTreeViewItemsState<import("../../..").TreeViewDefaultItemModelProperties> & Partial<{}> & {
63
+ cacheKey: import("../../models").TreeViewStateCacheKey;
64
+ }) => import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup) & {
65
+ clearCache: () => void;
66
+ resultsCount: () => number;
67
+ resetResultsCount: () => void;
68
+ } & {
69
+ resultFunc: (resultFuncArgs_0: {
70
+ disabledItemsFocusable: boolean;
71
+ itemModelLookup: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemModelLookup<import("../../..").TreeViewDefaultItemModelProperties>;
72
+ itemMetaLookup: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup;
73
+ itemOrderedChildrenIdsLookup: {
74
+ [parentItemId: string]: string[];
75
+ };
76
+ itemChildrenIndexesLookup: {
77
+ [parentItemId: string]: {
78
+ [itemId: string]: number;
79
+ };
80
+ };
81
+ }) => import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup;
82
+ memoizedResultFunc: ((resultFuncArgs_0: {
83
+ disabledItemsFocusable: boolean;
84
+ itemModelLookup: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemModelLookup<import("../../..").TreeViewDefaultItemModelProperties>;
85
+ itemMetaLookup: import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup;
86
+ itemOrderedChildrenIdsLookup: {
87
+ [parentItemId: string]: string[];
88
+ };
89
+ itemChildrenIndexesLookup: {
90
+ [parentItemId: string]: {
91
+ [itemId: string]: number;
92
+ };
93
+ };
94
+ }) => import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup) & {
95
+ clearCache: () => void;
96
+ resultsCount: () => number;
97
+ resetResultsCount: () => void;
98
+ };
99
+ lastResult: () => import("../useTreeViewItems/useTreeViewItems.types").TreeViewItemMetaLookup;
100
+ dependencies: [TreeViewRootSelector<import("../useTreeViewItems").UseTreeViewItemsSignature>];
101
+ recomputations: () => number;
102
+ resetRecomputations: () => void;
103
+ dependencyRecomputations: () => number;
104
+ resetDependencyRecomputations: () => void;
105
+ } & {
106
+ argsMemoize: typeof import("reselect").weakMapMemoize;
107
+ memoize: typeof import("reselect").weakMapMemoize;
108
+ }, (_: any, itemId: string | null) => string | null];
109
+ recomputations: () => number;
110
+ resetRecomputations: () => void;
111
+ dependencyRecomputations: () => number;
112
+ resetDependencyRecomputations: () => void;
113
+ } & {
114
+ argsMemoize: typeof import("reselect").weakMapMemoize;
115
+ memoize: typeof import("reselect").weakMapMemoize;
116
+ }];
117
+ recomputations: () => number;
118
+ resetRecomputations: () => void;
119
+ dependencyRecomputations: () => number;
120
+ resetDependencyRecomputations: () => void;
121
+ } & {
122
+ argsMemoize: typeof import("reselect").weakMapMemoize;
123
+ memoize: typeof import("reselect").weakMapMemoize;
124
+ };
@@ -0,0 +1,17 @@
1
+ import { createSelector } from "../../utils/selectors.js";
2
+ import { selectorItemMeta } from "../useTreeViewItems/useTreeViewItems.selectors.js";
3
+ const selectorExpansion = state => state.expansion;
4
+
5
+ /**
6
+ * Check if an item is expanded.
7
+ * @param {TreeViewState<[UseTreeViewExpansionSignature]>} state The state of the tree view.
8
+ * @returns {boolean} `true` if the item is expanded, `false` otherwise.
9
+ */
10
+ export const selectorIsItemExpanded = createSelector([selectorExpansion, (_, itemId) => itemId], (expansionState, itemId) => expansionState.expandedItemsMap.has(itemId));
11
+
12
+ /**
13
+ * Check if an item is expandable.
14
+ * @param {TreeViewState<[UseTreeViewItemsSignature]>} state The state of the tree view.
15
+ * @returns {boolean} `true` if the item is expandable, `false` otherwise.
16
+ */
17
+ export const selectorIsItemExpandable = createSelector([selectorItemMeta], itemMeta => itemMeta?.expandable ?? false);
@@ -14,20 +14,6 @@ export interface UseTreeViewExpansionPublicAPI {
14
14
  setItemExpansion: (event: React.SyntheticEvent, itemId: string, isExpanded: boolean) => void;
15
15
  }
16
16
  export interface UseTreeViewExpansionInstance extends UseTreeViewExpansionPublicAPI {
17
- /**
18
- * Check if an item is expanded.
19
- * @param {TreeViewItemId} itemId The id of the item to check.
20
- * @returns {boolean} `true` if the item is expanded, `false` otherwise.
21
- */
22
- isItemExpanded: (itemId: TreeViewItemId) => boolean;
23
- /**
24
- * Check if an item is expandable.
25
- * Currently, an item is expandable if it has children.
26
- * In the future, the user should be able to flag an item as expandable even if it has no loaded children to support children lazy loading.
27
- * @param {TreeViewItemId} itemId The id of the item to check.
28
- * @returns {boolean} `true` if the item can be expanded, `false` otherwise.
29
- */
30
- isItemExpandable: (itemId: TreeViewItemId) => boolean;
31
17
  /**
32
18
  * Toggle the current expansion of an item.
33
19
  * If it is expanded, it will be collapsed, and vice versa.
@@ -74,6 +60,11 @@ export interface UseTreeViewExpansionParameters {
74
60
  expansionTrigger?: 'content' | 'iconContainer';
75
61
  }
76
62
  export type UseTreeViewExpansionDefaultizedParameters = DefaultizedProps<UseTreeViewExpansionParameters, 'defaultExpandedItems'>;
63
+ export interface UseTreeViewExpansionState {
64
+ expansion: {
65
+ expandedItemsMap: Map<string, true>;
66
+ };
67
+ }
77
68
  interface UseTreeViewExpansionContextValue {
78
69
  expansion: Pick<UseTreeViewExpansionParameters, 'expansionTrigger'>;
79
70
  }
@@ -83,6 +74,7 @@ export type UseTreeViewExpansionSignature = TreeViewPluginSignature<{
83
74
  instance: UseTreeViewExpansionInstance;
84
75
  publicAPI: UseTreeViewExpansionPublicAPI;
85
76
  modelNames: 'expandedItems';
77
+ state: UseTreeViewExpansionState;
86
78
  contextValue: UseTreeViewExpansionContextValue;
87
79
  dependencies: [UseTreeViewItemsSignature];
88
80
  optionalDependencies: [UseTreeViewLabelSignature];
@@ -0,0 +1 @@
1
+ export declare const createExpandedItemsMap: (expandedItems: string[]) => Map<string, true>;
@@ -0,0 +1,7 @@
1
+ export const createExpandedItemsMap = expandedItems => {
2
+ const expandedItemsMap = new Map();
3
+ expandedItems.forEach(id => {
4
+ expandedItemsMap.set(id, true);
5
+ });
6
+ return expandedItemsMap;
7
+ };