From 32aaa8b95df59e751096ed50ae783c21b201c17b Mon Sep 17 00:00:00 2001 From: Aakansha Doshi Date: Mon, 15 May 2023 16:32:56 +0530 Subject: [PATCH] fix api and support individual shapes and text element --- src/components/App.tsx | 1 - src/data/restore.ts | 4 ++-- src/data/types.ts | 20 +++++++--------- src/element/newElement.ts | 49 +++++++++++++++++++++++++++++++++----- src/element/textElement.ts | 3 --- 5 files changed, 53 insertions(+), 24 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index f587a95a66..adb7dcf224 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1546,7 +1546,6 @@ class App extends React.Component { let file = event?.clipboardData?.files[0]; const data = await parseClipboard(event, isPlainPaste); - if (!file && data.text && !isPlainPaste) { const string = data.text.trim(); if (string.startsWith("")) { diff --git a/src/data/restore.ts b/src/data/restore.ts index 9613ba261d..8bf2bf9721 100644 --- a/src/data/restore.ts +++ b/src/data/restore.ts @@ -122,8 +122,8 @@ const restoreElementWithProperties = < y: extra.y ?? element.y ?? 0, strokeColor: element.strokeColor || oc.black, backgroundColor: element.backgroundColor || "transparent", - width: element.width || 100, - height: element.height || 100, + width: element.width, + height: element.height, seed: element.seed ?? 1, groupIds: element.groupIds ?? [], roundness: element.roundness diff --git a/src/data/types.ts b/src/data/types.ts index 4b3565f062..d7f1ee333d 100644 --- a/src/data/types.ts +++ b/src/data/types.ts @@ -38,21 +38,17 @@ export interface ImportedDataState { elements?: | readonly ( | (ExcalidrawElement & { - label?: [ - { text: string } & MarkOptional< - ElementConstructorOpts, - "x" | "y" - >, - ]; + label?: { text: string } & MarkOptional< + ElementConstructorOpts, + "x" | "y" + >; }) | { type: Exclude; - label?: [ - { text: string } & MarkOptional< - ElementConstructorOpts, - "x" | "y" - >, - ] & + label?: { text: string } & MarkOptional< + ElementConstructorOpts, + "x" | "y" + > & MarkOptional; } )[] diff --git a/src/element/newElement.ts b/src/element/newElement.ts index 350268c9dd..9a72d7834c 100644 --- a/src/element/newElement.ts +++ b/src/element/newElement.ts @@ -50,6 +50,12 @@ import { isArrowElement } from "./typeChecks"; import { MarkOptional, Merge, Mutable } from "../utility-types"; import { ImportedDataState } from "../data/types"; +const ELEMENTS_SUPPORTING_PROGRAMMATIC_API = [ + "rectangle", + "ellipse", + "diamond", + "text", +]; export type ElementConstructorOpts = MarkOptional< Omit, | "width" @@ -95,6 +101,7 @@ const _newElementBase = ( ...rest }: ElementConstructorOpts & Omit, "type">, ) => { + console.log("width", width); // assign type to guard against excess properties const element: Merge = { id: rest.id || randomId(), @@ -143,7 +150,6 @@ const getTextElementPositionOffsets = ( height: number; }, ) => { - console.log("metrics", metrics); return { x: opts.textAlign === "center" @@ -655,25 +661,56 @@ export const convertToExcalidrawElements = ( if (!elements) { return []; } + console.log(elements, "ele "); elements.forEach((element) => { if (!element) { return; } - const textElement = element.label?.find((child) => child.text !== null); if ( isValidTextContainer(element) && - textElement && + element?.label?.text && (element.type === "rectangle" || element.type === "ellipse" || element.type === "diamond") ) { - const elements = bindTextToContainer(element, textElement); + const elements = bindTextToContainer(element, element.label); res.push(...elements); } else { + let excalidrawElement; + if (element.type === "text") { + //@ts-ignore + excalidrawElement = newTextElement({ + //@ts-ignore + x: 0, + //@ts-ignore + y: 0, + ...element, + }); + } else { + //@ts-ignore + excalidrawElement = newElement({ + x: 0, + y: 0, + + ...element, + width: + //@ts-ignore + element?.width || + (ELEMENTS_SUPPORTING_PROGRAMMATIC_API.includes(element.type) + ? 100 + : 0), + height: + //@ts-ignore + element?.height || + (ELEMENTS_SUPPORTING_PROGRAMMATIC_API.includes(element.type) + ? 100 + : 0), + }); + } //@ts-ignore - res.push(element); + + res.push(excalidrawElement); } }); - return res; }; diff --git a/src/element/textElement.ts b/src/element/textElement.ts index 7afe0b12b0..a23bb2ce56 100644 --- a/src/element/textElement.ts +++ b/src/element/textElement.ts @@ -1,10 +1,7 @@ import { getFontString, arrayToMap, isTestEnv } from "../utils"; import { - ExcalidrawDiamondElement, ExcalidrawElement, - ExcalidrawEllipseElement, ExcalidrawGenericElement, - ExcalidrawRectangleElement, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer,