Skip to content

Commit 07f7b47

Browse files
Merge pull request #98 from gridaco/staging
Dec #3 Home layout & Files management support with in-editor caching & performance boost
2 parents b4dd920 + 80f4118 commit 07f7b47

80 files changed

Lines changed: 4093 additions & 1821 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

editor/babel.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module.exports = {
1313
scaffolds: "./scaffolds",
1414
utils: "./utils",
1515
core: "./core",
16+
store: "./store",
17+
repository: "./repository",
1618
public: "./public",
1719
hooks: "./hooks",
1820
},

editor/components/canvas/controller-zoom-control.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from "react";
22
import styled from "@emotion/styled";
33
import RefreshSharpIcon from "@material-ui/icons/RefreshSharp";
4+
import { colors } from "theme";
45

56
export function ZoomControl({
67
scale,
@@ -87,8 +88,8 @@ const Controls = styled.div`
8788
box-sizing: border-box;
8889
border-radius: 4px;
8990
padding: 4px;
90-
background-color: #252526;
91-
box-shadow: #25252650 0px 0px 0px 16px inset;
91+
background-color: ${colors.color_editor_bg_on_dark};
92+
box-shadow: ${colors.color_editor_bg_on_dark} 0px 0px 0px 16px inset;
9293
`;
9394

9495
const ControlsContainer = styled.div`

editor/components/canvas/interactive-canvas.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function InteractiveCanvas({
3434
const InteractiveCanvasWrapper = styled.div`
3535
display: flex;
3636
flex-direction: column;
37-
overflow-y: auto;
37+
/* overflow-y: auto; */
3838
overflow-x: hidden;
3939
flex: 1;
4040
`;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React from "react";
2+
export function MonacoEmptyMock() {
3+
return (
4+
<div
5+
style={{
6+
display: "flex",
7+
flexDirection: "column",
8+
width: "100%",
9+
textAlign: "right",
10+
color: "#858585",
11+
background: "#1e1e1e",
12+
}}
13+
>
14+
{Array.from(Array(100).keys()).map((i) => (
15+
<span
16+
style={{
17+
left: 0,
18+
width: 36,
19+
fontFamily: 'Menlo, Monaco, "Courier New", monospace',
20+
fontWeight: "normal",
21+
fontSize: 12,
22+
lineHeight: "18px",
23+
}}
24+
key={i.toString()}
25+
>
26+
{i + 1}
27+
</span>
28+
))}
29+
</div>
30+
);
31+
}

editor/components/code-editor/monaco.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useEffect } from "react";
22
import Editor, { useMonaco, Monaco } from "@monaco-editor/react";
33
import * as monaco from "monaco-editor/esm/vs/editor/editor.api";
4+
import { MonacoEmptyMock } from "./monaco-mock-empty";
45

56
export interface MonacoEditorProps {
67
defaultValue?: string;
@@ -26,7 +27,7 @@ export function MonacoEditor(props: MonacoEditorProps) {
2627
defaultLanguage={
2728
pollyfill_language(props.defaultLanguage) ?? "typescript"
2829
}
29-
loading={<></>}
30+
loading={<MonacoEmptyMock />}
3031
defaultValue={props.defaultValue ?? "// no content"}
3132
theme="vs-dark"
3233
options={{ ...props.options }}

editor/components/editor/editor-appbar/editor-appbar-fragment-for-canvas.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from "react";
22
import styled from "@emotion/styled";
33
import { useEditorState } from "core/states";
4+
import { colors } from "theme";
45

56
export function AppbarFragmentForCanvas() {
67
const [state] = useEditorState();
@@ -19,7 +20,7 @@ const RootWrapperAppbarFragmentForCanvas = styled.div`
1920
align-items: center;
2021
gap: 10px;
2122
align-self: stretch;
22-
background-color: rgba(37, 37, 38, 1);
23+
background-color: ${colors.color_editor_bg_on_dark};
2324
box-sizing: border-box;
2425
padding: 10px 24px;
2526
`;

editor/components/editor/editor-appbar/editor-appbar-fragment-for-code-editor.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ const RootWrapperAppbarFragmentForCodeEditor = styled.div`
3434
flex: 1;
3535
gap: 10px;
3636
align-self: stretch;
37-
background-color: rgba(30, 30, 30, 1);
3837
box-sizing: border-box;
3938
padding-bottom: 14px;
4039
padding-top: 14px;

editor/components/editor/editor-appbar/editor-appbar-fragment-for-sidebar.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
import React from "react";
22
import styled from "@emotion/styled";
3+
import { ArrowBack } from "@material-ui/icons";
4+
import { useRouter } from "next/router";
5+
import { colors } from "theme";
36

47
export function AppbarFragmentForSidebar() {
8+
const router = useRouter();
9+
510
return (
611
<RootWrapperAppbarFragmentForSidebar>
7-
<div
12+
<ArrowBack
813
style={{
9-
width: 24,
10-
height: 24,
14+
fontSize: "20px",
15+
fill: "white",
16+
}}
17+
onClick={() => {
18+
router.push("/");
1119
}}
12-
></div>
20+
/>
1321
{/* <IconsMdiMenu
1422
// TODO: replace resource
1523
src="https://s3-us-west-2.amazonaws.com/figma-alpha-api/img/333b/8550/4bdd6a7ceffe5b23b37bc68c1fb7a4ab"
@@ -28,7 +36,7 @@ const RootWrapperAppbarFragmentForSidebar = styled.div`
2836
gap: 10px;
2937
width: 200px;
3038
align-self: stretch;
31-
background-color: rgba(37, 37, 38, 1);
39+
background-color: ${colors.color_editor_bg_on_dark};
3240
box-sizing: border-box;
3341
padding: 14px 16px;
3442
`;
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { ReflectSceneNode } from "@design-sdk/figma";
2+
import { visit } from "tree-visit";
3+
4+
export interface ITreeNode<T = any> {
5+
id: string;
6+
name: string;
7+
children?: ITreeNode[];
8+
data?: T;
9+
}
10+
11+
export interface FlattenedDisplayItemNode<T = any> {
12+
id: string;
13+
name: string;
14+
depth: number;
15+
parent: string;
16+
expanded?: boolean | undefined;
17+
selected?: boolean;
18+
data?: T;
19+
}
20+
21+
export const flatten = <T extends ITreeNode>(
22+
tree: T,
23+
parent?: string,
24+
depth: number = 0
25+
): FlattenedDisplayItemNode[] => {
26+
const convert = (node: T, depth: number, parent?: string) => {
27+
if (!node) {
28+
return;
29+
}
30+
31+
const result: FlattenedDisplayItemNode = {
32+
...node,
33+
depth: depth,
34+
parent,
35+
};
36+
37+
return result;
38+
};
39+
40+
const final = [];
41+
final.push(convert(tree, depth, parent));
42+
for (const child of tree?.children || []) {
43+
final.push(...flatten(child, tree.id, depth + 1));
44+
}
45+
return final;
46+
};
47+
48+
export function flattenNodeTree(
49+
root: ReflectSceneNode,
50+
selections: string[],
51+
expands: string[]
52+
): FlattenedDisplayItemNode<ReflectSceneNode>[] {
53+
const flattened: FlattenedDisplayItemNode<ReflectSceneNode>[] = [];
54+
55+
visit<ReflectSceneNode>(root, {
56+
getChildren: (layer) => {
57+
if (expands.includes(layer.id)) {
58+
return layer.children;
59+
}
60+
return [];
61+
},
62+
63+
onEnter(layer, indexPath) {
64+
flattened.push({
65+
id: layer.id,
66+
name: layer.name,
67+
parent: layer.parent?.id,
68+
depth: indexPath.length - 1,
69+
expanded:
70+
layer.children.length <= 0
71+
? undefined
72+
: expands.includes(layer.id)
73+
? true
74+
: false,
75+
selected: selections.includes(layer.id),
76+
data: layer,
77+
});
78+
},
79+
});
80+
81+
return flattened;
82+
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ export const LayerRow = memo(
9494
name,
9595
selected,
9696
onHoverChange,
97-
onAddClick,
9897
onMenuClick,
9998
onClickChevron,
10099
onPress,
@@ -105,7 +104,6 @@ export const LayerRow = memo(
105104
}: TreeView.TreeRowProps<""> & {
106105
name: string;
107106
selected: boolean;
108-
onAddClick: () => void;
109107
onMenuClick: () => void;
110108
children?: ReactNode;
111109
},
@@ -130,6 +128,7 @@ export const LayerRow = memo(
130128
disabled={false}
131129
onPress={onPress}
132130
onClick={onClick}
131+
onClickChevron={onClickChevron}
133132
onDoubleClick={onDoubleClick}
134133
{...props}
135134
>

0 commit comments

Comments
 (0)