From 6d56634289b3f730cedca85938561a006389b41a Mon Sep 17 00:00:00 2001 From: Aakansha Doshi Date: Mon, 19 Jun 2023 17:28:45 +0530 Subject: [PATCH] fix: do not bind text to container using text tool when it has text already (#6694) * fix: do not bind text to container using text tool when it has text already * Update src/element/textWysiwyg.test.tsx --- src/components/App.tsx | 5 +++- src/element/textWysiwyg.test.tsx | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index bbae21f0..16d0832c 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -3054,7 +3054,10 @@ class App extends React.Component { container, ); if (container && parentCenterPosition) { - shouldBindToContainer = true; + const boundTextElementToContainer = getBoundTextElement(container); + if (!boundTextElementToContainer) { + shouldBindToContainer = true; + } } let existingTextElement: NonDeleted | null = null; diff --git a/src/element/textWysiwyg.test.tsx b/src/element/textWysiwyg.test.tsx index 3892d703..7fb15398 100644 --- a/src/element/textWysiwyg.test.tsx +++ b/src/element/textWysiwyg.test.tsx @@ -1459,5 +1459,54 @@ describe("textWysiwyg", () => { }), ); }); + + it("shouldn't bind to container if container has bound text not centered and text tool is used", async () => { + expect(h.elements.length).toBe(1); + + Keyboard.keyPress(KEYS.ENTER); + + expect(h.elements.length).toBe(2); + + // Bind first text + let text = h.elements[1] as ExcalidrawTextElementWithContainer; + expect(text.containerId).toBe(rectangle.id); + let editor = getTextEditor(); + await new Promise((r) => setTimeout(r, 0)); + updateTextEditor(editor, "Hello!"); + expect( + (h.elements[1] as ExcalidrawTextElementWithContainer).verticalAlign, + ).toBe(VERTICAL_ALIGN.MIDDLE); + + fireEvent.click(screen.getByTitle("Align bottom")); + await new Promise((r) => setTimeout(r, 0)); + + editor.blur(); + + expect(rectangle.boundElements).toStrictEqual([ + { id: text.id, type: "text" }, + ]); + expect( + (h.elements[1] as ExcalidrawTextElementWithContainer).verticalAlign, + ).toBe(VERTICAL_ALIGN.BOTTOM); + + // Attempt to Bind 2nd text using text tool + UI.clickTool("text"); + mouse.clickAt( + rectangle.x + rectangle.width / 2, + rectangle.y + rectangle.height / 2, + ); + editor = getTextEditor(); + await new Promise((r) => setTimeout(r, 0)); + updateTextEditor(editor, "Excalidraw"); + editor.blur(); + + expect(h.elements.length).toBe(3); + expect(rectangle.boundElements).toStrictEqual([ + { id: h.elements[1].id, type: "text" }, + ]); + text = h.elements[2] as ExcalidrawTextElementWithContainer; + expect(text.containerId).toBe(null); + expect(text.text).toBe("Excalidraw"); + }); }); });