From 17c8a405f5f18ee8c356745fefc210e2fcdc6e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Wed, 29 Mar 2023 17:01:04 +0300 Subject: [PATCH] feat(google-drive): add new folders trigger --- .../src/apps/google-drive/triggers/index.ts | 3 +- .../triggers/new-folders/index.ts | 35 ++++++++++++++++++ .../triggers/new-folders/new-folders.ts | 36 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/google-drive/triggers/new-folders/index.ts create mode 100644 packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts diff --git a/packages/backend/src/apps/google-drive/triggers/index.ts b/packages/backend/src/apps/google-drive/triggers/index.ts index 3e0e1eb8..2ef00f43 100644 --- a/packages/backend/src/apps/google-drive/triggers/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/index.ts @@ -1,4 +1,5 @@ import newFiles from './new-files'; import newFilesInFolder from './new-files-in-folder'; +import newFolders from './new-folders'; -export default [newFiles, newFilesInFolder]; +export default [newFiles, newFilesInFolder, newFolders]; diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts new file mode 100644 index 00000000..e327ee9e --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts @@ -0,0 +1,35 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import newFolders from './new-folders'; + +export default defineTrigger({ + name: 'New Folders', + key: 'newFolders', + pollInterval: 15, + description: + 'Triggers when a new folder is added directly to a specific folder (but not its subfolder).', + arguments: [ + { + label: 'Folder', + key: 'folderId', + type: 'dropdown' as const, + required: false, + description: + 'Check a specific folder for new subfolders. Please note: new folders added to subfolders inside the folder you choose here will NOT trigger this flow. Defaults to the top-level folder if none is picked.', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listFolders', + }, + ], + }, + }, + ], + + async run($) { + await newFolders($); + }, +}); diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts new file mode 100644 index 00000000..40c52e7e --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts @@ -0,0 +1,36 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const newFolders = async ($: IGlobalVariable) => { + let q = "mimeType='application/vnd.google-apps.folder'"; + if ($.step.parameters.folderId) { + q += ` and '${$.step.parameters.folderId}' in parents`; + } else { + q += ` and parents in 'root'`; + } + + const params = { + pageToken: undefined as unknown as string, + orderBy: 'createdTime desc', + fields: '*', + pageSize: 1000, + q, + }; + + do { + const { data } = await $.http.get(`/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 newFolders;