1- import React , { useState } from "react" ;
1+ import React , { useEffect , useState } from "react" ;
22import { figmacomp , canvas } from "../../components" ;
33import { ReflectSceneNode } from "@design-sdk/core/nodes" ;
44import { tokenize } from "@designto/token" ;
5- import { JsonTree } from "../../components/visualization/json-visualization/json-tree" ;
6- import { FigmaTargetNodeConfig } from "@design-sdk/core/utils/figma-api-utils" ;
5+ import {
6+ JsonTree ,
7+ WidgetTree ,
8+ } from "../../components/visualization/json-visualization/json-tree" ;
9+ import {
10+ FigmaTargetNodeConfig ,
11+ parseFileAndNodeIdFromUrl_Figma ,
12+ } from "@design-sdk/core/utils/figma-api-utils" ;
13+ import { useRouter } from "next/router" ;
14+ import { extractFromFigmaQueryParams } from "../../query/from-figma" ;
15+ import { Figma } from "@design-sdk/figma" ;
16+ import { fetchTargetAsReflect } from "../../components/figma/screen-importer" ;
17+ import { DefaultEditorWorkspaceLayout } from "../../layout/default-editor-workspace-layout" ;
18+ import { LayerHierarchy } from "../../components/editor-hierarchy" ;
19+ import { WorkspaceContentPanelGridLayout } from "../../layout/panel/workspace-content-panel-grid-layout" ;
20+ import { WorkspaceContentPanel } from "../../layout/panel" ;
21+ import { WorkspaceBottomPanelDockLayout } from "../../layout/panel/workspace-bottom-panel-dock-layout" ;
722
823export default function FigmaToReflectWidgetTokenPage ( ) {
24+ const [ figmaNode , setFigmaNode ] = useState < Figma . SceneNode > ( ) ;
925 const [ reflect , setReflect ] = useState < ReflectSceneNode > ( ) ;
1026 const [ figmaNodeUrl , setFigmaNodeUrl ] = useState < string > ( ) ;
27+ const [
28+ targetnodeConfig ,
29+ setTargetnodeConfig ,
30+ ] = useState < FigmaTargetNodeConfig > ( ) ;
31+
32+ const router = useRouter ( ) ;
33+
34+ useEffect ( ( ) => {
35+ const params = extractFromFigmaQueryParams ( router ) ;
36+ if ( params . figma_target_url ) {
37+ setFigmaNodeUrl ( params . figma_target_url ) ;
38+ const targetnodeconfig = parseFileAndNodeIdFromUrl_Figma (
39+ params . figma_target_url
40+ ) ;
41+ setTargetnodeConfig ( targetnodeconfig ) ;
42+ fetchTargetAsReflect ( targetnodeconfig . file , targetnodeconfig . node ) . then (
43+ ( res ) => {
44+ setReflect ( res . reflect ) ;
45+ setFigmaNode ( res . figma ) ;
46+ }
47+ ) ;
48+ }
49+ } , [ router ] ) ;
1150
1251 const handleOnDesignImported = ( reflect : ReflectSceneNode ) => {
1352 setReflect ( reflect ) ;
@@ -24,13 +63,45 @@ export default function FigmaToReflectWidgetTokenPage() {
2463
2564 return (
2665 < >
27- < canvas . FigmaEmbedCanvas src = { { url : figmaNodeUrl } } />
28- < figmacomp . FigmaScreenImporter
29- onImported = { handleOnDesignImported }
30- onTargetEnter = { handleFigmaUrlEnter }
31- />
66+ { ! figmaNodeUrl && (
67+ < figmacomp . FigmaScreenImporter
68+ onImported = { handleOnDesignImported }
69+ onTargetEnter = { handleFigmaUrlEnter }
70+ />
71+ ) }
72+ < DefaultEditorWorkspaceLayout leftbar = { < LayerHierarchy data = { reflect } /> } >
73+ < WorkspaceContentPanelGridLayout >
74+ < WorkspaceContentPanel >
75+ < canvas . FigmaEmbedCanvas
76+ src = { { url : figmaNodeUrl } }
77+ width = "100%"
78+ height = "100%"
79+ />
80+ </ WorkspaceContentPanel >
3281
33- < JsonTree hideRoot data = { tokenTree } />
82+ < WorkspaceBottomPanelDockLayout >
83+ < WorkspaceContentPanel >
84+ < div
85+ style = { {
86+ display : "flex" ,
87+ flexDirection : "row" ,
88+ alignItems : "stretch" ,
89+ } }
90+ >
91+ < div style = { { flex : 1 } } >
92+ < WidgetTree data = { figmaNode } />
93+ </ div >
94+ < div style = { { flex : 1 } } >
95+ < WidgetTree data = { reflect } />
96+ </ div >
97+ < div style = { { flex : 1 } } >
98+ < JsonTree hideRoot data = { tokenTree } />
99+ </ div >
100+ </ div >
101+ </ WorkspaceContentPanel >
102+ </ WorkspaceBottomPanelDockLayout >
103+ </ WorkspaceContentPanelGridLayout >
104+ </ DefaultEditorWorkspaceLayout >
34105 </ >
35106 ) ;
36107}
0 commit comments