From 287f299b94f7da18a13f381efbeecfdb5c5cfe40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 4 Apr 2023 16:25:38 +0300 Subject: [PATCH] feat(google-sheets): add new spreadsheets trigger --- .../assets/favicon.svg | 0 .../auth/generate-auth-url.ts | 0 .../auth/index.ts | 2 +- .../auth/is-still-verified.ts | 0 .../auth/refresh-token.ts | 0 .../auth/verify-credentials.ts | 0 .../common/add-auth-header.ts | 0 .../common/auth-scope.ts | 0 .../common/get-current-user.ts | 0 .../apps/google-sheets/dynamic-data/index.ts | 3 ++ .../dynamic-data/list-drives/index.ts | 38 +++++++++++++++++++ .../index.d.ts | 0 .../{google-sheet => google-sheets}/index.ts | 12 ++++-- .../src/apps/google-sheets/triggers/index.ts | 3 ++ .../triggers/new-spreadsheets/index.ts | 33 ++++++++++++++++ .../new-spreadsheets/new-spreadsheets.ts | 33 ++++++++++++++++ .../ControlledAutocomplete/index.tsx | 4 +- 17 files changed, 121 insertions(+), 7 deletions(-) rename packages/backend/src/apps/{google-sheet => google-sheets}/assets/favicon.svg (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/auth/generate-auth-url.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/auth/index.ts (94%) rename packages/backend/src/apps/{google-sheet => google-sheets}/auth/is-still-verified.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/auth/refresh-token.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/auth/verify-credentials.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/common/add-auth-header.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/common/auth-scope.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/common/get-current-user.ts (100%) create mode 100644 packages/backend/src/apps/google-sheets/dynamic-data/index.ts create mode 100644 packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts rename packages/backend/src/apps/{google-sheet => google-sheets}/index.d.ts (100%) rename packages/backend/src/apps/{google-sheet => google-sheets}/index.ts (55%) create mode 100644 packages/backend/src/apps/google-sheets/triggers/index.ts create mode 100644 packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts create mode 100644 packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts diff --git a/packages/backend/src/apps/google-sheet/assets/favicon.svg b/packages/backend/src/apps/google-sheets/assets/favicon.svg similarity index 100% rename from packages/backend/src/apps/google-sheet/assets/favicon.svg rename to packages/backend/src/apps/google-sheets/assets/favicon.svg diff --git a/packages/backend/src/apps/google-sheet/auth/generate-auth-url.ts b/packages/backend/src/apps/google-sheets/auth/generate-auth-url.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/auth/generate-auth-url.ts rename to packages/backend/src/apps/google-sheets/auth/generate-auth-url.ts diff --git a/packages/backend/src/apps/google-sheet/auth/index.ts b/packages/backend/src/apps/google-sheets/auth/index.ts similarity index 94% rename from packages/backend/src/apps/google-sheet/auth/index.ts rename to packages/backend/src/apps/google-sheets/auth/index.ts index 68b86767..5e52e35a 100644 --- a/packages/backend/src/apps/google-sheet/auth/index.ts +++ b/packages/backend/src/apps/google-sheets/auth/index.ts @@ -11,7 +11,7 @@ export default { type: 'string' as const, required: true, readOnly: true, - value: '{WEB_APP_URL}/app/google-sheet/connections/add', + value: '{WEB_APP_URL}/app/google-sheets/connections/add', placeholder: null, description: 'When asked to input a redirect URL in Google Cloud, enter the URL above.', diff --git a/packages/backend/src/apps/google-sheet/auth/is-still-verified.ts b/packages/backend/src/apps/google-sheets/auth/is-still-verified.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/auth/is-still-verified.ts rename to packages/backend/src/apps/google-sheets/auth/is-still-verified.ts diff --git a/packages/backend/src/apps/google-sheet/auth/refresh-token.ts b/packages/backend/src/apps/google-sheets/auth/refresh-token.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/auth/refresh-token.ts rename to packages/backend/src/apps/google-sheets/auth/refresh-token.ts diff --git a/packages/backend/src/apps/google-sheet/auth/verify-credentials.ts b/packages/backend/src/apps/google-sheets/auth/verify-credentials.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/auth/verify-credentials.ts rename to packages/backend/src/apps/google-sheets/auth/verify-credentials.ts diff --git a/packages/backend/src/apps/google-sheet/common/add-auth-header.ts b/packages/backend/src/apps/google-sheets/common/add-auth-header.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/common/add-auth-header.ts rename to packages/backend/src/apps/google-sheets/common/add-auth-header.ts diff --git a/packages/backend/src/apps/google-sheet/common/auth-scope.ts b/packages/backend/src/apps/google-sheets/common/auth-scope.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/common/auth-scope.ts rename to packages/backend/src/apps/google-sheets/common/auth-scope.ts diff --git a/packages/backend/src/apps/google-sheet/common/get-current-user.ts b/packages/backend/src/apps/google-sheets/common/get-current-user.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/common/get-current-user.ts rename to packages/backend/src/apps/google-sheets/common/get-current-user.ts diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/index.ts new file mode 100644 index 00000000..f570d9a5 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-data/index.ts @@ -0,0 +1,3 @@ +import listDrives from './list-drives'; + +export default [listDrives]; \ No newline at end of file diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts new file mode 100644 index 00000000..ea68c599 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts @@ -0,0 +1,38 @@ +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; + +export default { + name: 'List drives', + key: 'listDrives', + + async run($: IGlobalVariable) { + const drives: { + data: IJSONObject[]; + } = { + data: [{ value: null, name: 'My Google Drive' }], + }; + + const params = { + pageSize: 100, + pageToken: undefined as unknown as string, + }; + + do { + const { data } = await $.http.get( + `https://www.googleapis.com/drive/v3/drives`, + { params } + ); + params.pageToken = data.nextPageToken; + + if (data.drives) { + for (const drive of data.drives) { + drives.data.push({ + value: drive.id, + name: drive.name, + }); + } + } + } while (params.pageToken); + + return drives; + }, +}; diff --git a/packages/backend/src/apps/google-sheet/index.d.ts b/packages/backend/src/apps/google-sheets/index.d.ts similarity index 100% rename from packages/backend/src/apps/google-sheet/index.d.ts rename to packages/backend/src/apps/google-sheets/index.d.ts diff --git a/packages/backend/src/apps/google-sheet/index.ts b/packages/backend/src/apps/google-sheets/index.ts similarity index 55% rename from packages/backend/src/apps/google-sheet/index.ts rename to packages/backend/src/apps/google-sheets/index.ts index 80684fee..5232b5f6 100644 --- a/packages/backend/src/apps/google-sheet/index.ts +++ b/packages/backend/src/apps/google-sheets/index.ts @@ -1,16 +1,20 @@ import defineApp from '../../helpers/define-app'; import addAuthHeader from './common/add-auth-header'; import auth from './auth'; +import triggers from './triggers'; +import dynamicData from './dynamic-data'; export default defineApp({ - name: 'Google Sheet', - key: 'google-sheet', + name: 'Google Sheets', + key: 'google-sheets', baseUrl: 'https://docs.google.com/spreadsheets', apiBaseUrl: 'https://sheets.googleapis.com', - iconUrl: '{BASE_URL}/apps/google-sheet/assets/favicon.svg', - authDocUrl: 'https://automatisch.io/docs/apps/google-sheet/connection', + iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg', + authDocUrl: 'https://automatisch.io/docs/apps/google-sheets/connection', primaryColor: '0F9D58', supportsConnections: true, beforeRequest: [addAuthHeader], auth, + triggers, + dynamicData, }); diff --git a/packages/backend/src/apps/google-sheets/triggers/index.ts b/packages/backend/src/apps/google-sheets/triggers/index.ts new file mode 100644 index 00000000..c2c22ebe --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/index.ts @@ -0,0 +1,3 @@ +import newSpreadsheets from './new-spreadsheets'; + +export default [newSpreadsheets]; \ No newline at end of file diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts new file mode 100644 index 00000000..afb08a3c --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts @@ -0,0 +1,33 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import newSpreadsheets from './new-spreadsheets' + +export default defineTrigger({ + name: 'New Spreadsheets', + key: 'newSpreadsheets', + pollInterval: 15, + description: 'Triggers when you create a new spreadsheet.', + arguments: [ + { + label: 'Drive', + key: 'driveId', + type: 'dropdown' as const, + required: false, + description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listDrives', + }, + ], + }, + }, + ], + + async run($) { + await newSpreadsheets($); + }, +}); \ No newline at end of file diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts new file mode 100644 index 00000000..e054beb7 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts @@ -0,0 +1,33 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const newSpreadsheets = async ($: IGlobalVariable) => { + const params = { + pageToken: undefined as unknown as string, + orderBy: 'createdTime desc', + q: `mimeType='application/vnd.google-apps.spreadsheet'`, + fields: '*', + pageSize: 1000, + driveId: $.step.parameters.driveId, + }; + + do { + const { data } = await $.http.get( + 'https://www.googleapis.com/drive/v3/files', + { params } + ); + params.pageToken = data.nextPageToken; + + if (data.files?.length) { + for (const file of data.files) { + $.pushTriggerItem({ + raw: file, + meta: { + internalId: file.id, + }, + }); + } + } + } while (params.pageToken); +}; + +export default newSpreadsheets; diff --git a/packages/web/src/components/ControlledAutocomplete/index.tsx b/packages/web/src/components/ControlledAutocomplete/index.tsx index bad45fc0..76d86671 100644 --- a/packages/web/src/components/ControlledAutocomplete/index.tsx +++ b/packages/web/src/components/ControlledAutocomplete/index.tsx @@ -69,7 +69,7 @@ function ControlledAutocomplete( }, fieldState, }) => ( -
+
{/* encapsulated with an element such as div to vertical spacing delegated from parent */} (
  • {option.label}