Bläddra i källkod

simulate a db tap on mobile to insert text (#1155)

Faustino Kialungila 5 år sedan
förälder
incheckning
56034eacb0
1 ändrade filer med 24 tillägg och 0 borttagningar
  1. 24 0
      src/components/App.tsx

+ 24 - 0
src/components/App.tsx

@@ -119,6 +119,7 @@ function withBatchedUpdates<
 
 const { history } = createHistory();
 
+let didTapTwice: boolean = false;
 let cursorX = 0;
 let cursorY = 0;
 let isHoldingSpace: boolean = false;
@@ -368,6 +369,7 @@ export class App extends React.Component<any, AppState> {
     document.addEventListener("copy", this.onCopy);
     document.addEventListener("paste", this.pasteFromClipboard);
     document.addEventListener("cut", this.onCut);
+    window.addEventListener("touchstart", this.onTapStart);
 
     document.addEventListener("keydown", this.onKeyDown, false);
     document.addEventListener("keyup", this.onKeyUp, { passive: true });
@@ -401,6 +403,7 @@ export class App extends React.Component<any, AppState> {
 
     document.removeEventListener("copy", this.onCopy);
     document.removeEventListener("paste", this.pasteFromClipboard);
+    window.removeEventListener("touchstart", this.onTapStart);
     document.removeEventListener("cut", this.onCut);
 
     document.removeEventListener("keydown", this.onKeyDown, false);
@@ -553,6 +556,27 @@ export class App extends React.Component<any, AppState> {
     );
   };
 
+  private onTapStart = (event: TouchEvent) => {
+    let timeoutId;
+    if (!didTapTwice) {
+      didTapTwice = true;
+      timeoutId = setTimeout(function () {
+        didTapTwice = false;
+      }, 300);
+      return false;
+    }
+    if (didTapTwice) {
+      const [touch] = event.touches;
+      // @ts-ignore
+      this.handleCanvasDoubleClick({
+        clientX: touch.clientX,
+        clientY: touch.clientY,
+      });
+      clearTimeout(timeoutId);
+    }
+    event.preventDefault();
+  };
+
   private pasteFromClipboard = withBatchedUpdates(
     async (event: ClipboardEvent | null) => {
       // #686