Skip to content

Commit 79883d4

Browse files
update layer icons
1 parent 5cd1e0b commit 79883d4

2 files changed

Lines changed: 76 additions & 15 deletions

File tree

editor/components/editor/editor-layer-hierarchy/editor-layer-hierarchy-item.tsx

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,20 @@ import { Spacer } from "@editor-ui/spacer";
1010
import { withSeparatorElements } from "@editor-ui/utils";
1111
import styled from "@emotion/styled";
1212
import { useTheme } from "@emotion/react";
13-
import { DotsHorizontalIcon, FileIcon } from "@radix-ui/react-icons";
1413
import "@editor-ui/theme";
14+
import { ReflectSceneNodeType } from "@design-sdk/figma-node";
15+
import {
16+
FrameIcon,
17+
DotsHorizontalIcon,
18+
FileIcon,
19+
TextIcon,
20+
GroupIcon,
21+
ComponentInstanceIcon,
22+
Component1Icon,
23+
BoxIcon,
24+
CircleIcon,
25+
ImageIcon,
26+
} from "@radix-ui/react-icons";
1527

1628
export const IconContainer = styled.span(({ theme }) => ({
1729
color: theme.colors.mask,
@@ -38,11 +50,41 @@ export const LayerIcon = memo(function LayerIcon({
3850
? colors.iconSelected
3951
: colors.icon;
4052

41-
switch (type) {
42-
case "page":
43-
return <FileIcon color={color} />;
53+
switch (type as ReflectSceneNodeType) {
54+
case ReflectSceneNodeType.group:
55+
return <GroupIcon color={color} />;
56+
case ReflectSceneNodeType.component:
57+
return <Component1Icon color={color} />;
58+
case ReflectSceneNodeType.instance:
59+
return <ComponentInstanceIcon />;
60+
case ReflectSceneNodeType.text:
61+
return <TextIcon color={color} />;
62+
case ReflectSceneNodeType.frame:
63+
return <FrameIcon color={color} />;
64+
case ReflectSceneNodeType.ellipse:
65+
return <CircleIcon color={color} />;
66+
case ReflectSceneNodeType.rectangle:
67+
return <BoxIcon color={color} />;
68+
case ReflectSceneNodeType.variant_set:
69+
return <></>;
70+
case ReflectSceneNodeType.constraint:
71+
return <></>;
72+
case ReflectSceneNodeType.line:
73+
return <></>;
74+
case ReflectSceneNodeType.vector:
75+
return <></>;
76+
case ReflectSceneNodeType.star:
77+
return <></>;
78+
case ReflectSceneNodeType.poligon:
79+
return <></>;
80+
case ReflectSceneNodeType.boolean_operation:
81+
return <></>;
82+
case ReflectSceneNodeType.image:
83+
return <ImageIcon color={color} />;
84+
case ReflectSceneNodeType.unknown:
85+
return <></>;
4486
default:
45-
return null;
87+
return <></>;
4688
}
4789
});
4890

editor/components/editor/editor-layer-hierarchy/editor-layer-hierarchy-tree.tsx

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,37 @@
11
import React, { memo, useCallback, useMemo, useReducer, useState } from "react";
2-
32
import styled from "@emotion/styled";
43
import { TreeView } from "@editor-ui/editor";
5-
import { LayerRow } from "./editor-layer-hierarchy-item";
4+
import {
5+
LayerRow,
6+
IconContainer,
7+
LayerIcon,
8+
} from "./editor-layer-hierarchy-item";
69
import { useEditorState } from "core/states";
710
import { useDispatch } from "core/dispatch";
811

912
export function EditorLayerHierarchy() {
1013
const [state] = useEditorState();
1114
const dispatch = useDispatch();
1215
const root = state.design?.current?.entry;
13-
const layers = root ? flatten(root) : [];
16+
const layers = root ? flatten(root, ["origin"]) : [];
1417

1518
const renderItem = useCallback(
16-
({ id, name, depth }) => {
19+
({ id, name, depth, type }) => {
20+
const selected = state?.selectedNodes?.includes(id);
21+
1722
return (
1823
<LayerRow
24+
icon={
25+
<IconContainer>
26+
<LayerIcon type={type} selected={selected} />
27+
</IconContainer>
28+
}
1929
name={name}
2030
depth={depth}
2131
id={id}
2232
expanded={haschildren(id) == true ? true : undefined}
2333
key={id}
24-
selected={state?.selectedNodes?.includes(id)}
34+
selected={selected}
2535
onAddClick={() => {}}
2636
onMenuClick={() => {}}
2737
onDoubleClick={() => {}}
@@ -55,35 +65,44 @@ export function EditorLayerHierarchy() {
5565
interface ITreeNode {
5666
id: string;
5767
name: string;
68+
type: string;
5869
children?: ITreeNode[];
5970
}
6071

6172
interface FlattenedNode {
6273
id: string;
6374
name: string;
6475
depth: number;
76+
type: string;
6577
parent: string;
6678
}
6779

68-
const flatten = (
69-
tree: ITreeNode,
80+
const flatten = <T extends ITreeNode>(
81+
tree: T,
82+
properties?: string[],
7083
parent?: string,
7184
depth: number = 0
7285
): FlattenedNode[] => {
73-
const convert = (node: ITreeNode, depth: number, parent?: string) => {
86+
const convert = (node: T, properties, depth: number, parent?: string) => {
7487
const result: FlattenedNode = {
7588
id: node.id,
7689
name: node.name,
90+
type: node.type,
7791
depth: depth,
7892
parent,
7993
};
94+
95+
properties?.forEach((property) => {
96+
(result as object)[property] = node[property];
97+
});
98+
8099
return result;
81100
};
82101

83102
const final = [];
84-
final.push(convert(tree, depth, parent));
103+
final.push(convert(tree, properties, depth, parent));
85104
for (const child of tree.children || []) {
86-
final.push(...flatten(child, tree.id, depth + 1));
105+
final.push(...flatten(child, null, tree.id, depth + 1));
87106
}
88107
return final;
89108
};

0 commit comments

Comments
 (0)