From f113a393e66e6e77ec178ababf01b0209b4cd1f3 Mon Sep 17 00:00:00 2001 From: Aakansha Doshi Date: Tue, 23 May 2023 16:47:52 +0530 Subject: [PATCH] preserve bindings if present and fix testcases --- src/data/restore.ts | 2 -- src/data/types.ts | 2 ++ src/element/newElement.ts | 24 +++++++++++++++++++----- src/tests/data/restore.test.ts | 5 ++--- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/data/restore.ts b/src/data/restore.ts index 3bb51839b6..e6cb89c816 100644 --- a/src/data/restore.ts +++ b/src/data/restore.ts @@ -154,7 +154,6 @@ export const restoreElementWithProperties = < if (PRECEDING_ELEMENT_KEY in element) { base[PRECEDING_ELEMENT_KEY] = element[PRECEDING_ELEMENT_KEY]; } - return { ...base, ...getNormalizedDimensions(base), @@ -237,7 +236,6 @@ const restoreElement = ( startArrowhead = null, endArrowhead = element.type === "arrow" ? "arrow" : null, } = element; - let x = element.x; let y = element.y; let points = // migrate old arrow model to new one diff --git a/src/data/types.ts b/src/data/types.ts index b15439e49b..56a2ddbc89 100644 --- a/src/data/types.ts +++ b/src/data/types.ts @@ -1,4 +1,5 @@ import { + Arrowhead, ExcalidrawBindableElement, ExcalidrawElement, FontFamilyValues, @@ -89,6 +90,7 @@ export interface ImportedDataState { end?: { type: ExcalidrawBindableElement["type"]; } & MarkOptional; + endArrowhead?: Arrowhead | null; } & ElementConstructorOpts) )[] | null; diff --git a/src/element/newElement.ts b/src/element/newElement.ts index bd3123a4cd..27257088ba 100644 --- a/src/element/newElement.ts +++ b/src/element/newElement.ts @@ -733,10 +733,18 @@ export const convertToExcalidrawElements = ( } as ExcalidrawTextElement; res.push(excalidrawElement); } else if (element.type === "arrow" || element.type === "line") { - //@ts-ignore - const { start, end, type, endArrowHead, ...rest } = element; + const { + //@ts-ignore + start, + //@ts-ignore + end, + type, + //@ts-ignore + endArrowhead = element.type === "arrow" ? "arrow" : null, + ...rest + } = element; - excalidrawElement = { + excalidrawElement = newLinearElement({ type, width: 200, height: 24, @@ -744,10 +752,16 @@ export const convertToExcalidrawElements = ( [0, 0], [200, 0], ], - endArrowhead: endArrowHead || type === "arrow" ? "arrow" : null, + endArrowhead, ...rest, - } as ExcalidrawLinearElement; + }); + mutateElement(excalidrawElement, { + //@ts-ignore + startBinding: element?.startBinding || null, + //@ts-ignore + endBinding: element.endBinding || null, + }); let startBoundElement; let endBoundElement; if (start) { diff --git a/src/tests/data/restore.test.ts b/src/tests/data/restore.test.ts index aaa2f087a8..cea9315d04 100644 --- a/src/tests/data/restore.test.ts +++ b/src/tests/data/restore.test.ts @@ -139,9 +139,8 @@ describe("restoreElements", () => { expect(restoredArrow).toMatchSnapshot({ seed: expect.any(Number) }); }); - it("when arrow element has defined endArrowHead", () => { + it('should set arrow element endArrowHead as "arrow" when arrow element endArrowHead is null', () => { const arrowElement = API.createElement({ type: "arrow" }); - const restoredElements = restore.restoreElements([arrowElement], null); const restoredArrow = restoredElements[0] as ExcalidrawLinearElement; @@ -149,7 +148,7 @@ describe("restoreElements", () => { expect(arrowElement.endArrowhead).toBe(restoredArrow.endArrowhead); }); - it("when arrow element has undefined endArrowHead", () => { + it('should set arrow element endArrowHead as "arrow" when arrow element endArrowHead is undefined', () => { const arrowElement = API.createElement({ type: "arrow" }); Object.defineProperty(arrowElement, "endArrowhead", { get: jest.fn(() => undefined),