Browse Source

fix: execute workflow block

Ahmad Kholid 2 years ago
parent
commit
a45cf4eaee

+ 23 - 4
src/background/workflowEngine/blocksHandler/handlerExecuteWorkflow.js

@@ -36,13 +36,32 @@ function workflowListener(workflow, options) {
   });
 }
 
+function findWorkflow(workflows, workflowId) {
+  const workflow = Array.isArray(workflows)
+    ? workflows.find(({ id }) => id === workflowId)
+    : workflows[workflowId];
+
+  return workflow;
+}
+
 async function executeWorkflow({ id: blockId, data }) {
   if (data.workflowId === '') throw new Error('empty-workflow');
 
-  const { workflows } = await browser.storage.local.get('workflows');
-  let workflow = Array.isArray(workflows)
-    ? workflows.find(({ id }) => id === data.workflowId)
-    : workflows[data.workflowId];
+  const { workflows, teamWorkflows } = await browser.storage.local.get([
+    'workflows',
+    'teamWorkflows',
+  ]);
+  let workflow = null;
+
+  if (data.workflowId.startsWith('team')) {
+    const teamWorkflowsArr = Object.values(
+      Object.values(teamWorkflows || {})[0] ?? {}
+    );
+    workflow = findWorkflow(teamWorkflowsArr, data.workflowId);
+  } else {
+    workflow = findWorkflow(workflows, data.workflowId);
+  }
+
   if (!workflow) {
     const errorInstance = new Error('no-workflow');
     errorInstance.data = { workflowId: data.workflowId };

+ 0 - 1
src/components/block/BlockConditions.vue

@@ -1,7 +1,6 @@
 <template>
   <block-base
     :id="componentId"
-    :data-position="JSON.stringify(position)"
     class="w-64"
     @edit="$emit('edit')"
     @delete="$emit('delete', id)"

+ 31 - 11
src/components/newtab/workflow/edit/EditExecuteWorkflow.vue

@@ -13,13 +13,24 @@
       class="w-full mb-2"
       @change="updateData({ workflowId: $event })"
     >
-      <option
-        v-for="workflow in workflows"
-        :key="workflow.id"
-        :value="workflow.id"
-      >
-        {{ workflow.name }}
-      </option>
+      <optgroup label="Local">
+        <option
+          v-for="workflow in workflows"
+          :key="workflow.id"
+          :value="workflow.id"
+        >
+          {{ workflow.name }}
+        </option>
+      </optgroup>
+      <optgroup v-if="route.params.teamId" label="Team">
+        <option
+          v-for="workflow in teamWorkflows"
+          :key="workflow.id"
+          :value="workflow.id"
+        >
+          {{ workflow.name }}
+        </option>
+      </optgroup>
     </ui-select>
     <ui-input
       :model-value="data.executeId"
@@ -83,6 +94,7 @@ import { computed, shallowReactive, defineAsyncComponent } from 'vue';
 import { useI18n } from 'vue-i18n';
 import { useRoute } from 'vue-router';
 import { useWorkflowStore } from '@/stores/workflow';
+import { useTeamWorkflowStore } from '@/stores/teamWorkflow';
 
 const SharedCodemirror = defineAsyncComponent(() =>
   import('@/components/newtab/shared/SharedCodemirror.vue')
@@ -103,21 +115,29 @@ const emit = defineEmits(['update:data']);
 const { t } = useI18n();
 const route = useRoute();
 const workflowStore = useWorkflowStore();
+const teamWorkflowStore = useTeamWorkflowStore();
 
 const state = shallowReactive({
   showGlobalData: false,
 });
 
-const workflows = computed(() =>
-  workflowStore.getWorkflows
+const filterWorkflows = (workflows) =>
+  workflows
     .filter(({ id, drawflow }) => {
       const flow =
         typeof drawflow === 'string' ? drawflow : JSON.stringify(drawflow);
 
       return id !== route.params.id && !flow.includes(route.params.id);
     })
-    .sort((a, b) => (a.name > b.name ? 1 : -1))
-);
+    .sort((a, b) => (a.name > b.name ? 1 : -1));
+
+const workflows = computed(() => filterWorkflows(workflowStore.getWorkflows));
+const teamWorkflows = computed(() => {
+  const { teamId } = route.params;
+  if (!teamId) return [];
+
+  return filterWorkflows(teamWorkflowStore.getByTeam(teamId));
+});
 
 function updateData(value) {
   emit('update:data', { ...props.data, ...value });

+ 1 - 1
src/content/blocksHandler/handlerJavascriptCode.js

@@ -98,7 +98,7 @@ function javascriptCode(block) {
 
       script.setAttribute(scriptAttr, '');
       script.classList.add('automa-custom-js');
-      script.innerHTML = `(() => {
+      script.textContent = `(() => {
         ${automaScript}
 
         try {

+ 1 - 1
src/utils/shared.js

@@ -1,7 +1,6 @@
 import customBlocks from '@business/blocks';
 
 export const tasks = {
-  ...customBlocks,
   trigger: {
     name: 'Trigger',
     description: 'Block where workflow will start executing',
@@ -1262,6 +1261,7 @@ export const tasks = {
       dataColumn: '',
     },
   },
+  ...customBlocks,
 };
 
 export const categories = {