@@ -2,7 +2,6 @@ import React, { useEffect, useState } from "react";
22import styled from "@emotion/styled" ;
33import { useRouter } from "next/router" ;
44import { DefaultEditorWorkspaceLayout } from "layouts/default-editor-workspace-layout" ;
5- import { PreviewAndRunPanel } from "components/preview-and-run" ;
65import {
76 WorkspaceContentPanel ,
87 WorkspaceContentPanelGridLayout ,
@@ -31,6 +30,7 @@ import {
3130 find_node_by_id_under_inpage_nodes ,
3231} from "utils/design-query" ;
3332import { vanilla_presets } from "@grida/builder-config-preset" ;
33+ import { EditorSkeleton } from "./skeleton" ;
3434
3535export 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