From 9ad7de56a36966e85a7a3f4fbd260589dfc1abb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 6 Apr 2023 14:28:57 +0300 Subject: [PATCH] feat(google-drive): list shared drives for new files trigger --- .../apps/google-drive/dynamic-data/index.ts | 3 +- .../dynamic-data/list-drives/index.ts | 35 +++++++++++++++++++ .../google-drive/triggers/new-files/index.ts | 21 +++++++++++ .../triggers/new-files/new-files.ts | 1 + 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts diff --git a/packages/backend/src/apps/google-drive/dynamic-data/index.ts b/packages/backend/src/apps/google-drive/dynamic-data/index.ts index 033277a5..83c7291d 100644 --- a/packages/backend/src/apps/google-drive/dynamic-data/index.ts +++ b/packages/backend/src/apps/google-drive/dynamic-data/index.ts @@ -1,3 +1,4 @@ import listFolders from './list-folders'; +import listDrives from './list-drives'; -export default [listFolders]; +export default [listFolders, listDrives]; diff --git a/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts b/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts new file mode 100644 index 00000000..4193dacd --- /dev/null +++ b/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts @@ -0,0 +1,35 @@ +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(`/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-drive/triggers/new-files/index.ts b/packages/backend/src/apps/google-drive/triggers/new-files/index.ts index e3d5835d..2b852d63 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files/index.ts @@ -6,6 +6,27 @@ export default defineTrigger({ key: 'newFiles', pollInterval: 15, description: 'Triggers when any new file is added (inside of any folder).', + arguments: [ + { + label: 'Drive', + key: 'driveId', + type: 'dropdown' as const, + required: false, + description: + 'The drive to use. 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 newFiles($); diff --git a/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts b/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts index 885c5ec1..29c7466a 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts @@ -7,6 +7,7 @@ const newFiles = async ($: IGlobalVariable) => { q: `mimeType!='application/vnd.google-apps.folder'`, fields: '*', pageSize: 1000, + driveId: $.step.parameters.driveId, }; do {