Parcourir la source

fix: Paste clipboard contents into unbound text elements (#5849)

* Fix #5848.

* Add test.

* some tweaks

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
DanielJGeiger il y a 2 ans
Parent
commit
a0ecfed4cd
2 fichiers modifiés avec 26 ajouts et 8 suppressions
  1. 21 0
      src/element/textWysiwyg.test.tsx
  2. 5 8
      src/element/textWysiwyg.tsx

+ 21 - 0
src/element/textWysiwyg.test.tsx

@@ -435,6 +435,25 @@ describe("textWysiwyg", () => {
       );
       expect(h.state.zoom.value).toBe(1);
     });
+
+    it("should paste text correctly", async () => {
+      Keyboard.keyPress(KEYS.ENTER);
+      await new Promise((r) => setTimeout(r, 0));
+      const text = "A quick brown fox jumps over the lazy dog.";
+
+      //@ts-ignore
+      textarea.onpaste({
+        preventDefault: () => {},
+        //@ts-ignore
+        clipboardData: {
+          getData: () => text,
+        },
+      });
+
+      await new Promise((cb) => setTimeout(cb, 0));
+      textarea.blur();
+      expect(textElement.text).toBe(text);
+    });
   });
 
   describe("Test container-bound text", () => {
@@ -916,6 +935,8 @@ describe("textWysiwyg", () => {
       editor.blur();
       expect(rectangle.width).toBe(110);
       expect(rectangle.height).toBe(210);
+      const textElement = h.elements[1] as ExcalidrawTextElement;
+      expect(textElement.text).toBe(wrappedText);
     });
   });
 });

+ 5 - 8
src/element/textWysiwyg.tsx

@@ -290,17 +290,14 @@ export const textWysiwyg = ({
         fontSize: app.state.currentItemFontSize,
         fontFamily: app.state.currentItemFontFamily,
       });
+      const wrappedText = container
+        ? wrapText(data, font, getMaxContainerWidth(container))
+        : data;
 
-      const wrappedText = wrapText(
-        data,
-        font,
-        getMaxContainerWidth(container!),
-      );
       const dimensions = measureText(wrappedText, font);
       editable.style.height = `${dimensions.height}px`;
-      if (data) {
-        onChange(wrappedText);
-      }
+
+      onChange(wrappedText);
     };
     editable.oninput = () => {
       const updatedTextElement = Scene.getScene(element)?.getElement(