Skip to content

Commit 25f0efa

Browse files
add initial loading skeleton
1 parent b40db1a commit 25f0efa

2 files changed

Lines changed: 311 additions & 92 deletions

File tree

editor/scaffolds/editor/editor.tsx

Lines changed: 102 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React, { useEffect, useState } from "react";
22
import styled from "@emotion/styled";
33
import { useRouter } from "next/router";
44
import { DefaultEditorWorkspaceLayout } from "layouts/default-editor-workspace-layout";
5-
import { PreviewAndRunPanel } from "components/preview-and-run";
65
import {
76
WorkspaceContentPanel,
87
WorkspaceContentPanelGridLayout,
@@ -31,6 +30,7 @@ import {
3130
find_node_by_id_under_inpage_nodes,
3231
} from "utils/design-query";
3332
import { vanilla_presets } from "@grida/builder-config-preset";
33+
import { EditorSkeleton } from "./skeleton";
3434

3535
export function Editor() {
3636
const router = useRouter();
@@ -168,104 +168,114 @@ export function Editor() {
168168
);
169169

170170
const { code, scaffold, name: componentName } = result ?? {};
171+
const _initially_loaded = state.design?.pages?.length > 0;
172+
const _initial_load_progress =
173+
[!!state.design?.input, !!result, state.design?.pages?.length > 0].filter(
174+
Boolean
175+
).length / 3;
171176

172177
return (
173-
<DefaultEditorWorkspaceLayout
174-
backgroundColor={"rgba(37, 37, 38, 1)"}
175-
leftbar={<EditorSidebar />}
176-
>
177-
<WorkspaceContentPanelGridLayout>
178-
<WorkspaceContentPanel>
179-
<Canvas
180-
preview={preview}
181-
fileid={state?.design?.key}
182-
sceneid={root?.id}
183-
originsize={{
184-
width: root?.entry?.width,
185-
height: root?.entry?.height,
186-
}}
187-
/>
188-
</WorkspaceContentPanel>
189-
<WorkspaceContentPanel backgroundColor={"rgba(30, 30, 30, 1)"}>
190-
<CodeEditorContainer>
191-
{/* <EditorAppbarFragments.CodeEditor /> */}
192-
<CodeOptionsControl
193-
initialPreset={router.query.framework as string}
194-
fallbackPreset="react_default"
195-
onUseroptionChange={(o) => {
196-
set_framework_config(get_framework_config(o.framework));
178+
<>
179+
{!_initially_loaded && (
180+
<EditorSkeleton percent={_initial_load_progress + 0.2} />
181+
)}
182+
<DefaultEditorWorkspaceLayout
183+
backgroundColor={"rgba(37, 37, 38, 1)"}
184+
leftbar={<EditorSidebar />}
185+
>
186+
<WorkspaceContentPanelGridLayout>
187+
<WorkspaceContentPanel>
188+
<Canvas
189+
preview={preview}
190+
fileid={state?.design?.key}
191+
sceneid={root?.id}
192+
originsize={{
193+
width: root?.entry?.width,
194+
height: root?.entry?.height,
197195
}}
198196
/>
199-
<CodeEditor
200-
key={code?.raw}
201-
height="100vh"
202-
options={{
203-
automaticLayout: true,
204-
}}
205-
files={
206-
code
207-
? {
208-
"index.tsx": {
209-
raw: code.raw,
210-
language: framework_config.language,
211-
name: "index.tsx",
212-
},
213-
}
214-
: {
215-
loading: {
216-
raw: "Reading design...",
217-
language: "text",
218-
name: "loading",
219-
},
220-
}
221-
}
222-
/>
223-
</CodeEditorContainer>
224-
</WorkspaceContentPanel>
225-
{wstate.preferences.debug_mode && (
226-
<WorkspaceBottomPanelDockLayout resizable>
227-
<WorkspaceContentPanel>
228-
<div
229-
style={{
230-
display: "flex",
231-
flexDirection: "row",
232-
alignItems: "stretch",
197+
</WorkspaceContentPanel>
198+
<WorkspaceContentPanel backgroundColor={"rgba(30, 30, 30, 1)"}>
199+
<CodeEditorContainer>
200+
{/* <EditorAppbarFragments.CodeEditor /> */}
201+
<CodeOptionsControl
202+
initialPreset={router.query.framework as string}
203+
fallbackPreset="react_default"
204+
onUseroptionChange={(o) => {
205+
set_framework_config(get_framework_config(o.framework));
233206
}}
234-
>
235-
<div style={{ flex: 1 }}>
236-
<ClearRemoteDesignSessionCache
237-
key={root.id}
238-
file={state.design.key}
239-
node={root.id}
240-
/>
241-
<br />
242-
{(root.entry.origin === "INSTANCE" ||
243-
root.entry.origin === "COMPONENT") && (
244-
<button
245-
onClick={() => {
246-
router.push({
247-
pathname: "/figma/inspect-component",
248-
query: router.query,
249-
});
250-
}}
251-
>
252-
inspect component
253-
</button>
254-
)}
255-
</div>
207+
/>
208+
<CodeEditor
209+
key={code?.raw}
210+
height="100vh"
211+
options={{
212+
automaticLayout: true,
213+
}}
214+
files={
215+
code
216+
? {
217+
"index.tsx": {
218+
raw: code.raw,
219+
language: framework_config.language,
220+
name: "index.tsx",
221+
},
222+
}
223+
: {
224+
loading: {
225+
raw: "Reading design...",
226+
language: "text",
227+
name: "loading",
228+
},
229+
}
230+
}
231+
/>
232+
</CodeEditorContainer>
233+
</WorkspaceContentPanel>
234+
{wstate.preferences.debug_mode && (
235+
<WorkspaceBottomPanelDockLayout resizable>
236+
<WorkspaceContentPanel>
237+
<div
238+
style={{
239+
display: "flex",
240+
flexDirection: "row",
241+
alignItems: "stretch",
242+
}}
243+
>
244+
<div style={{ flex: 1 }}>
245+
<ClearRemoteDesignSessionCache
246+
key={root.id}
247+
file={state.design.key}
248+
node={root.id}
249+
/>
250+
<br />
251+
{(root.entry.origin === "INSTANCE" ||
252+
root.entry.origin === "COMPONENT") && (
253+
<button
254+
onClick={() => {
255+
router.push({
256+
pathname: "/figma/inspect-component",
257+
query: router.query,
258+
});
259+
}}
260+
>
261+
inspect component
262+
</button>
263+
)}
264+
</div>
256265

257-
<div style={{ flex: 2 }}>
258-
<WidgetTree data={root.entry} />
259-
</div>
260-
<div style={{ flex: 2 }}>
261-
<WidgetTree data={result.widget} />
266+
<div style={{ flex: 2 }}>
267+
<WidgetTree data={root.entry} />
268+
</div>
269+
<div style={{ flex: 2 }}>
270+
<WidgetTree data={result.widget} />
271+
</div>
262272
</div>
263-
</div>
264-
</WorkspaceContentPanel>
265-
</WorkspaceBottomPanelDockLayout>
266-
)}
267-
</WorkspaceContentPanelGridLayout>
268-
</DefaultEditorWorkspaceLayout>
273+
</WorkspaceContentPanel>
274+
</WorkspaceBottomPanelDockLayout>
275+
)}
276+
</WorkspaceContentPanelGridLayout>
277+
</DefaultEditorWorkspaceLayout>
278+
</>
269279
);
270280
}
271281

0 commit comments

Comments
 (0)