From 3a1890ec506c8040bb480d72060c78752d6eb4b1 Mon Sep 17 00:00:00 2001
From: Maximilian Giller <m.giller@tu-bs.de>
Date: Fri, 7 Jan 2022 15:57:27 +0100
Subject: [PATCH] Implemented deleting multiple nodes at once and disabling
 storing temporarily

---
 editor/js/graph.js       | 21 ++++++++++++++++++++-
 editor/js/manageddata.js | 13 +++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/editor/js/graph.js b/editor/js/graph.js
index 665a9e5..b8d432c 100644
--- a/editor/js/graph.js
+++ b/editor/js/graph.js
@@ -117,7 +117,7 @@ export class Graph extends ManagedData {
         var classIndex = this.nodeTypes.indexOf(typeClass);
 
         if (classIndex <= -1) {
-            return 'black';
+            return "black";
         }
 
         return COLOR_PALETTE[classIndex % COLOR_PALETTE.length];
@@ -139,6 +139,25 @@ export class Graph extends ManagedData {
         this.storeCurrentData("Deleted node with id [" + nodeId + "]");
     }
 
+    deleteNodes(nodeIds) {
+        if (nodeIds === undefined || nodeIds.length <= 0) {
+            return;
+        }
+
+        try {
+            this.disableStoring();
+
+            nodeIds.forEach((id) => {
+                this.deleteNode(id);
+            });
+        } finally {
+            // Gotta make sure that storing is turned back on again
+            this.enableStoring();
+        }
+
+        this.storeCurrentData("Deleted nodes with ids [" + nodeIds.join(",") + "]");
+    }
+
     stopPhysics() {
         this.data[GRAPH_NODES].forEach((n) => {
             n.fx = n.x;
diff --git a/editor/js/manageddata.js b/editor/js/manageddata.js
index c35a2bb..d5c01d4 100644
--- a/editor/js/manageddata.js
+++ b/editor/js/manageddata.js
@@ -8,6 +8,7 @@ export default class ManagedData {
         this.history = []; // Newest state is always at 0
         this.historyPosition = 0;
         this.savedHistoryId = 0;
+        this.storingEnabled = true;
 
         this.storeCurrentData("Initial state", false);
     }
@@ -39,6 +40,14 @@ export default class ManagedData {
         this.updateUnsavedChangesHandler();
     }
 
+    disableStoring() {
+        this.storingEnabled = false;
+    }
+
+    enableStoring() {
+        this.storingEnabled = true;
+    }
+
     onUndo() {}
     onRedo() {}
 
@@ -83,6 +92,10 @@ export default class ManagedData {
     }
 
     storeCurrentData(description, relevantChanges = true) {
+        if (this.storingEnabled === false) {
+            return;
+        }
+
         var formattedData = this.storableData(this.data);
 
         var nextId = 0;
-- 
GitLab