浏览代码

feat: add "prefer input params in tab" in trigger block

Ahmad Kholid 2 年之前
父节点
当前提交
5dedf9fe11

+ 2 - 0
src/components/newtab/workflow/edit/EditTrigger.vue

@@ -24,8 +24,10 @@
       content-class="max-w-4xl"
     >
       <edit-workflow-parameters
+        :prefer-tab="data.preferParamsInTab"
         :data="data.parameters"
         @update="updateData({ parameters: $event })"
+        @update:prefer-tab="updateData({ preferParamsInTab: $event })"
       />
     </ui-modal>
     <ui-modal

+ 14 - 4
src/components/newtab/workflow/edit/EditWorkflowParameters.vue

@@ -122,9 +122,18 @@
       </draggable>
     </table>
   </div>
-  <ui-button variant="accent" class="mt-4" @click="addParameter">
-    Add parameter
-  </ui-button>
+  <div class="flex items-center mt-4">
+    <ui-button variant="accent" @click="addParameter">
+      {{ $t('workflow.parameters.add') }}
+    </ui-button>
+    <div class="flex-grow" />
+    <ui-checkbox
+      :model-value="preferTab"
+      @change="$emit('update:preferTab', $event)"
+    >
+      {{ $t('workflow.parameters.preferInTab') }}
+    </ui-checkbox>
+  </div>
 </template>
 <script setup>
 import { reactive, watch } from 'vue';
@@ -141,8 +150,9 @@ const props = defineProps({
     type: Array,
     default: () => [],
   },
+  preferTab: Boolean,
 });
-const emit = defineEmits(['update']);
+const emit = defineEmits(['update', 'update:preferTab']);
 
 const customParameters = workflowParameters();
 

+ 8 - 0
src/content/commandPalette/App.vue

@@ -462,6 +462,14 @@ watch(
   }, 100)
 );
 
+window.initPaletteParams = (data) => {
+  paramsState.items = data.params;
+  paramsState.workflow = data.workflow;
+  paramsState.active = true;
+
+  state.active = true;
+};
+
 onMounted(() => {
   browser.storage.local.get('automaShortcut').then(({ automaShortcut }) => {
     if (Array.isArray(automaShortcut) && automaShortcut.length < 1) return;

+ 4 - 0
src/content/index.js

@@ -250,6 +250,10 @@ function messageListener({ data, source }) {
           });
       } else {
         switch (data.type) {
+          case 'input-workflow-params':
+            window.initPaletteParams?.(data.data);
+            resolve(Boolean(window.initPaletteParams));
+            break;
           case 'content-script-exists':
             resolve(true);
             break;

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

@@ -190,6 +190,10 @@
       "unpin": "Unpin workflow",
       "pinned": "Pinned workflows"
     },
+    "parameters": {
+      "add": "Add parameter",
+      "preferInTab": "Prefer input parameters in the tab"
+    },
     "my": "My workflows",
     "import": "Import workflow",
     "new": "New workflow",

+ 1 - 0
src/utils/shared.js

@@ -27,6 +27,7 @@ export const tasks = {
       contextMenuName: '',
       contextTypes: [],
       parameters: [],
+      preferParamsInTab: false,
       observeElement: {
         selector: '',
         baseSelector: '',

+ 19 - 0
src/workflowEngine/WorkflowEngine.js

@@ -143,6 +143,25 @@ class WorkflowEngine {
       if (hasParams) {
         this.eventListeners = {};
 
+        if (triggerBlock.data.preferParamsInTab) {
+          const [activeTab] = await browser.tabs.query({
+            active: true,
+            url: '*://*/*',
+            lastFocusedWindow: true,
+          });
+          if (activeTab) {
+            const result = await browser.tabs.sendMessage(activeTab.id, {
+              type: 'input-workflow-params',
+              data: {
+                workflow: this.workflow,
+                params: triggerBlock.data.parameters,
+              },
+            });
+
+            if (result) return;
+          }
+        }
+
         const paramUrl = browser.runtime.getURL('params.html');
         const tabs = await browser.tabs.query({});
         const paramTab = tabs.find((tab) => tab.url?.includes(paramUrl));