Browse Source

feat: toggle editor autocomplete

Ahmad Kholid 3 years ago
parent
commit
d5e101528c

+ 18 - 12
src/components/newtab/workflow/WorkflowEditBlock.vue

@@ -148,36 +148,42 @@ export default {
       }
     }
     function traceBlockData(
-      id,
-      { name, inputs, data },
+      blockId,
+      { name, inputs, data, id },
       blocks,
-      maxDepth = 100
+      maxDepth = 20
     ) {
-      if (maxDepth === 0) return;
+      const notFirstDepth = maxDepth !== 20;
 
-      if (maxDepth !== 100) {
+      if (maxDepth === 0 || (blockId === id && notFirstDepth)) return;
+
+      if (notFirstDepth) {
         if (name === 'blocks-group') getGroupBlockData(data.blocks);
         else addAutocompleteData(props.data.blockId, name, data);
       }
 
       inputs?.input_1?.connections.forEach(({ node }) => {
-        traceBlockData(id, blocks[node], blocks, maxDepth - 1);
+        traceBlockData(blockId, blocks[node], blocks, maxDepth - 1);
       });
     }
 
     watch(
       () => [props.data.blockId, props.data.itemId],
       () => {
-        const id = props.data.blockId;
+        const enableAutocomplete =
+          props.workflow.settings?.inputAutocomplete ?? true;
+
+        if (!enableAutocomplete) return;
 
-        if (
-          !props.autocomplete ||
-          !props.autocomplete[id] ||
-          props.dataChanged
-        ) {
+        const id = props.data.blockId;
+        const isDataChanging =
+          !props.autocomplete || !props.autocomplete[id] || props.dataChanged;
+        if (isDataChanging) {
           const blocks = props.editor.export().drawflow.Home.data;
           const currentBlock = blocks[id];
 
+          if (Object.keys(blocks).length > 32) return;
+
           if (props.data.isInGroup)
             getGroupBlockData(currentBlock.data.blocks, props.data.itemId);
 

+ 6 - 0
src/components/newtab/workflow/WorkflowSettings.vue

@@ -109,6 +109,11 @@ const settingItems = [
     name: t('workflow.settings.debugMode.title'),
     description: t('workflow.settings.debugMode.description'),
   },
+  {
+    id: 'inputAutocomplete',
+    name: t('workflow.settings.autocomplete.title'),
+    description: t('workflow.settings.autocomplete.description'),
+  },
   {
     id: 'reuseLastState',
     name: t('workflow.settings.reuseLastState.title'),
@@ -128,6 +133,7 @@ const settingItems = [
 
 const settings = reactive({
   restartTimes: 3,
+  inputAutocomplete: true,
 });
 
 async function onClearCacheClick() {

+ 4 - 0
src/locales/en/newtab.json

@@ -173,6 +173,10 @@
     "settings": {
       "saveLog": "Save workflow log",
       "executedBlockOnWeb": "Show executed block on web page",
+      "autocomplete": {
+        "title": "Autocomplete",
+        "description": "Enable autocomplete in the input block (disable if it makes Automa unstable)"
+      },
       "clearCache": {
         "title": "Clear cache",
         "description": "Clear cache (state and loop index) of the workflow",

+ 1 - 0
src/models/workflow.js

@@ -36,6 +36,7 @@ class Workflow extends Model {
         debugMode: false,
         restartTimes: 3,
         reuseLastState: false,
+        inputAutocomplete: true,
         onError: 'stop-workflow',
         executedBlockOnWeb: false,
       }),