From 7a94ee31915e31c7ff0cc4d106e91498324befc8 Mon Sep 17 00:00:00 2001 From: Aakansha Doshi Date: Fri, 14 Jul 2023 20:10:02 +0530 Subject: [PATCH] Add new type excalidraw-api/clipboard for programmatic api --- src/clipboard.ts | 5 +++++ src/components/App.tsx | 6 +++++- src/constants.ts | 1 + src/data/transform.ts | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/clipboard.ts b/src/clipboard.ts index c13829b6a2..c0deb93af2 100644 --- a/src/clipboard.ts +++ b/src/clipboard.ts @@ -24,6 +24,7 @@ export interface ClipboardData { files?: BinaryFiles; text?: string; errorMessage?: string; + programmaticAPI?: boolean; } let CLIPBOARD = ""; @@ -48,6 +49,7 @@ const clipboardContainsElements = ( [ EXPORT_DATA_TYPES.excalidraw, EXPORT_DATA_TYPES.excalidrawClipboard, + EXPORT_DATA_TYPES.excalidrawClipboardWithAPI, ].includes(contents?.type) && Array.isArray(contents.elements) ) { @@ -191,6 +193,8 @@ export const parseClipboard = async ( try { const systemClipboardData = JSON.parse(systemClipboard); + const programmaticAPI = + systemClipboardData.type === EXPORT_DATA_TYPES.excalidrawClipboardWithAPI; if (clipboardContainsElements(systemClipboardData)) { return { elements: systemClipboardData.elements, @@ -198,6 +202,7 @@ export const parseClipboard = async ( text: isPlainPaste ? JSON.stringify(systemClipboardData.elements, null, 2) : undefined, + programmaticAPI, }; } } catch (e) {} diff --git a/src/components/App.tsx b/src/components/App.tsx index 61dc4078d4..8861cc9040 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -330,6 +330,7 @@ import { activeConfirmDialogAtom } from "./ActiveConfirmDialog"; import { actionWrapTextInContainer } from "../actions/actionBoundText"; import BraveMeasureTextError from "./BraveMeasureTextError"; import { activeEyeDropperAtom } from "./EyeDropper"; +import { convertToExcalidrawElements } from "../data/transform"; const AppContext = React.createContext(null!); const AppPropsContext = React.createContext(null!); @@ -1933,9 +1934,12 @@ class App extends React.Component { }, }); } else if (data.elements) { + const elements = data.programmaticAPI + ? convertToExcalidrawElements(data.elements) + : data.elements; // TODO remove formatting from elements if isPlainPaste this.addElementsFromPasteOrLibrary({ - elements: data.elements, + elements, files: data.files || null, position: "cursor", retainSeed: isPlainPaste, diff --git a/src/constants.ts b/src/constants.ts index bca7094c5e..b1742bac90 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -153,6 +153,7 @@ export const EXPORT_DATA_TYPES = { excalidraw: "excalidraw", excalidrawClipboard: "excalidraw/clipboard", excalidrawLibrary: "excalidrawlib", + excalidrawClipboardWithAPI: "excalidraw-api/clipboard", } as const; export const EXPORT_SOURCE = diff --git a/src/data/transform.ts b/src/data/transform.ts index 547222d749..aa2caf2528 100644 --- a/src/data/transform.ts +++ b/src/data/transform.ts @@ -136,6 +136,7 @@ export interface ExcalidrawProgrammaticAPI { | ExcalidrawSelectionElement | ExcalidrawImageElement | ExcalidrawFreeDrawElement + | ExcalidrawFrameElement > | ({ type: Extract;