Browse Source

feat: add "add sheet" in google sheets block

Ahmad Kholid 2 years ago
parent
commit
3cd2a8f2bb

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

@@ -51,7 +51,7 @@
       Automa doesn't have access to the spreadsheet
       <v-remixicon name="riInformationLine" size="18" class="inline" />
     </a>
-    <edit-autocomplete v-if="data.type !== 'create'">
+    <edit-autocomplete v-if="!['create', 'add-sheet'].includes(data.type)">
       <ui-input
         :model-value="data.range"
         class="mt-1 w-full"

+ 2 - 2
src/components/newtab/workflow/edit/EditGoogleSheetsDrive.vue

@@ -14,7 +14,7 @@
     v-else
     google-drive
     :data="data"
-    :additional-actions="['create']"
+    :additional-actions="['create', 'add-sheet']"
     @update:data="updateData"
   >
     <ui-tabs
@@ -58,7 +58,7 @@
       </ui-button>
     </div>
     <ui-input
-      v-if="data.type === 'create'"
+      v-if="['create', 'add-sheet'].includes(data.type)"
       :model-value="data.sheetName"
       label="Sheet name"
       placeholder="A Spreadsheet"

+ 2 - 1
src/locales/en/blocks.json

@@ -444,7 +444,8 @@
           "update": "Update spreadsheet cell values",
           "append": "Append spreadsheet cell values",
           "clear": "Clear spreadsheet cell values",
-          "create": "Create a spreadsheet"
+          "create": "Create a spreadsheet",
+          "add-sheet": "Add sheet"
         }
       },
       "active-tab": {

+ 1 - 1
src/utils/api.js

@@ -10,7 +10,7 @@ export async function fetchApi(path, options) {
   };
 
   const { session } = await browser.storage.local.get('session');
-  if (session && options.auth) {
+  if (session && options?.auth) {
     delete options.auth;
 
     let token = session.access_token;

+ 15 - 0
src/utils/googleSheetsApi.js

@@ -68,6 +68,21 @@ export const googleSheetNative = {
       }),
     });
   },
+  addSheet({ sheetName, spreadsheetId }) {
+    const url = googleSheetNative.getUrl(`/${spreadsheetId}:batchUpdate`);
+    return fetchGapi(url, {
+      method: 'POST',
+      body: JSON.stringify({
+        requests: [
+          {
+            addSheet: {
+              properties: { title: sheetName },
+            },
+          },
+        ],
+      }),
+    });
+  },
 };
 
 export const googleSheets = {

+ 5 - 1
src/workflowEngine/blocksHandler/handlerGoogleSheets.js

@@ -123,7 +123,7 @@ async function updateSpreadsheetValues(
 }
 
 export default async function ({ data, id }, { refData }) {
-  const isNotCreateAction = data.type !== 'create';
+  const isNotCreateAction = !['create', 'add-sheet'].includes(data.type);
 
   if (isWhitespace(data.spreadsheetId) && isNotCreateAction)
     throw new Error('empty-spreadsheet-id');
@@ -178,6 +178,10 @@ export default async function ({ data, id }, { refData }) {
         this.addDataToColumn(data.dataColumn, result);
       }
     },
+    'add-sheet': async () => {
+      result = await googleSheetsApi(true).addSheet(data);
+      result = result.replies[0].addSheet.properties;
+    },
   };
   await actionHandlers[data.type]();