-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathIModelContentTree.tsx
75 lines (68 loc) · 2.89 KB
/
IModelContentTree.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
import categorySvg from "@itwin/itwinui-icons/bis-category-3d.svg";
import classSvg from "@itwin/itwinui-icons/bis-class.svg";
import elementSvg from "@itwin/itwinui-icons/bis-element.svg";
import subjectSvg from "@itwin/itwinui-icons/bis-subject.svg";
import groupSvg from "@itwin/itwinui-icons/group.svg";
import modelSvg from "@itwin/itwinui-icons/model-cube.svg";
import hierarchyTreeSvg from "@itwin/itwinui-icons/selection-children.svg";
import { EmptyTreeContent } from "../common/components/EmptyTree.js";
import { Tree } from "../common/components/Tree.js";
import { TreeRenderer } from "../common/components/TreeRenderer.js";
import { IModelContentTreeComponent } from "./IModelContentTreeComponent.js";
import { IModelContentTreeDefinition } from "./IModelContentTreeDefinition.js";
import { IModelContentTreeIdsCache } from "./internal/IModelContentTreeIdsCache.js";
import type { PresentationHierarchyNode } from "@itwin/presentation-hierarchies-react";
import type { BaseTreeRendererProps } from "../common/components/BaseTreeRenderer.js";
import type { TreeProps } from "../common/components/Tree.js";
/** @beta */
export type IModelContentTreeProps = Pick<TreeProps, "imodel" | "getSchemaContext" | "selectionStorage" | "selectionMode" | "emptyTreeContent"> &
Pick<BaseTreeRendererProps, "actions"> & {
hierarchyLevelConfig?: {
sizeLimit?: number;
};
};
/** @beta */
export function IModelContentTree(props: IModelContentTreeProps) {
return (
<Tree
emptyTreeContent={<EmptyTreeContent icon={modelSvg} />}
{...props}
treeName={IModelContentTreeComponent.id}
getHierarchyDefinition={getDefinitionsProvider}
selectionMode={props.selectionMode ?? "extended"}
treeRenderer={(treeProps) => <TreeRenderer {...treeProps} getIcon={getIcon} />}
/>
);
}
const getDefinitionsProvider: TreeProps["getHierarchyDefinition"] = ({ imodelAccess }) => {
return new IModelContentTreeDefinition({
imodelAccess,
idsCache: new IModelContentTreeIdsCache(imodelAccess),
});
};
function getIcon(node: PresentationHierarchyNode): string | undefined {
if (node.extendedData?.imageId === undefined) {
return undefined;
}
switch (node.extendedData.imageId) {
case "icon-layers":
return categorySvg;
case "icon-item":
return elementSvg;
case "icon-ec-class":
return classSvg;
case "icon-folder":
return subjectSvg;
case "icon-model":
return modelSvg;
case "icon-hierarchy-tree":
return hierarchyTreeSvg;
case "icon-group":
return groupSvg;
}
return undefined;
}