From 210916cdb91b0dba661b0a4bc2f6bee03ebd180c Mon Sep 17 00:00:00 2001
From: mgfcf <m.giller.dev@gmail.com>
Date: Thu, 23 Dec 2021 18:29:45 +0100
Subject: [PATCH] Implemented drag to click handling into tool and state

---
 editor/js/editor.js     | 13 ++-----------
 editor/js/state.js      | 13 +++++++++++++
 editor/js/tools/tool.js |  6 ++++++
 3 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/editor/js/editor.js b/editor/js/editor.js
index eebae44..ae1f5c4 100644
--- a/editor/js/editor.js
+++ b/editor/js/editor.js
@@ -3,7 +3,7 @@ import * as Graph from "./graph";
 import { loadGraphJson } from "../../datasets/datasets";
 import ForceGraph from "force-graph";
 import * as Interactions from "./interactions";
-import { DRAG_THRESHOLD_2D, setSpace, SPACE } from "../../config";
+import { setSpace, SPACE } from "../../config";
 
 export var state = undefined;
 export var graph = undefined;
@@ -57,7 +57,7 @@ function load() {
         .linkColor((link) => state.linkColor(link))
         .nodeColor((node) => state.nodeColor(node))
         .onNodeClick((node) => state.onNodeClick(node))
-        .onNodeDragEnd((node, translate) => onNodeDragEnd(node, translate))
+        .onNodeDragEnd((node, translate) => state.onNodeDragEnd(node, translate))
         .autoPauseRedraw(false) // keep redrawing after engine has stopped
         .linkWidth((link) => state.linkWidth(link))
         .linkDirectionalParticles(state.linkDirectionalParticles())
@@ -81,12 +81,3 @@ function load() {
         graphObj.graphData(data);
     });
 }
-
-function onNodeDragEnd(node, translate) {
-    if (
-        Math.sqrt(Math.pow(translate.x, 2) + Math.pow(translate.y, 2)) <
-        DRAG_THRESHOLD_2D
-    ) {
-        state.onNodeClick(node);
-    }
-}
diff --git a/editor/js/state.js b/editor/js/state.js
index 1672b39..b2f158c 100644
--- a/editor/js/state.js
+++ b/editor/js/state.js
@@ -10,6 +10,7 @@ import SaveTool from "./tools/savetool";
 import { graph } from "./editor";
 import Toolbar from "./toolbar";
 import * as Graph from "./graph";
+import { DRAG_THRESHOLD_2D } from "../../config";
 
 export const TOOLS = {
     undo: new UndoTool("undo"),
@@ -86,6 +87,18 @@ export class State extends Tool {
         this.tool.onNodeClick(node);
     }
 
+    onNodeDragEnd(node, translate) {
+        // Handle as click event, if drag distance under a certain threshold
+        var distanceDragged = Math.sqrt(Math.pow(translate.x, 2) + Math.pow(translate.y, 2));
+        if (distanceDragged < DRAG_THRESHOLD_2D) {
+            this.onNodeClick(node);
+            return;
+            
+        } else {
+            this.tool.onNodeDragEnd(node, translate);
+        }
+    }
+
     onLinkClick(link) {
         this.tool.onLinkClick(link);
     }
diff --git a/editor/js/tools/tool.js b/editor/js/tools/tool.js
index 31ee19a..c19314b 100644
--- a/editor/js/tools/tool.js
+++ b/editor/js/tools/tool.js
@@ -64,6 +64,12 @@ export default class Tool {
         }
     }
 
+    onNodeDragEnd(node, translate) {
+        if (this.warnings) {
+            console.warn('Method "onNodeDragEnd" not implemented.');
+        }
+    }
+
     onLinkClick(link) {
         if (this.warnings) {
             console.warn('Method "onLinkClick" not implemented.');
-- 
GitLab