Explorar o código

feat: add `nextBlockId` parameter in javascript block

Ahmad Kholid %!s(int64=2) %!d(string=hai) anos
pai
achega
f312a17d99

+ 19 - 1
src/components/block/BlockBase.vue

@@ -4,6 +4,15 @@
       class="top-0 w-full absolute block-menu-container hidden"
       style="transform: translateY(-100%)"
     >
+      <div>
+        <p
+          title="Block id (click to copy)"
+          class="dark:text-gray-300 px-1 inline-block block-menu"
+          @click="insertToClipboard"
+        >
+          {{ isCopied ? '✅ Copied' : blockId }}
+        </p>
+      </div>
       <div class="inline-flex items-center dark:text-gray-300 block-menu">
         <button
           v-if="!blockData.details?.disableDelete"
@@ -61,7 +70,7 @@
   </div>
 </template>
 <script setup>
-import { inject } from 'vue';
+import { inject, ref } from 'vue';
 import { excludeGroupBlocks } from '@/utils/shared';
 
 const props = defineProps({
@@ -84,8 +93,17 @@ const props = defineProps({
 });
 defineEmits(['delete', 'edit', 'update', 'settings']);
 
+const isCopied = ref(false);
 const workflowUtils = inject('workflow-utils', null);
 
+function insertToClipboard() {
+  navigator.clipboard.writeText(props.blockId);
+
+  isCopied.value = true;
+  setTimeout(() => {
+    isCopied.value = false;
+  }, 1000);
+}
 function handleStartDrag(event) {
   const payload = {
     data: props.data,

+ 21 - 3
src/workflowEngine/blocksHandler/handlerJavascriptCode.js

@@ -1,7 +1,7 @@
 import { customAlphabet } from 'nanoid/non-secure';
 import browser from 'webextension-polyfill';
 import cloneDeep from 'lodash.clonedeep';
-import { parseJSON } from '@/utils/helper';
+import { parseJSON, isObject } from '@/utils/helper';
 import {
   jsContentHandler,
   automaFetchClient,
@@ -105,7 +105,7 @@ async function executeInWebpage(args, target, worker) {
 }
 
 export async function javascriptCode({ outputs, data, ...block }, { refData }) {
-  const nextBlockId = this.getBlockConnections(block.id);
+  let nextBlockId = this.getBlockConnections(block.id);
 
   if (data.everyNewTab) {
     const isScriptExist = this.preloadScripts.some(({ id }) => id === block.id);
@@ -195,7 +195,25 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
       });
     }
 
-    if (result.columns.insert && result.columns.data) {
+    let insert = true;
+    if (isObject(result.columns.insert)) {
+      const { insert: insertData, nextBlockId: inputNextBlockId } =
+        result.columns.insert;
+
+      insert = Boolean(insertData);
+
+      if (inputNextBlockId) {
+        const customNextBlockId = this.getBlockConnections(inputNextBlockId);
+        if (!customNextBlockId)
+          throw new Error(`Can't find block with "${inputNextBlockId}" id`);
+
+        nextBlockId = customNextBlockId;
+      }
+    } else {
+      insert = result.columns.insert;
+    }
+
+    if (insert && result.columns.data) {
       const params = Array.isArray(result.columns.data)
         ? result.columns.data
         : [result.columns.data];