Browse Source

fix: double execution of a single path (#880)

Ahmad Kholid 2 years ago
parent
commit
786ebd0cab

+ 6 - 2
src/newtab/workflowEngine/WorkflowEngine.js

@@ -160,8 +160,12 @@ class WorkflowEngine {
       }, {});
       this.connectionsMap = edges.reduce(
         (acc, { sourceHandle, target, targetHandle }) => {
-          if (!acc[sourceHandle]) acc[sourceHandle] = [];
-          acc[sourceHandle].push({ id: target, targetHandle, sourceHandle });
+          if (!acc[sourceHandle]) acc[sourceHandle] = new Map();
+          acc[sourceHandle].set(target, {
+            id: target,
+            targetHandle,
+            sourceHandle,
+          });
 
           return acc;
         },

+ 5 - 1
src/newtab/workflowEngine/WorkflowWorker.js

@@ -93,7 +93,11 @@ class WorkflowWorker {
     if (this.engine.isDestroyed) return null;
 
     const outputId = `${blockId}-output-${outputIndex}`;
-    return this.engine.connectionsMap[outputId] || null;
+    const connections = this.engine.connectionsMap[outputId];
+
+    if (!connections) return null;
+
+    return [...connections.values()];
   }
 
   executeNextBlocks(connections, prevBlockData) {

+ 7 - 4
src/newtab/workflowEngine/blocksHandler/handlerBlockPackage.js

@@ -44,7 +44,7 @@ export default async function (
         this.engine.connectionsMap[`${id}-output-${output.id}`];
       if (!connection) return;
 
-      connections[addBlockPrefix(output.handleId)] = [...connection];
+      connections[addBlockPrefix(output.handleId)] = [...connection.values()];
     });
 
     data.data.nodes.forEach((node) => {
@@ -60,9 +60,12 @@ export default async function (
       if (outputsMap.has(sourceHandle)) return;
 
       const nodeSourceHandle = addBlockPrefix(sourceHandle);
-      if (!connections[nodeSourceHandle]) connections[nodeSourceHandle] = [];
-      connections[nodeSourceHandle].push({
-        id: addBlockPrefix(target),
+      if (!connections[nodeSourceHandle])
+        connections[nodeSourceHandle] = new Map();
+
+      const connectionId = addBlockPrefix(target);
+      connections[nodeSourceHandle].set(connectionId, {
+        id: connectionId,
         sourceHandle: nodeSourceHandle,
         targetHandle: addBlockPrefix(targetHandle),
       });

+ 2 - 2
src/newtab/workflowEngine/blocksHandler/handlerBlocksGroup.js

@@ -25,9 +25,9 @@ function blocksGroup({ data, id }, { prevBlockData }) {
           const outputId = `${block.itemId}-output-1`;
 
           if (!acc.connections[outputId]) {
-            acc.connections[outputId] = [];
+            acc.connections[outputId] = new Map();
           }
-          acc.connections[outputId].push({ id: nextBlock });
+          acc.connections[outputId].set(nextBlock, { id: nextBlock });
         }
 
         return acc;

+ 2 - 1
src/newtab/workflowEngine/blocksHandler/handlerWaitConnections.js

@@ -10,9 +10,10 @@ async function waitConnections({ data, id }, { prevBlock }) {
     const registerConnections = () => {
       const connections = this.engine.connectionsMap;
       Object.keys(connections).forEach((key) => {
-        const isConnected = connections[key].some(
+        const isConnected = [...connections[key].values()].some(
           (connection) => connection.id === id
         );
+        console.log(isConnected, [...connections[key].values()]);
         if (!isConnected) return;
 
         const index = key.indexOf('-output');