Преглед изворни кода

fix: storage variable value not updated in execute workflow block (#1516)

Ahmad Kholid пре 1 година
родитељ
комит
e49509a8f5
2 измењених фајлова са 21 додато и 28 уклоњено
  1. 9 27
      src/workflowEngine/WorkflowEngine.js
  2. 12 1
      src/workflowEngine/WorkflowWorker.js

+ 9 - 27
src/workflowEngine/WorkflowEngine.js

@@ -491,35 +491,17 @@ class WorkflowEngine {
         'rw',
         dbStorage.tablesItems,
         dbStorage.tablesData,
-        dbStorage.variables,
         async () => {
-          if (tableId) {
-            await dbStorage.tablesItems.update(tableId, {
-              modifiedAt: Date.now(),
-              rowsCount: table.length,
-            });
-            await dbStorage.tablesData.where('tableId').equals(tableId).modify({
-              items: table,
-              columnsIndex: this.columns,
-            });
-          }
+          if (!tableId) return;
 
-          for (const key in variables) {
-            if (key.startsWith('$$')) {
-              const varName = key.slice(2);
-              const varValue = variables[key];
-
-              const variable =
-                (await dbStorage.variables
-                  .where('name')
-                  .equals(varName)
-                  .first()) || {};
-              variable.name = varName;
-              variable.value = varValue;
-
-              await dbStorage.variables.put(variable);
-            }
-          }
+          await dbStorage.tablesItems.update(tableId, {
+            modifiedAt: Date.now(),
+            rowsCount: table.length,
+          });
+          await dbStorage.tablesData.where('tableId').equals(tableId).modify({
+            items: table,
+            columnsIndex: this.columns,
+          });
         }
       );
 

+ 12 - 1
src/workflowEngine/WorkflowWorker.js

@@ -7,6 +7,7 @@ import {
   parseJSON,
   isObject,
 } from '@/utils/helper';
+import dbStorage from '@/db/storage';
 import templating from './templating';
 import renderString from './templating/renderString';
 import { convertData, waitTabLoaded } from './helper';
@@ -110,6 +111,7 @@ class WorkflowWorker {
   }
 
   setVariable(name, value) {
+    let variableName = name;
     const vars = this.engine.referenceData.variables;
 
     if (name.startsWith('$push:')) {
@@ -119,9 +121,18 @@ class WorkflowWorker {
       else if (!Array.isArray(vars[varName])) vars[varName] = [vars[varName]];
 
       vars[varName].push(value);
+      variableName = varName;
+    } else {
+      vars[name] = value;
+    }
+
+    if (variableName.startsWith('$$')) {
+      dbStorage.variables.put({
+        value,
+        name: variableName,
+      });
     }
 
-    vars[name] = value;
     this.engine.addRefDataSnapshot('variables');
   }