Browse Source

feat: add switch tab by tab title option

Ahmad Kholid 2 years ago
parent
commit
c92429684a

+ 8 - 2
src/background/workflowEngine/blocksHandler/handlerSwitchTab.js

@@ -22,11 +22,17 @@ export default async function ({ data, id }) {
     throw new Error('no-tab');
   }
 
+  const isTabsQuery = ['match-patterns', 'tab-title'];
   const tabs =
     findTabBy !== 'match-patterns' ? await browser.tabs.query({}) : [];
 
-  if (findTabBy === 'match-patterns') {
-    [tab] = await browser.tabs.query({ url: data.matchPattern });
+  if (isTabsQuery.includes(findTabBy)) {
+    const query = {};
+
+    if (data.findTabBy === 'match-patterns') query.url = data.matchPattern;
+    else if (data.findTabBy === 'tab-title') query.title = data.tabTitle;
+
+    [tab] = await browser.tabs.query(query);
 
     if (!tab) {
       if (data.createIfNoMatch) {

+ 11 - 2
src/components/newtab/workflow/edit/EditSwitchTab.vue

@@ -16,8 +16,8 @@
         {{ type.name }}
       </option>
     </ui-select>
-    <template v-if="data.findTabBy === 'match-patterns'">
-      <edit-autocomplete>
+    <template v-if="['match-patterns', 'tab-title'].includes(data.findTabBy)">
+      <edit-autocomplete v-if="data.findTabBy === 'match-patterns'">
         <ui-input
           :model-value="data.matchPattern"
           placeholder="https://example.com/*"
@@ -42,6 +42,14 @@
           </template>
         </ui-input>
       </edit-autocomplete>
+      <edit-autocomplete v-else-if="data.findTabBy === 'tab-title'">
+        <ui-input
+          :model-value="data.tabTitle"
+          label="Tab title"
+          class="w-full"
+          @change="updateData({ tabTitle: $event })"
+        />
+      </edit-autocomplete>
       <ui-checkbox
         :model-value="data.createIfNoMatch"
         class="mt-1"
@@ -92,6 +100,7 @@ const emit = defineEmits(['update:data']);
 const { t } = useI18n();
 const types = [
   { id: 'match-patterns', name: 'Match patterns' },
+  { id: 'tab-title', name: 'Tab title' },
   { id: 'next-tab', name: 'Next tab' },
   { id: 'prev-tab', name: 'Previous tab' },
   { id: 'tab-index', name: 'Tab index' },

+ 2 - 1
src/utils/shared.js

@@ -119,12 +119,13 @@ export const tasks = {
     outputs: 1,
     allowedInputs: true,
     maxConnection: 1,
-    refDataKeys: ['url', 'matchPattern'],
+    refDataKeys: ['url', 'matchPattern', 'tabTitle'],
     data: {
       disableBlock: false,
       description: '',
       url: '',
       tabIndex: 0,
+      tabTitle: '',
       matchPattern: '',
       activeTab: true,
       createIfNoMatch: false,