Explorar el Código

fix: block validation

Ahmad Kholid hace 2 años
padre
commit
96eba478ba

+ 79 - 60
src/components/newtab/workflow/edit/EditGoogleDrive.vue

@@ -1,66 +1,82 @@
 <template>
   <div>
-    <ui-textarea
-      :model-value="data.description"
-      class="w-full"
-      :placeholder="t('common.description')"
-      @change="updateData({ description: $event })"
-    />
-    <ui-select
-      :model-value="data.action"
-      class="w-full mt-4"
-      @change="updateData({ action: $event })"
-    >
-      <option v-for="action in actions" :key="action" :value="action">
-        {{ t(`workflow.blocks.google-drive.actions.${action}`) }}
-      </option>
-    </ui-select>
-    <div class="mt-4">
-      <ul class="space-y-2">
-        <li
-          v-for="(item, index) in filePaths"
-          :key="item.id"
-          class="p-2 border rounded-lg"
-        >
-          <div class="flex items-center">
-            <ui-select
-              v-model="item.type"
-              class="grow mr-2"
-              placeholder="File location"
-            >
-              <option value="url">URL</option>
-              <option value="local" :disabled="!hasFileAccess">
-                Local computer
-              </option>
-              <option value="downloadId" :disabled="!permissions.has.downloads">
-                Download id
-              </option>
-            </ui-select>
-            <ui-button icon @click="filePaths.splice(index, 1)">
-              <v-remixicon name="riDeleteBin7Line" />
-            </ui-button>
-          </div>
-          <edit-autocomplete>
-            <ui-input
-              v-model="item.name"
-              placeholder="Filename (optional)"
-              class="w-full mt-2"
-            />
-          </edit-autocomplete>
-          <edit-autocomplete>
-            <ui-input
-              v-model="item.path"
-              :placeholder="placeholders[item.type]"
-              title="File location"
-              class="w-full mt-2"
-            />
-          </edit-autocomplete>
-        </li>
-      </ul>
-      <ui-button class="mt-4" variant="accent" @click="addFile">
-        Add file
-      </ui-button>
+    <div v-if="!store.integrations.googleDrive">
+      <p>
+        You haven't
+        <a
+          href="https://docs.automa.site/integrations/google-drive.html"
+          target="_blank"
+          class="underline"
+          >connected Automa to Google Drive</a
+        >.
+      </p>
     </div>
+    <template v-else>
+      <ui-textarea
+        :model-value="data.description"
+        class="w-full"
+        :placeholder="t('common.description')"
+        @change="updateData({ description: $event })"
+      />
+      <ui-select
+        :model-value="data.action"
+        class="w-full mt-4"
+        @change="updateData({ action: $event })"
+      >
+        <option v-for="action in actions" :key="action" :value="action">
+          {{ t(`workflow.blocks.google-drive.actions.${action}`) }}
+        </option>
+      </ui-select>
+      <div class="mt-4">
+        <ul class="space-y-2">
+          <li
+            v-for="(item, index) in filePaths"
+            :key="item.id"
+            class="p-2 border rounded-lg"
+          >
+            <div class="flex items-center">
+              <ui-select
+                v-model="item.type"
+                class="grow mr-2"
+                placeholder="File location"
+              >
+                <option value="url">URL</option>
+                <option value="local" :disabled="!hasFileAccess">
+                  Local computer
+                </option>
+                <option
+                  value="downloadId"
+                  :disabled="!permissions.has.downloads"
+                >
+                  Download id
+                </option>
+              </ui-select>
+              <ui-button icon @click="filePaths.splice(index, 1)">
+                <v-remixicon name="riDeleteBin7Line" />
+              </ui-button>
+            </div>
+            <edit-autocomplete>
+              <ui-input
+                v-model="item.name"
+                placeholder="Filename (optional)"
+                class="w-full mt-2"
+              />
+            </edit-autocomplete>
+            <edit-autocomplete>
+              <ui-input
+                v-model="item.path"
+                :placeholder="placeholders[item.type]"
+                title="File location"
+                class="w-full mt-2"
+              />
+            </edit-autocomplete>
+          </li>
+        </ul>
+        <ui-button class="mt-4" variant="accent" @click="addFile">
+          Add file
+        </ui-button>
+      </div>
+    </template>
   </div>
 </template>
 <script setup>
@@ -69,6 +85,7 @@ import { useI18n } from 'vue-i18n';
 import { nanoid } from 'nanoid/non-secure';
 import cloneDeep from 'lodash.clonedeep';
 import browser from 'webextension-polyfill';
+import { useStore } from '@/stores/main';
 import { useHasPermissions } from '@/composable/hasPermissions';
 import EditAutocomplete from './EditAutocomplete.vue';
 
@@ -85,6 +102,8 @@ const props = defineProps({
 const emit = defineEmits(['update:data']);
 
 const { t } = useI18n();
+const store = useStore();
+store.checkGDriveIntegration();
 
 const actions = ['upload'];
 const placeholders = {

+ 4 - 1
src/components/newtab/workflow/edit/EditGoogleSheets.vue

@@ -17,7 +17,10 @@
     </ui-select>
     <slot />
     <edit-autocomplete
-      v-if="!googleDrive || data.inputSpreadsheetId === 'manually'"
+      v-if="
+        !googleDrive ||
+        (data.inputSpreadsheetId === 'manually' && data.type !== 'create')
+      "
     >
       <ui-input
         :model-value="data.spreadsheetId"

+ 4 - 1
src/components/newtab/workflow/edit/EditGoogleSheetsDrive.vue

@@ -2,7 +2,10 @@
   <div v-if="!store.integrations.googleDrive">
     <p>
       You haven't
-      <a href="https://google.com" target="_blank" class="underline"
+      <a
+        href="https://docs.automa.site/integrations/google-drive.html"
+        target="_blank"
+        class="underline"
         >connected Automa to Google Drive</a
       >.
     </p>

+ 1 - 1
src/components/newtab/workflow/editor/EditorSearchBlocks.vue

@@ -49,7 +49,7 @@
         </div>
         <span
           title="Block id"
-          class="text-overflow bg-box-transparent w-16 rounded-md p-1 text-xs text-gray-600 dark:text-gray-300"
+          class="text-overflow text-center bg-box-transparent w-16 rounded-md p-1 text-xs text-gray-600 dark:text-gray-300"
         >
           {{ item.id }}
         </span>

+ 3 - 0
src/content/services/webService.js

@@ -226,6 +226,9 @@ window.addEventListener('app-mounted', async () => {
           refresh: session.provider_refresh_token,
         };
       }
+      if (!isGoogleProvider) {
+        browser.storage.local.remove('sessionToken');
+      }
 
       await browser.storage.local.set(saveToStorage);
     };

+ 4 - 10
src/stores/main.js

@@ -51,19 +51,13 @@ export const useStore = defineStore('main', {
     },
     async checkGDriveIntegration(force = false) {
       try {
-        if (!this.integrationsRetrieved.googleDrive && !force) return;
+        if (this.integrationsRetrieved.googleDrive && !force) return;
 
-        const { sessionToken } = await browser.storage.local.get(
-          'sessionToken'
-        );
-        if (!sessionToken) return;
-
-        const response = await fetch(
-          `https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=${sessionToken.access}`
+        const result = await fetchGapi(
+          `https://www.googleapis.com/oauth2/v1/tokeninfo`
         );
-        if (!response.ok) throw new Error(response.statusText);
+        if (!result) return;
 
-        const result = response.json();
         this.integrations.googleDrive =
           result.scope.includes('auth/drive.file');
       } catch (error) {