diff --git a/package.json b/package.json
index 21ba612c..34a7d50f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "automa",
- "version": "1.28.21",
+ "version": "1.28.22",
"description": "An extension for automating your browser by connecting blocks",
"repository": {
"type": "git",
diff --git a/src/newtab/pages/workflows/[id].vue b/src/newtab/pages/workflows/[id].vue
index 0ee74c19..690e7fae 100644
--- a/src/newtab/pages/workflows/[id].vue
+++ b/src/newtab/pages/workflows/[id].vue
@@ -1528,6 +1528,12 @@ function checkWorkflowUpdate() {
}
/* eslint-disable consistent-return */
function onBeforeLeave() {
+ // disselect node before leave
+ const selectedNodes = editor.value.getSelectedNodes.value;
+ selectedNodes?.forEach((node) => {
+ node.selected = false;
+ });
+
updateHostedWorkflow();
const dataNotChanged = !state.dataChanged || !haveEditAccess.value;
diff --git a/src/params/App.vue b/src/params/App.vue
index 6a2eef40..e1018482 100644
--- a/src/params/App.vue
+++ b/src/params/App.vue
@@ -48,7 +48,11 @@
- -
+
-
{{ param.description }}
diff --git a/src/workflowEngine/WorkflowWorker.js b/src/workflowEngine/WorkflowWorker.js
index 0268eeae..79f5192c 100644
--- a/src/workflowEngine/WorkflowWorker.js
+++ b/src/workflowEngine/WorkflowWorker.js
@@ -110,7 +110,7 @@ class WorkflowWorker {
currentColumn.index += 1;
}
- setVariable(name, value) {
+ async setVariable(name, value) {
let variableName = name;
const vars = this.engine.referenceData.variables;
@@ -127,10 +127,15 @@ class WorkflowWorker {
}
if (variableName.startsWith('$$')) {
- dbStorage.variables.put({
- value,
- name: variableName.slice(2),
+ variableName = variableName.slice(2);
+
+ const findStorageVar = await dbStorage.variables.get({
+ name: variableName,
});
+
+ if (findStorageVar)
+ await dbStorage.variables.update(findStorageVar.id, { value });
+ else await dbStorage.variables.add({ name: variableName, value });
}
this.engine.addRefDataSnapshot('variables');
@@ -392,7 +397,7 @@ class WorkflowWorker {
value = parseJSON(value, value);
if (item.type === 'variable') {
- this.setVariable(item.name, value);
+ await this.setVariable(item.name, value);
} else {
this.addDataToColumn(item.name, value);
}
diff --git a/src/workflowEngine/blocksHandler/handlerClipboard.js b/src/workflowEngine/blocksHandler/handlerClipboard.js
index a35568e6..f306b6d7 100644
--- a/src/workflowEngine/blocksHandler/handlerClipboard.js
+++ b/src/workflowEngine/blocksHandler/handlerClipboard.js
@@ -46,7 +46,7 @@ export default async function ({ data, id, label }) {
valueToReturn = copiedText;
if (data.assignVariable) {
- this.setVariable(data.variableName, copiedText);
+ await this.setVariable(data.variableName, copiedText);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, copiedText);
diff --git a/src/workflowEngine/blocksHandler/handlerCookie.js b/src/workflowEngine/blocksHandler/handlerCookie.js
index 3abc20df..2f8b7877 100644
--- a/src/workflowEngine/blocksHandler/handlerCookie.js
+++ b/src/workflowEngine/blocksHandler/handlerCookie.js
@@ -75,7 +75,7 @@ async function cookie({ data, id }) {
if (data.type === 'get') {
if (data.assignVariable) {
- this.setVariable(data.variableName, result);
+ await this.setVariable(data.variableName, result);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, result);
diff --git a/src/workflowEngine/blocksHandler/handlerDataMapping.js b/src/workflowEngine/blocksHandler/handlerDataMapping.js
index 4e121c15..9d2577b1 100644
--- a/src/workflowEngine/blocksHandler/handlerDataMapping.js
+++ b/src/workflowEngine/blocksHandler/handlerDataMapping.js
@@ -46,7 +46,7 @@ export async function dataMapping({ id, data }) {
}
if (data.assignVariable) {
- this.setVariable(data.variableName, dataToMap);
+ await this.setVariable(data.variableName, dataToMap);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, dataToMap);
diff --git a/src/workflowEngine/blocksHandler/handlerGoogleSheets.js b/src/workflowEngine/blocksHandler/handlerGoogleSheets.js
index 8eb1e745..c32801ff 100644
--- a/src/workflowEngine/blocksHandler/handlerGoogleSheets.js
+++ b/src/workflowEngine/blocksHandler/handlerGoogleSheets.js
@@ -154,7 +154,7 @@ export default async function ({ data, id }, { refData }) {
result = await getSpreadsheetRange(data);
if (data.assignVariable) {
- this.setVariable(data.variableName, result);
+ await this.setVariable(data.variableName, result);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, result);
@@ -172,7 +172,7 @@ export default async function ({ data, id }, { refData }) {
result = spreadsheetId;
if (data.assignVariable) {
- this.setVariable(data.variableName, result);
+ await this.setVariable(data.variableName, result);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, result);
diff --git a/src/workflowEngine/blocksHandler/handlerHandleDownload.js b/src/workflowEngine/blocksHandler/handlerHandleDownload.js
index ec983f6d..c283c0c8 100644
--- a/src/workflowEngine/blocksHandler/handlerHandleDownload.js
+++ b/src/workflowEngine/blocksHandler/handlerHandleDownload.js
@@ -48,7 +48,7 @@ async function handleDownload({ data, id: blockId }) {
this.addDataToColumn(data.dataColumn, downloadItem.filename);
}
if (data.assignVariable) {
- this.setVariable(data.variableName, downloadItem.filename);
+ await this.setVariable(data.variableName, downloadItem.filename);
}
return {
diff --git a/src/workflowEngine/blocksHandler/handlerInsertData.js b/src/workflowEngine/blocksHandler/handlerInsertData.js
index 47a8daf1..312828f2 100644
--- a/src/workflowEngine/blocksHandler/handlerInsertData.js
+++ b/src/workflowEngine/blocksHandler/handlerInsertData.js
@@ -81,7 +81,7 @@ async function insertData({ id, data }, { refData }) {
this.addDataToColumn(item.name, tableValue);
});
} else {
- this.setVariable(item.name, value);
+ await this.setVariable(item.name, value);
}
}
diff --git a/src/workflowEngine/blocksHandler/handlerInteractionBlock.js b/src/workflowEngine/blocksHandler/handlerInteractionBlock.js
index 6f6962b2..2d0ceb8a 100644
--- a/src/workflowEngine/blocksHandler/handlerInteractionBlock.js
+++ b/src/workflowEngine/blocksHandler/handlerInteractionBlock.js
@@ -69,7 +69,7 @@ async function interactionHandler(block) {
}
if (block.data.assignVariable) {
- this.setVariable(block.data.variableName, data);
+ await this.setVariable(block.data.variableName, data);
}
if (debugMode && isChrome) {
diff --git a/src/workflowEngine/blocksHandler/handlerJavascriptCode.js b/src/workflowEngine/blocksHandler/handlerJavascriptCode.js
index e1b7cf03..81e86b36 100644
--- a/src/workflowEngine/blocksHandler/handlerJavascriptCode.js
+++ b/src/workflowEngine/blocksHandler/handlerJavascriptCode.js
@@ -204,9 +204,11 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
}
if (result.variables) {
- Object.keys(result.variables).forEach((varName) => {
- this.setVariable(varName, result.variables[varName]);
- });
+ await Promise.allSettled(
+ Object.keys(result.variables).map(async (varName) => {
+ await this.setVariable(varName, result.variables[varName]);
+ })
+ );
}
let insert = true;
@@ -222,10 +224,21 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
insert = typeof insertData === 'boolean' ? insertData : true;
if (inputNextBlockId) {
- const customNextBlockId = this.getBlockConnections(inputNextBlockId);
+ let customNextBlockId = this.getBlockConnections(inputNextBlockId);
if (!customNextBlockId)
throw new Error(`Can't find block with "${inputNextBlockId}" id`);
+ const nextBlock = this.engine.blocks[inputNextBlockId];
+ if (!customNextBlockId && nextBlock) {
+ customNextBlockId = [
+ {
+ id: inputNextBlockId,
+ blockId: inputNextBlockId,
+ connections: new Map([]),
+ },
+ ];
+ }
+
nextBlockId = customNextBlockId;
}
} else {
diff --git a/src/workflowEngine/blocksHandler/handlerLogData.js b/src/workflowEngine/blocksHandler/handlerLogData.js
index 0e912af2..a679468c 100644
--- a/src/workflowEngine/blocksHandler/handlerLogData.js
+++ b/src/workflowEngine/blocksHandler/handlerLogData.js
@@ -22,7 +22,7 @@ export async function logData({ id, data }) {
logs = getTranslateLog(curWorkflowState, 'json');
if (data.assignVariable) {
- this.setVariable(data.variableName, logs);
+ await this.setVariable(data.variableName, logs);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, logs);
diff --git a/src/workflowEngine/blocksHandler/handlerParameterPrompt.js b/src/workflowEngine/blocksHandler/handlerParameterPrompt.js
index 6372a233..7c0de0c7 100644
--- a/src/workflowEngine/blocksHandler/handlerParameterPrompt.js
+++ b/src/workflowEngine/blocksHandler/handlerParameterPrompt.js
@@ -75,9 +75,11 @@ export default async function ({ data, id }) {
const result = await getInputtedParams(promptId, timeout);
- Object.entries(result).forEach(([varName, varValue]) => {
- this.setVariable(varName, varValue);
- });
+ await Promise.allSettled(
+ Object.entries(result).map(async ([varName, varValue]) =>
+ this.setVariable(varName, varValue)
+ )
+ );
return {
data: '',
diff --git a/src/workflowEngine/blocksHandler/handlerSaveAssets.js b/src/workflowEngine/blocksHandler/handlerSaveAssets.js
index b7bd3c29..bfea112f 100644
--- a/src/workflowEngine/blocksHandler/handlerSaveAssets.js
+++ b/src/workflowEngine/blocksHandler/handlerSaveAssets.js
@@ -60,7 +60,7 @@ export default async function ({ data, id, label }) {
if (data.saveDownloadIds) {
if (data.assignVariable) {
- this.setVariable(data.variableName, downloadIds);
+ await this.setVariable(data.variableName, downloadIds);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, downloadIds);
diff --git a/src/workflowEngine/blocksHandler/handlerSortData.js b/src/workflowEngine/blocksHandler/handlerSortData.js
index 78bec64f..513d12a9 100644
--- a/src/workflowEngine/blocksHandler/handlerSortData.js
+++ b/src/workflowEngine/blocksHandler/handlerSortData.js
@@ -54,7 +54,7 @@ export async function sliceData({ id, data }) {
});
if (data.assignVariable) {
- this.setVariable(data.variableName, sortedArray);
+ await this.setVariable(data.variableName, sortedArray);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, sortedArray);
diff --git a/src/workflowEngine/blocksHandler/handlerTabUrl.js b/src/workflowEngine/blocksHandler/handlerTabUrl.js
index 8a35db4a..17ecb30e 100644
--- a/src/workflowEngine/blocksHandler/handlerTabUrl.js
+++ b/src/workflowEngine/blocksHandler/handlerTabUrl.js
@@ -23,7 +23,7 @@ export async function logData({ id, data }) {
}
if (data.assignVariable) {
- this.setVariable(data.variableName, urls);
+ await this.setVariable(data.variableName, urls);
}
if (data.saveData) {
this.addDataToColumn(data.dataColumn, urls);
diff --git a/src/workflowEngine/blocksHandler/handlerTakeScreenshot.js b/src/workflowEngine/blocksHandler/handlerTakeScreenshot.js
index f2f9cf97..bf44b0ca 100644
--- a/src/workflowEngine/blocksHandler/handlerTakeScreenshot.js
+++ b/src/workflowEngine/blocksHandler/handlerTakeScreenshot.js
@@ -51,7 +51,8 @@ async function takeScreenshot({ data, id, label }) {
uri: dataUrl,
ext: data.ext,
});
- if (data.assignVariable) this.setVariable(data.variableName, dataUrl);
+ if (data.assignVariable)
+ await this.setVariable(data.variableName, dataUrl);
};
if (data.captureActiveTab) {
diff --git a/src/workflowEngine/blocksHandler/handlerWebhook.js b/src/workflowEngine/blocksHandler/handlerWebhook.js
index 3abab415..2d615cf2 100644
--- a/src/workflowEngine/blocksHandler/handlerWebhook.js
+++ b/src/workflowEngine/blocksHandler/handlerWebhook.js
@@ -105,7 +105,7 @@ export async function webhook({ data, id }, { refData }) {
}
if (data.assignVariable) {
- this.setVariable(data.variableName, returnData);
+ await this.setVariable(data.variableName, returnData);
}
if (data.saveData) {
if (data.dataColumn === '$assignColumns' && Array.isArray(returnData)) {