@mui/x-tree-view 7.0.0-alpha.8 → 7.0.0-beta.0
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 +508 -30
- package/README.md +3 -3
- package/RichTreeView/RichTreeView.js +10 -36
- package/RichTreeView/RichTreeView.types.d.ts +6 -9
- package/RichTreeView/index.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.js +12 -55
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +5 -3
- package/SimpleTreeView/SimpleTreeView.types.d.ts +8 -7
- package/SimpleTreeView/index.d.ts +1 -1
- package/TreeItem/TreeItem.js +62 -39
- package/TreeItem/TreeItem.types.d.ts +33 -17
- package/TreeItem/TreeItemContent.d.ts +0 -3
- package/TreeItem/TreeItemContent.js +2 -5
- package/TreeItem/index.d.ts +2 -2
- package/TreeItem/index.js +1 -1
- package/TreeItem/{useTreeItem.d.ts → useTreeItemState.d.ts} +1 -1
- package/{modern/TreeItem/useTreeItem.js → TreeItem/useTreeItemState.js} +4 -2
- package/TreeView/TreeView.js +0 -39
- package/TreeView/TreeView.types.d.ts +5 -1
- package/TreeView/index.d.ts +1 -1
- package/icons/icons.d.ts +6 -0
- package/icons/icons.js +9 -0
- package/icons/index.d.ts +1 -0
- package/icons/index.js +1 -0
- package/icons/package.json +6 -0
- package/index.d.ts +1 -0
- package/index.js +3 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +4 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -11
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +3 -2
- package/internals/index.d.ts +15 -0
- package/internals/index.js +4 -0
- package/internals/models/helpers.d.ts +7 -1
- package/internals/models/plugin.d.ts +64 -20
- package/internals/models/treeView.d.ts +1 -2
- package/internals/package.json +6 -0
- package/internals/plugins/defaultPlugins.d.ts +6 -4
- package/internals/plugins/defaultPlugins.js +2 -2
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +8 -10
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -3
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +12 -6
- package/internals/plugins/useTreeViewIcons/index.d.ts +2 -0
- package/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.d.ts +3 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +43 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +6 -2
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +6 -4
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +9 -6
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +10 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -5
- package/internals/useTreeView/useTreeView.js +7 -3
- package/internals/useTreeView/useTreeView.types.d.ts +6 -6
- package/internals/useTreeView/useTreeViewModels.js +10 -11
- package/internals/utils/extractPluginParamsFromProps.d.ts +8 -5
- package/internals/utils/extractPluginParamsFromProps.js +17 -6
- package/legacy/RichTreeView/RichTreeView.js +3 -27
- package/legacy/SimpleTreeView/SimpleTreeView.js +4 -46
- package/legacy/TreeItem/TreeItem.js +63 -39
- package/legacy/TreeItem/TreeItemContent.js +9 -12
- package/legacy/TreeItem/index.js +1 -1
- package/legacy/TreeItem/{useTreeItem.js → useTreeItemState.js} +2 -2
- package/legacy/TreeView/TreeView.js +0 -39
- package/legacy/icons/icons.js +9 -0
- package/legacy/icons/index.js +1 -0
- package/legacy/index.js +3 -2
- package/legacy/internals/index.js +4 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -2
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +10 -10
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -6
- package/legacy/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +21 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +3 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +14 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -6
- package/legacy/internals/useTreeView/useTreeView.js +6 -2
- package/legacy/internals/useTreeView/useTreeViewModels.js +10 -11
- package/legacy/internals/utils/extractPluginParamsFromProps.js +11 -2
- package/modern/RichTreeView/RichTreeView.js +10 -36
- package/modern/SimpleTreeView/SimpleTreeView.js +12 -55
- package/modern/TreeItem/TreeItem.js +61 -39
- package/modern/TreeItem/TreeItemContent.js +2 -5
- package/modern/TreeItem/index.js +1 -1
- package/{TreeItem/useTreeItem.js → modern/TreeItem/useTreeItemState.js} +4 -2
- package/modern/TreeView/TreeView.js +0 -39
- package/modern/icons/icons.js +9 -0
- package/modern/icons/index.js +1 -0
- package/modern/index.js +3 -2
- package/modern/internals/index.js +4 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -2
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
- package/modern/internals/plugins/useTreeViewIcons/index.js +1 -0
- package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +22 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/modern/internals/useTreeView/useTreeView.js +7 -3
- package/modern/internals/useTreeView/useTreeViewModels.js +10 -11
- package/modern/internals/utils/extractPluginParamsFromProps.js +17 -6
- package/node/RichTreeView/RichTreeView.js +10 -36
- package/node/SimpleTreeView/SimpleTreeView.js +12 -55
- package/node/TreeItem/TreeItem.js +61 -39
- package/node/TreeItem/TreeItemContent.js +2 -5
- package/node/TreeItem/index.js +4 -4
- package/node/TreeItem/{useTreeItem.js → useTreeItemState.js} +5 -3
- package/node/TreeView/TreeView.js +0 -39
- package/node/icons/icons.js +17 -0
- package/node/icons/index.js +16 -0
- package/node/index.js +13 -1
- package/node/internals/index.js +33 -0
- package/node/internals/plugins/defaultPlugins.js +2 -2
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -10
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -3
- package/node/internals/plugins/useTreeViewIcons/index.js +12 -0
- package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +29 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +10 -5
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +11 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -5
- package/node/internals/useTreeView/useTreeView.js +7 -3
- package/node/internals/useTreeView/useTreeViewModels.js +10 -11
- package/node/internals/utils/extractPluginParamsFromProps.js +18 -6
- package/package.json +7 -7
- package/themeAugmentation/components.d.ts +4 -4
- package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +0 -2
- package/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +0 -3
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +0 -29
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -34
- package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -32
- package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +0 -12
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +0 -39
- /package/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/legacy/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/modern/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
- /package/node/internals/plugins/{useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js → useTreeViewIcons/useTreeViewIcons.types.js} +0 -0
package/TreeView/TreeView.js
CHANGED
|
@@ -72,34 +72,13 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
72
72
|
* Override or extend the styles applied to the component.
|
|
73
73
|
*/
|
|
74
74
|
classes: PropTypes.object,
|
|
75
|
-
/**
|
|
76
|
-
* className applied to the root element.
|
|
77
|
-
*/
|
|
78
75
|
className: PropTypes.string,
|
|
79
|
-
/**
|
|
80
|
-
* The default icon used to collapse the node.
|
|
81
|
-
*/
|
|
82
|
-
defaultCollapseIcon: PropTypes.node,
|
|
83
|
-
/**
|
|
84
|
-
* The default icon displayed next to a end node. This is applied to all
|
|
85
|
-
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
86
|
-
*/
|
|
87
|
-
defaultEndIcon: PropTypes.node,
|
|
88
76
|
/**
|
|
89
77
|
* Expanded node ids.
|
|
90
78
|
* Used when the item's expansion is not controlled.
|
|
91
79
|
* @default []
|
|
92
80
|
*/
|
|
93
81
|
defaultExpandedNodes: PropTypes.arrayOf(PropTypes.string),
|
|
94
|
-
/**
|
|
95
|
-
* The default icon used to expand the node.
|
|
96
|
-
*/
|
|
97
|
-
defaultExpandIcon: PropTypes.node,
|
|
98
|
-
/**
|
|
99
|
-
* The default icon displayed next to a parent node. This is applied to all
|
|
100
|
-
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
101
|
-
*/
|
|
102
|
-
defaultParentIcon: PropTypes.node,
|
|
103
82
|
/**
|
|
104
83
|
* Selected node ids. (Uncontrolled)
|
|
105
84
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
@@ -121,24 +100,6 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
121
100
|
* Used when the item's expansion is controlled.
|
|
122
101
|
*/
|
|
123
102
|
expandedNodes: PropTypes.arrayOf(PropTypes.string),
|
|
124
|
-
/**
|
|
125
|
-
* Used to determine the string label for a given item.
|
|
126
|
-
*
|
|
127
|
-
* @template R
|
|
128
|
-
* @param {R} item The item to check.
|
|
129
|
-
* @returns {string} The id of the item.
|
|
130
|
-
* @default `(item) => item.id`
|
|
131
|
-
*/
|
|
132
|
-
getItemId: PropTypes.func,
|
|
133
|
-
/**
|
|
134
|
-
* Used to determine the string label for a given item.
|
|
135
|
-
*
|
|
136
|
-
* @template R
|
|
137
|
-
* @param {R} item The item to check.
|
|
138
|
-
* @returns {string} The label of the item.
|
|
139
|
-
* @default `(item) => item.label`
|
|
140
|
-
*/
|
|
141
|
-
getItemLabel: PropTypes.func,
|
|
142
103
|
/**
|
|
143
104
|
* This prop is used to help implement the accessibility logic.
|
|
144
105
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { SimpleTreeViewProps } from '../SimpleTreeView';
|
|
1
|
+
import { SimpleTreeViewProps, SimpleTreeViewSlotProps, SimpleTreeViewSlots } from '../SimpleTreeView';
|
|
2
2
|
export interface TreeViewProps<Multiple extends boolean | undefined> extends SimpleTreeViewProps<Multiple> {
|
|
3
3
|
}
|
|
4
|
+
export interface TreeViewSlots extends SimpleTreeViewSlots {
|
|
5
|
+
}
|
|
6
|
+
export interface TreeViewSlotProps extends SimpleTreeViewSlotProps {
|
|
7
|
+
}
|
|
4
8
|
export type SingleSelectTreeViewProps = SimpleTreeViewProps<false>;
|
|
5
9
|
export type MultiSelectTreeViewProps = SimpleTreeViewProps<true>;
|
package/TreeView/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './TreeView';
|
|
2
2
|
export * from './treeViewClasses';
|
|
3
|
-
export type { TreeViewProps, SingleSelectTreeViewProps, MultiSelectTreeViewProps, } from './TreeView.types';
|
|
3
|
+
export type { TreeViewProps, SingleSelectTreeViewProps, MultiSelectTreeViewProps, TreeViewSlots, TreeViewSlotProps, } from './TreeView.types';
|
package/icons/icons.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const TreeViewExpandIcon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
2
|
+
muiName: string;
|
|
3
|
+
};
|
|
4
|
+
export declare const TreeViewCollapseIcon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
|
|
5
|
+
muiName: string;
|
|
6
|
+
};
|
package/icons/icons.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createSvgIcon } from '@mui/material/utils';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
export const TreeViewExpandIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
|
|
5
|
+
d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"
|
|
6
|
+
}), 'TreeViewExpandIcon');
|
|
7
|
+
export const TreeViewCollapseIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
|
|
8
|
+
d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"
|
|
9
|
+
}), 'TreeViewCollapseIcon');
|
package/icons/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './icons';
|
package/icons/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './icons';
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view v7.0.0-
|
|
2
|
+
* @mui/x-tree-view v7.0.0-beta.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
@@ -10,4 +10,5 @@ export * from './TreeView';
|
|
|
10
10
|
export * from './SimpleTreeView';
|
|
11
11
|
export * from './RichTreeView';
|
|
12
12
|
export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
|
|
13
|
-
export * from './models';
|
|
13
|
+
export * from './models';
|
|
14
|
+
export * from './icons';
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { TreeViewContextValue } from './TreeViewProvider.types';
|
|
3
2
|
/**
|
|
4
3
|
* @ignore - internal component.
|
|
5
4
|
*/
|
|
6
|
-
export declare const TreeViewContext: React.Context<
|
|
5
|
+
export declare const TreeViewContext: React.Context<{
|
|
6
|
+
instance: {};
|
|
7
|
+
runItemPlugins: (options: import("../models").TreeViewItemPluginOptions) => Required<import("../models").TreeViewItemPluginResponse>;
|
|
8
|
+
} | null>;
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { TreeViewAnyPluginSignature, TreeViewInstance, TreeViewItemPluginOptions, TreeViewItemPluginResponse } from '../models';
|
|
3
|
-
export
|
|
2
|
+
import { MergePluginsProperty, TreeViewAnyPluginSignature, TreeViewInstance, TreeViewItemPluginOptions, TreeViewItemPluginResponse } from '../models';
|
|
3
|
+
export type TreeViewContextValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> = MergePluginsProperty<TPlugins, 'contextValue'> & {
|
|
4
4
|
instance: TreeViewInstance<TPlugins>;
|
|
5
5
|
runItemPlugins: (options: TreeViewItemPluginOptions) => Required<TreeViewItemPluginResponse>;
|
|
6
|
-
|
|
7
|
-
disabledItemsFocusable: boolean;
|
|
8
|
-
icons: {
|
|
9
|
-
defaultCollapseIcon: React.ReactNode;
|
|
10
|
-
defaultExpandIcon: React.ReactNode;
|
|
11
|
-
defaultParentIcon: React.ReactNode;
|
|
12
|
-
defaultEndIcon: React.ReactNode;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
6
|
+
};
|
|
15
7
|
export interface TreeViewProviderProps<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
|
|
16
8
|
value: TreeViewContextValue<TPlugins>;
|
|
17
9
|
children: React.ReactNode;
|
package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts
CHANGED
|
@@ -17,5 +17,6 @@ export interface UseTreeViewInstanceEventsInstance {
|
|
|
17
17
|
*/
|
|
18
18
|
$$publishEvent: (eventName: string, params: any) => void;
|
|
19
19
|
}
|
|
20
|
-
export type UseTreeViewInstanceEventsSignature = TreeViewPluginSignature<{
|
|
21
|
-
|
|
20
|
+
export type UseTreeViewInstanceEventsSignature = TreeViewPluginSignature<{
|
|
21
|
+
instance: UseTreeViewInstanceEventsInstance;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { useTreeView } from './useTreeView';
|
|
2
|
+
export { TreeViewProvider } from './TreeViewProvider';
|
|
3
|
+
export type { TreeViewPlugin, TreeViewPluginSignature } from './models';
|
|
4
|
+
export { DEFAULT_TREE_VIEW_PLUGINS } from './plugins/defaultPlugins';
|
|
5
|
+
export type { DefaultTreeViewPlugins, DefaultTreeViewPluginSlots, DefaultTreeViewPluginSlotProps, } from './plugins/defaultPlugins';
|
|
6
|
+
export type { DefaultTreeViewPluginParameters } from './plugins/defaultPlugins';
|
|
7
|
+
export type { UseTreeViewExpansionSignature } from './plugins/useTreeViewExpansion';
|
|
8
|
+
export type { UseTreeViewSelectionSignature } from './plugins/useTreeViewSelection';
|
|
9
|
+
export type { UseTreeViewFocusSignature } from './plugins/useTreeViewFocus';
|
|
10
|
+
export type { UseTreeViewKeyboardNavigationSignature } from './plugins/useTreeViewKeyboardNavigation';
|
|
11
|
+
export type { UseTreeViewIdSignature } from './plugins/useTreeViewId';
|
|
12
|
+
export type { UseTreeViewIconsSignature } from './plugins/useTreeViewIcons';
|
|
13
|
+
export type { UseTreeViewNodesSignature } from './plugins/useTreeViewNodes';
|
|
14
|
+
export type { UseTreeViewJSXNodesSignature } from './plugins/useTreeViewJSXNodes';
|
|
15
|
+
export { extractPluginParamsFromProps } from './utils/extractPluginParamsFromProps';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { TreeViewAnyPluginSignature, TreeViewPlugin } from './plugin';
|
|
1
|
+
import type { TreeViewAnyPluginSignature, TreeViewPlugin } from './plugin';
|
|
2
2
|
export type DefaultizedProps<P extends {}, RequiredProps extends keyof P, AdditionalProps extends {} = {}> = Omit<P, RequiredProps | keyof AdditionalProps> & Required<Pick<P, RequiredProps>> & AdditionalProps;
|
|
3
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
4
|
+
export type OptionalIfEmpty<A extends string, B> = keyof B extends never ? Partial<Record<A, B>> : IsAny<B> extends true ? Partial<Record<A, B>> : Record<A, B>;
|
|
3
5
|
export type MergePluginsProperty<TPlugins extends readonly any[], TProperty extends keyof TreeViewAnyPluginSignature> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewAnyPluginSignature ? P[TProperty] & MergePluginsProperty<R, TProperty> : {} : {};
|
|
4
6
|
export type ConvertPluginsIntoSignatures<TPlugins extends readonly any[]> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewPlugin<infer TSignature> ? [TSignature, ...ConvertPluginsIntoSignatures<R>] : ConvertPluginsIntoSignatures<R> : [];
|
|
5
7
|
export interface MergePlugins<TPlugins extends readonly any[]> {
|
|
@@ -8,6 +10,10 @@ export interface MergePlugins<TPlugins extends readonly any[]> {
|
|
|
8
10
|
params: MergePluginsProperty<TPlugins, 'params'>;
|
|
9
11
|
defaultizedParams: MergePluginsProperty<TPlugins, 'defaultizedParams'>;
|
|
10
12
|
dependantPlugins: MergePluginsProperty<TPlugins, 'dependantPlugins'>;
|
|
13
|
+
contextValue: MergePluginsProperty<TPlugins, 'contextValue'>;
|
|
14
|
+
slots: MergePluginsProperty<TPlugins, 'slots'>;
|
|
15
|
+
slotProps: MergePluginsProperty<TPlugins, 'slotProps'>;
|
|
11
16
|
events: MergePluginsProperty<TPlugins, 'events'>;
|
|
12
17
|
models: MergePluginsProperty<TPlugins, 'models'>;
|
|
13
18
|
}
|
|
19
|
+
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { EventHandlers } from '@mui/base/utils';
|
|
3
3
|
import { TreeViewModel } from './treeView';
|
|
4
|
-
import type {
|
|
5
|
-
import type { MergePluginsProperty } from './helpers';
|
|
4
|
+
import type { MergePluginsProperty, OptionalIfEmpty } from './helpers';
|
|
6
5
|
import { TreeViewEventLookupElement } from './events';
|
|
7
6
|
import type { TreeViewCorePluginsSignature } from '../corePlugins';
|
|
8
7
|
import type { TreeItemProps } from '../../TreeItem';
|
|
@@ -10,32 +9,71 @@ export interface TreeViewPluginOptions<TSignature extends TreeViewAnyPluginSigna
|
|
|
10
9
|
instance: TreeViewUsedInstance<TSignature>;
|
|
11
10
|
params: TreeViewUsedDefaultizedParams<TSignature>;
|
|
12
11
|
state: TreeViewUsedState<TSignature>;
|
|
12
|
+
slots: TSignature['slots'];
|
|
13
|
+
slotProps: TSignature['slotProps'];
|
|
13
14
|
models: TreeViewUsedModels<TSignature>;
|
|
14
15
|
setState: React.Dispatch<React.SetStateAction<TreeViewUsedState<TSignature>>>;
|
|
15
16
|
rootRef: React.RefObject<HTMLUListElement>;
|
|
16
17
|
}
|
|
17
18
|
type TreeViewModelsInitializer<TSignature extends TreeViewAnyPluginSignature> = {
|
|
18
19
|
[TControlled in keyof TSignature['models']]: {
|
|
19
|
-
|
|
20
|
-
defaultProp: keyof TSignature['params'];
|
|
20
|
+
getDefaultValue: (params: TSignature['defaultizedParams']) => Exclude<TSignature['defaultizedParams'][TControlled], undefined>;
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
type TreeViewResponse<TSignature extends TreeViewAnyPluginSignature> = {
|
|
24
24
|
getRootProps?: <TOther extends EventHandlers = {}>(otherHandlers: TOther) => React.HTMLAttributes<HTMLUListElement>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
state
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
} & OptionalIfEmpty<'contextValue', TSignature['contextValue']>;
|
|
26
|
+
export type TreeViewPluginSignature<T extends {
|
|
27
|
+
params?: {};
|
|
28
|
+
defaultizedParams?: {};
|
|
29
|
+
instance?: {};
|
|
30
|
+
events?: {
|
|
31
|
+
[key in keyof T['events']]: TreeViewEventLookupElement;
|
|
32
|
+
};
|
|
33
|
+
state?: {};
|
|
34
|
+
contextValue?: {};
|
|
35
|
+
slots?: {
|
|
36
|
+
[key in keyof T['slots']]: React.ElementType;
|
|
36
37
|
};
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
slotProps?: {
|
|
39
|
+
[key in keyof T['slotProps']]: {} | (() => {});
|
|
40
|
+
};
|
|
41
|
+
modelNames?: keyof T['defaultizedParams'];
|
|
42
|
+
dependantPlugins?: readonly TreeViewAnyPluginSignature[];
|
|
43
|
+
}> = {
|
|
44
|
+
params: T extends {
|
|
45
|
+
params: {};
|
|
46
|
+
} ? T['params'] : {};
|
|
47
|
+
defaultizedParams: T extends {
|
|
48
|
+
defaultizedParams: {};
|
|
49
|
+
} ? T['defaultizedParams'] : {};
|
|
50
|
+
instance: T extends {
|
|
51
|
+
instance: {};
|
|
52
|
+
} ? T['instance'] : {};
|
|
53
|
+
events: T extends {
|
|
54
|
+
events: {};
|
|
55
|
+
} ? T['events'] : {};
|
|
56
|
+
state: T extends {
|
|
57
|
+
state: {};
|
|
58
|
+
} ? T['state'] : {};
|
|
59
|
+
contextValue: T extends {
|
|
60
|
+
contextValue: {};
|
|
61
|
+
} ? T['contextValue'] : {};
|
|
62
|
+
slots: T extends {
|
|
63
|
+
slots: {};
|
|
64
|
+
} ? T['slots'] : {};
|
|
65
|
+
slotProps: T extends {
|
|
66
|
+
slotProps: {};
|
|
67
|
+
} ? T['slotProps'] : {};
|
|
68
|
+
models: T extends {
|
|
69
|
+
defaultizedParams: {};
|
|
70
|
+
modelNames: keyof T['defaultizedParams'];
|
|
71
|
+
} ? {
|
|
72
|
+
[TControlled in T['modelNames']]-?: TreeViewModel<Exclude<T['defaultizedParams'][TControlled], undefined>>;
|
|
73
|
+
} : {};
|
|
74
|
+
dependantPlugins: T extends {
|
|
75
|
+
dependantPlugins: Array<any>;
|
|
76
|
+
} ? T['dependantPlugins'] : [];
|
|
39
77
|
};
|
|
40
78
|
export type TreeViewAnyPluginSignature = {
|
|
41
79
|
state: any;
|
|
@@ -44,6 +82,9 @@ export type TreeViewAnyPluginSignature = {
|
|
|
44
82
|
defaultizedParams: any;
|
|
45
83
|
dependantPlugins: any;
|
|
46
84
|
events: any;
|
|
85
|
+
contextValue: any;
|
|
86
|
+
slots: any;
|
|
87
|
+
slotProps: any;
|
|
47
88
|
models: any;
|
|
48
89
|
};
|
|
49
90
|
type TreeViewUsedPlugins<TSignature extends TreeViewAnyPluginSignature> = [
|
|
@@ -59,7 +100,10 @@ export type TreeViewUsedInstance<TSignature extends TreeViewAnyPluginSignature>
|
|
|
59
100
|
$$signature: TSignature;
|
|
60
101
|
};
|
|
61
102
|
type TreeViewUsedState<TSignature extends TreeViewAnyPluginSignature> = TSignature['state'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'state'>;
|
|
62
|
-
|
|
103
|
+
type RemoveSetValue<Models extends Record<string, TreeViewModel<any>>> = {
|
|
104
|
+
[K in keyof Models]: Omit<Models[K], 'setValue'>;
|
|
105
|
+
};
|
|
106
|
+
export type TreeViewUsedModels<TSignature extends TreeViewAnyPluginSignature> = TSignature['models'] & RemoveSetValue<MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'models'>>;
|
|
63
107
|
export type TreeViewUsedEvents<TSignature extends TreeViewAnyPluginSignature> = TSignature['events'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'events'>;
|
|
64
108
|
export interface TreeViewItemPluginOptions {
|
|
65
109
|
props: TreeItemProps;
|
|
@@ -83,7 +127,7 @@ export interface TreeViewItemPluginResponse {
|
|
|
83
127
|
}
|
|
84
128
|
export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions) => void | TreeViewItemPluginResponse;
|
|
85
129
|
export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
|
|
86
|
-
(options: TreeViewPluginOptions<TSignature>): void | TreeViewResponse
|
|
130
|
+
(options: TreeViewPluginOptions<TSignature>): void | TreeViewResponse<TSignature>;
|
|
87
131
|
getDefaultizedParams?: (params: TreeViewUsedParams<TSignature>) => TSignature['defaultizedParams'];
|
|
88
132
|
getInitialState?: (params: TreeViewUsedDefaultizedParams<TSignature>) => TSignature['state'];
|
|
89
133
|
models?: TreeViewModelsInitializer<TSignature>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
1
|
import type { TreeViewAnyPluginSignature } from './plugin';
|
|
3
2
|
import type { MergePluginsProperty } from './helpers';
|
|
4
3
|
export interface TreeViewNode {
|
|
@@ -22,6 +21,6 @@ export interface TreeViewItemRange {
|
|
|
22
21
|
export interface TreeViewModel<TValue> {
|
|
23
22
|
name: string;
|
|
24
23
|
value: TValue;
|
|
25
|
-
|
|
24
|
+
setControlledValue: (value: TValue | ((prevValue: TValue) => TValue)) => void;
|
|
26
25
|
}
|
|
27
26
|
export type TreeViewInstance<TSignatures extends readonly TreeViewAnyPluginSignature[]> = MergePluginsProperty<TSignatures, 'instance'>;
|
|
@@ -3,9 +3,11 @@ import { UseTreeViewNodesParameters } from './useTreeViewNodes';
|
|
|
3
3
|
import { UseTreeViewExpansionParameters } from './useTreeViewExpansion';
|
|
4
4
|
import { UseTreeViewSelectionParameters } from './useTreeViewSelection';
|
|
5
5
|
import { UseTreeViewFocusParameters } from './useTreeViewFocus';
|
|
6
|
-
import {
|
|
7
|
-
import { ConvertPluginsIntoSignatures } from '../models';
|
|
8
|
-
export declare const DEFAULT_TREE_VIEW_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewId").UseTreeViewIdSignature>, import("../models").TreeViewPlugin<import("./useTreeViewNodes").UseTreeViewNodesSignature>, import("../models").TreeViewPlugin<import("./useTreeViewExpansion").UseTreeViewExpansionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewSelection").UseTreeViewSelectionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewFocus").UseTreeViewFocusSignature>, import("../models").TreeViewPlugin<import("./useTreeViewKeyboardNavigation").UseTreeViewKeyboardNavigationSignature>, import("../models").TreeViewPlugin<import("./
|
|
6
|
+
import { UseTreeViewIconsParameters } from './useTreeViewIcons';
|
|
7
|
+
import { ConvertPluginsIntoSignatures, MergePluginsProperty } from '../models';
|
|
8
|
+
export declare const DEFAULT_TREE_VIEW_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewId").UseTreeViewIdSignature>, import("../models").TreeViewPlugin<import("./useTreeViewNodes").UseTreeViewNodesSignature>, import("../models").TreeViewPlugin<import("./useTreeViewExpansion").UseTreeViewExpansionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewSelection").UseTreeViewSelectionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewFocus").UseTreeViewFocusSignature>, import("../models").TreeViewPlugin<import("./useTreeViewKeyboardNavigation").UseTreeViewKeyboardNavigationSignature>, import("../models").TreeViewPlugin<import("./useTreeViewIcons").UseTreeViewIconsSignature>];
|
|
9
9
|
export type DefaultTreeViewPlugins = ConvertPluginsIntoSignatures<typeof DEFAULT_TREE_VIEW_PLUGINS>;
|
|
10
|
-
export
|
|
10
|
+
export type DefaultTreeViewPluginSlots = MergePluginsProperty<DefaultTreeViewPlugins, 'slots'>;
|
|
11
|
+
export type DefaultTreeViewPluginSlotProps = MergePluginsProperty<DefaultTreeViewPlugins, 'slotProps'>;
|
|
12
|
+
export interface DefaultTreeViewPluginParameters<R extends {}, Multiple extends boolean | undefined> extends UseTreeViewIdParameters, UseTreeViewNodesParameters<R>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple>, UseTreeViewIconsParameters {
|
|
11
13
|
}
|
|
@@ -4,7 +4,7 @@ import { useTreeViewExpansion } from './useTreeViewExpansion';
|
|
|
4
4
|
import { useTreeViewSelection } from './useTreeViewSelection';
|
|
5
5
|
import { useTreeViewFocus } from './useTreeViewFocus';
|
|
6
6
|
import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
|
|
7
|
-
import {
|
|
8
|
-
export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation,
|
|
7
|
+
import { useTreeViewIcons } from './useTreeViewIcons';
|
|
8
|
+
export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewNodes, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
|
|
9
9
|
|
|
10
10
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
|
@@ -7,6 +7,11 @@ export const useTreeViewExpansion = ({
|
|
|
7
7
|
params,
|
|
8
8
|
models
|
|
9
9
|
}) => {
|
|
10
|
+
const setExpandedNodes = (event, value) => {
|
|
11
|
+
var _params$onExpandedNod;
|
|
12
|
+
(_params$onExpandedNod = params.onExpandedNodesChange) == null || _params$onExpandedNod.call(params, event, value);
|
|
13
|
+
models.expandedNodes.setControlledValue(value);
|
|
14
|
+
};
|
|
10
15
|
const isNodeExpanded = React.useCallback(nodeId => {
|
|
11
16
|
return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
|
|
12
17
|
}, [models.expandedNodes.value]);
|
|
@@ -28,10 +33,7 @@ export const useTreeViewExpansion = ({
|
|
|
28
33
|
if (params.onNodeExpansionToggle) {
|
|
29
34
|
params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
|
|
30
35
|
}
|
|
31
|
-
|
|
32
|
-
params.onExpandedNodesChange(event, newExpanded);
|
|
33
|
-
}
|
|
34
|
-
models.expandedNodes.setValue(newExpanded);
|
|
36
|
+
setExpandedNodes(event, newExpanded);
|
|
35
37
|
});
|
|
36
38
|
const expandAllSiblings = (event, nodeId) => {
|
|
37
39
|
const node = instance.getNode(nodeId);
|
|
@@ -44,10 +46,7 @@ export const useTreeViewExpansion = ({
|
|
|
44
46
|
params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
|
-
|
|
48
|
-
params.onExpandedNodesChange(event, newExpanded);
|
|
49
|
-
}
|
|
50
|
-
models.expandedNodes.setValue(newExpanded);
|
|
49
|
+
setExpandedNodes(event, newExpanded);
|
|
51
50
|
}
|
|
52
51
|
};
|
|
53
52
|
populateInstance(instance, {
|
|
@@ -59,8 +58,7 @@ export const useTreeViewExpansion = ({
|
|
|
59
58
|
};
|
|
60
59
|
useTreeViewExpansion.models = {
|
|
61
60
|
expandedNodes: {
|
|
62
|
-
|
|
63
|
-
defaultProp: 'defaultExpandedNodes'
|
|
61
|
+
getDefaultValue: params => params.defaultExpandedNodes
|
|
64
62
|
}
|
|
65
63
|
};
|
|
66
64
|
const DEFAULT_EXPANDED_NODES = [];
|
|
@@ -34,6 +34,10 @@ export interface UseTreeViewExpansionParameters {
|
|
|
34
34
|
onNodeExpansionToggle?: (event: React.SyntheticEvent, nodeId: string, isExpanded: boolean) => void;
|
|
35
35
|
}
|
|
36
36
|
export type UseTreeViewExpansionDefaultizedParameters = DefaultizedProps<UseTreeViewExpansionParameters, 'defaultExpandedNodes'>;
|
|
37
|
-
export type UseTreeViewExpansionSignature = TreeViewPluginSignature<
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
export type UseTreeViewExpansionSignature = TreeViewPluginSignature<{
|
|
38
|
+
params: UseTreeViewExpansionParameters;
|
|
39
|
+
defaultizedParams: UseTreeViewExpansionDefaultizedParameters;
|
|
40
|
+
instance: UseTreeViewExpansionInstance;
|
|
41
|
+
modelNames: 'expandedNodes';
|
|
42
|
+
dependantPlugins: [UseTreeViewNodesSignature];
|
|
43
|
+
}>;
|
|
@@ -88,12 +88,6 @@ export const useTreeViewFocus = ({
|
|
|
88
88
|
useTreeViewFocus.getInitialState = () => ({
|
|
89
89
|
focusedNodeId: null
|
|
90
90
|
});
|
|
91
|
-
useTreeViewFocus.getDefaultizedParams = params => {
|
|
92
|
-
var _params$disabledItems;
|
|
93
|
-
return _extends({}, params, {
|
|
94
|
-
disabledItemsFocusable: (_params$disabledItems = params.disabledItemsFocusable) != null ? _params$disabledItems : false
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
91
|
useTreeViewFocus.params = {
|
|
98
92
|
onNodeFocus: true
|
|
99
93
|
};
|
|
@@ -22,9 +22,15 @@ export type UseTreeViewFocusDefaultizedParameters = UseTreeViewFocusParameters;
|
|
|
22
22
|
export interface UseTreeViewFocusState {
|
|
23
23
|
focusedNodeId: string | null;
|
|
24
24
|
}
|
|
25
|
-
export type UseTreeViewFocusSignature = TreeViewPluginSignature<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
export type UseTreeViewFocusSignature = TreeViewPluginSignature<{
|
|
26
|
+
params: UseTreeViewFocusParameters;
|
|
27
|
+
defaultizedParams: UseTreeViewFocusDefaultizedParameters;
|
|
28
|
+
instance: UseTreeViewFocusInstance;
|
|
29
|
+
state: UseTreeViewFocusState;
|
|
30
|
+
dependantPlugins: [
|
|
31
|
+
UseTreeViewIdSignature,
|
|
32
|
+
UseTreeViewNodesSignature,
|
|
33
|
+
UseTreeViewSelectionSignature,
|
|
34
|
+
UseTreeViewExpansionSignature
|
|
35
|
+
];
|
|
36
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeViewIcons } from './useTreeViewIcons';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const useTreeViewIcons = ({
|
|
2
|
+
slots,
|
|
3
|
+
slotProps
|
|
4
|
+
}) => {
|
|
5
|
+
return {
|
|
6
|
+
contextValue: {
|
|
7
|
+
icons: {
|
|
8
|
+
slots: {
|
|
9
|
+
collapseIcon: slots.collapseIcon,
|
|
10
|
+
expandIcon: slots.expandIcon,
|
|
11
|
+
endIcon: slots.endIcon
|
|
12
|
+
},
|
|
13
|
+
slotProps: {
|
|
14
|
+
collapseIcon: slotProps.collapseIcon,
|
|
15
|
+
expandIcon: slotProps.expandIcon,
|
|
16
|
+
endIcon: slotProps.endIcon
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
useTreeViewIcons.params = {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { SlotComponentProps } from '@mui/base/utils';
|
|
3
|
+
import { TreeViewPluginSignature } from '../../models';
|
|
4
|
+
import { UseTreeViewNodesSignature } from '../useTreeViewNodes';
|
|
5
|
+
import { UseTreeViewSelectionSignature } from '../useTreeViewSelection';
|
|
6
|
+
export interface UseTreeViewIconsParameters {
|
|
7
|
+
}
|
|
8
|
+
export type UseTreeViewIconsDefaultizedParameters = UseTreeViewIconsParameters;
|
|
9
|
+
interface UseTreeViewIconsSlots {
|
|
10
|
+
/**
|
|
11
|
+
* The default icon used to collapse the node.
|
|
12
|
+
*/
|
|
13
|
+
collapseIcon?: React.ElementType;
|
|
14
|
+
/**
|
|
15
|
+
* The default icon used to expand the node.
|
|
16
|
+
*/
|
|
17
|
+
expandIcon?: React.ElementType;
|
|
18
|
+
/**
|
|
19
|
+
* The default icon displayed next to an end node.
|
|
20
|
+
* This is applied to all tree nodes and can be overridden by the TreeItem `icon` slot prop.
|
|
21
|
+
*/
|
|
22
|
+
endIcon?: React.ElementType;
|
|
23
|
+
}
|
|
24
|
+
interface UseTreeViewIconsSlotProps {
|
|
25
|
+
collapseIcon?: SlotComponentProps<'svg', {}, {}>;
|
|
26
|
+
expandIcon?: SlotComponentProps<'svg', {}, {}>;
|
|
27
|
+
endIcon?: SlotComponentProps<'svg', {}, {}>;
|
|
28
|
+
}
|
|
29
|
+
interface UseTreeViewIconsContextValue {
|
|
30
|
+
icons: {
|
|
31
|
+
slots: UseTreeViewIconsSlots;
|
|
32
|
+
slotProps: UseTreeViewIconsSlotProps;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export type UseTreeViewIconsSignature = TreeViewPluginSignature<{
|
|
36
|
+
params: UseTreeViewIconsParameters;
|
|
37
|
+
defaultizedParams: UseTreeViewIconsDefaultizedParameters;
|
|
38
|
+
contextValue: UseTreeViewIconsContextValue;
|
|
39
|
+
slots: UseTreeViewIconsSlots;
|
|
40
|
+
slotProps: UseTreeViewIconsSlotProps;
|
|
41
|
+
dependantPlugins: [UseTreeViewNodesSignature, UseTreeViewSelectionSignature];
|
|
42
|
+
}>;
|
|
43
|
+
export {};
|
|
@@ -13,5 +13,9 @@ export type UseTreeViewIdDefaultizedParameters = UseTreeViewIdParameters;
|
|
|
13
13
|
export interface UseTreeViewIdState {
|
|
14
14
|
focusedNodeId: string | null;
|
|
15
15
|
}
|
|
16
|
-
export type UseTreeViewIdSignature = TreeViewPluginSignature<
|
|
17
|
-
|
|
16
|
+
export type UseTreeViewIdSignature = TreeViewPluginSignature<{
|
|
17
|
+
params: UseTreeViewIdParameters;
|
|
18
|
+
defaultizedParams: UseTreeViewIdDefaultizedParameters;
|
|
19
|
+
instance: UseTreeViewIdInstance;
|
|
20
|
+
state: UseTreeViewIdState;
|
|
21
|
+
}>;
|
|
@@ -12,11 +12,16 @@ export const useTreeViewJSXNodes = ({
|
|
|
12
12
|
setState
|
|
13
13
|
}) => {
|
|
14
14
|
const insertJSXNode = useEventCallback(node => {
|
|
15
|
-
setState(prevState =>
|
|
16
|
-
|
|
17
|
-
[
|
|
18
|
-
}
|
|
19
|
-
|
|
15
|
+
setState(prevState => {
|
|
16
|
+
if (prevState.nodeMap[node.id] != null) {
|
|
17
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Tow items were provided with the same id in the \`items\` prop: "${node.id}"`].join('\n'));
|
|
18
|
+
}
|
|
19
|
+
return _extends({}, prevState, {
|
|
20
|
+
nodeMap: _extends({}, prevState.nodeMap, {
|
|
21
|
+
[node.id]: node
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
});
|
|
20
25
|
});
|
|
21
26
|
const removeJSXNode = useEventCallback(nodeId => {
|
|
22
27
|
setState(prevState => {
|
|
@@ -10,7 +10,9 @@ export interface UseTreeViewNodesParameters {
|
|
|
10
10
|
}
|
|
11
11
|
export interface UseTreeViewNodesDefaultizedParameters {
|
|
12
12
|
}
|
|
13
|
-
export type UseTreeViewJSXNodesSignature = TreeViewPluginSignature<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
export type UseTreeViewJSXNodesSignature = TreeViewPluginSignature<{
|
|
14
|
+
params: UseTreeViewNodesParameters;
|
|
15
|
+
defaultizedParams: UseTreeViewNodesDefaultizedParameters;
|
|
16
|
+
instance: UseTreeViewNodesInstance;
|
|
17
|
+
dependantPlugins: [UseTreeViewNodesSignature, UseTreeViewKeyboardNavigationSignature];
|
|
18
|
+
}>;
|