Skip to content

Commit ead197e

Browse files
add figma embedding
1 parent 6ef7031 commit ead197e

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from "react";
2+
3+
export function FigmaEmbedCanvas(props: { url?: string }) {
4+
if (props.url) {
5+
/**
6+
* build embedding url. - https://www.figma.com/developers/embed
7+
*/
8+
const _embed_url = `https://www.figma.com/embed?embed_host=astra&url=${props.url}`;
9+
return <iframe width={300} height={600} src={_embed_url} />;
10+
}
11+
return <>NO FIGMA URL PROVIDED</>;
12+
}

editor/components/canvas/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from "./default-canvas";
2+
export * from "./figma-embed-canvas";

editor/components/figma/screen-importer.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ async function fetchDemo() {
4242
return demoEntryNode.document;
4343
}
4444

45-
export function FigmaScreenImporter(props: { onImported: OnImportedCallback }) {
45+
export function FigmaScreenImporter(props: {
46+
onImported: OnImportedCallback;
47+
onUrlEnter?: (url: string) => void;
48+
}) {
4649
const [reflect, setReflect] = useState<nodes.ReflectSceneNode>();
4750

4851
const handleLocalDataLoad = (d: remote.types.Node) => {
@@ -71,7 +74,10 @@ export function FigmaScreenImporter(props: { onImported: OnImportedCallback }) {
7174
) : (
7275
<>
7376
<_DefaultImporterSegment onLoaded={handleLocalDataLoad} />
74-
<_UrlImporterSegment onLoaded={handleLocalDataLoad} />
77+
<_UrlImporterSegment
78+
onLoaded={handleLocalDataLoad}
79+
onUrlEnter={props.onUrlEnter}
80+
/>
7581
</>
7682
)}
7783
</>
@@ -99,12 +105,16 @@ function _DefaultImporterSegment(props: { onLoaded: _OnRemoteLoadedCallback }) {
99105

100106
const _FIGMA_FILE_URL_IMPORT_INPUT_CACHE_KEY =
101107
"_FIGMA_FILE_URL_IMPORT_INPUT_CACHE_KEY";
102-
function _UrlImporterSegment(props: { onLoaded: _OnRemoteLoadedCallback }) {
108+
function _UrlImporterSegment(props: {
109+
onLoaded: _OnRemoteLoadedCallback;
110+
onUrlEnter?: (url: string) => void;
111+
}) {
103112
let urlInput: string = UserInputCache.load(
104113
_FIGMA_FILE_URL_IMPORT_INPUT_CACHE_KEY
105114
);
106115

107116
const handleEnter = () => {
117+
props.onUrlEnter?.(urlInput);
108118
UserInputCache.set(_FIGMA_FILE_URL_IMPORT_INPUT_CACHE_KEY, urlInput);
109119
const q = utils.figmaApi.parseFileAndNodeIdFromUrl_Figma(urlInput);
110120
fetchTarget(q.file, q.node).then((d) => {
Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
import React, { useState } from "react";
2-
import { figmacomp, canvas, runner } from "../../../components";
2+
import { figmacomp, canvas } from "../../../components";
33
import { ReflectSceneNode } from "@design-sdk/core/nodes";
44
import JSONTree from "react-json-tree";
55

66
export default function FigmaToReflectNodePage() {
77
const [reflect, setReflect] = useState<ReflectSceneNode>();
8+
const [figmaNodeUrl, setFigmaNodeUrl] = useState<string>();
89

910
const handleOnDesignImported = (reflect: ReflectSceneNode) => {
1011
setReflect(reflect);
1112
};
1213

14+
const handleFigmaUrlEnter = (url: string) => {
15+
setFigmaNodeUrl(url);
16+
};
17+
1318
return (
1419
<>
15-
<canvas.DefaultCanvas />
16-
<figmacomp.FigmaScreenImporter onImported={handleOnDesignImported} />
17-
<JSONTree data={reflect} />
20+
<canvas.FigmaEmbedCanvas url={figmaNodeUrl} />
21+
<figmacomp.FigmaScreenImporter
22+
onImported={handleOnDesignImported}
23+
onUrlEnter={handleFigmaUrlEnter}
24+
/>
25+
<JSONTree hideRoot data={reflect} />
1826
</>
1927
);
2028
}

0 commit comments

Comments
 (0)