Browse Source

fix: manually confirm active wysiwyg on pointerdown

dwelle 4 years ago
parent
commit
3439da164d
3 changed files with 13 additions and 2 deletions
  1. 10 1
      src/components/App.tsx
  2. 1 1
      src/element/textWysiwyg.test.tsx
  3. 2 0
      src/element/textWysiwyg.tsx

+ 10 - 1
src/components/App.tsx

@@ -322,6 +322,8 @@ class App extends React.Component<AppProps, AppState> {
   private id: string;
   private history: History;
 
+  private activeWysiwyg: null | { handleSubmit: () => void } = null;
+
   constructor(props: AppProps) {
     super(props);
     const defaultAppState = getDefaultAppState();
@@ -1763,7 +1765,7 @@ class App extends React.Component<AppProps, AppState> {
       ]);
     };
 
-    textWysiwyg({
+    const { handleSubmit } = textWysiwyg({
       id: element.id,
       appState: this.state,
       canvas: this.canvas,
@@ -1787,6 +1789,7 @@ class App extends React.Component<AppProps, AppState> {
         }
       }),
       onSubmit: withBatchedUpdates(({ text, viaKeyboard }) => {
+        this.activeWysiwyg = null;
         const isDeleted = !text.trim();
         updateElement(text, isDeleted);
         // select the created text element only if submitting via keyboard
@@ -1828,6 +1831,8 @@ class App extends React.Component<AppProps, AppState> {
     // do an initial update to re-initialize element position since we were
     // modifying element's x/y for sake of editor (case: syncing to remote)
     updateElement(element.text);
+
+    this.activeWysiwyg = { handleSubmit };
   }
 
   private getTextElementAtPosition(
@@ -2285,6 +2290,10 @@ class App extends React.Component<AppProps, AppState> {
   ) => {
     event.persist();
 
+    if (this.activeWysiwyg) {
+      this.activeWysiwyg.handleSubmit();
+    }
+
     // remove any active selection when we start to interact with canvas
     // (mainly, we care about removing selection outside the component which
     //  would prevent our copy handling otherwise)

+ 1 - 1
src/element/textWysiwyg.test.tsx

@@ -16,7 +16,7 @@ describe("textWysiwyg", () => {
 
     const element = UI.createElement("text");
 
-    new Pointer("mouse").clickOn(element);
+    new Pointer("mouse").doubleClickOn(element);
     textarea = document.querySelector(
       ".excalidraw-textEditorContainer > textarea",
     )!;

+ 2 - 0
src/element/textWysiwyg.tsx

@@ -368,4 +368,6 @@ export const textWysiwyg = ({
   excalidrawContainer
     ?.querySelector(".excalidraw-textEditorContainer")!
     .appendChild(editable);
+
+  return { handleSubmit };
 };