diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/index.ts index f570d9a5..42da90b1 100644 --- a/packages/backend/src/apps/google-sheets/dynamic-data/index.ts +++ b/packages/backend/src/apps/google-sheets/dynamic-data/index.ts @@ -1,3 +1,4 @@ import listDrives from './list-drives'; +import listSpreadsheets from './list-spreadsheets'; -export default [listDrives]; \ No newline at end of file +export default [listDrives, listSpreadsheets]; diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts new file mode 100644 index 00000000..7fb644a2 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts @@ -0,0 +1,41 @@ +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; + +export default { + name: 'List spreadsheets', + key: 'listSpreadsheets', + + async run($: IGlobalVariable) { + const spreadsheets: { + data: IJSONObject[]; + } = { + data: [], + }; + + const params: Record = { + q: `mimeType='application/vnd.google-apps.spreadsheet'`, + pageSize: 100, + pageToken: undefined as unknown as string, + orderBy: 'createdTime desc', + 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) { + spreadsheets.data.push({ + value: file.id, + name: file.name, + }); + } + } + } while (params.pageToken); + + return spreadsheets; + }, +}; diff --git a/packages/backend/src/apps/google-sheets/triggers/index.ts b/packages/backend/src/apps/google-sheets/triggers/index.ts index c2c22ebe..3821ce70 100644 --- a/packages/backend/src/apps/google-sheets/triggers/index.ts +++ b/packages/backend/src/apps/google-sheets/triggers/index.ts @@ -1,3 +1,4 @@ import newSpreadsheets from './new-spreadsheets'; +import newWorksheets from './new-worksheets'; -export default [newSpreadsheets]; \ No newline at end of file +export default [newSpreadsheets, newWorksheets]; diff --git a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts new file mode 100644 index 00000000..df8a3424 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts @@ -0,0 +1,57 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import newWorksheets from './new-worksheets'; + +export default defineTrigger({ + name: 'New Worksheets', + key: 'newWorksheets', + pollInterval: 15, + description: 'Triggers when you create a new worksheet in a 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', + }, + ], + }, + }, + { + label: 'Spreadsheet', + key: 'spreadsheetId', + type: 'dropdown' as const, + required: true, + dependsOn: ['parameters.driveId'], + description: 'The spreadsheets in your Google Drive.', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listSpreadsheets', + }, + { + name: 'parameters.driveId', + value: '{parameters.driveId}', + }, + ], + }, + }, + ], + + async run($) { + await newWorksheets($); + }, +}); diff --git a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts new file mode 100644 index 00000000..e2c7ef76 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts @@ -0,0 +1,28 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const newWorksheets = async ($: IGlobalVariable) => { + const params = { + pageToken: undefined as unknown as string, + }; + + do { + const { data } = await $.http.get( + `/v4/spreadsheets/${$.step.parameters.spreadsheetId}`, + { params } + ); + params.pageToken = data.nextPageToken; + + if (data.sheets?.length) { + for (const sheet of data.sheets.reverse()) { + $.pushTriggerItem({ + raw: sheet, + meta: { + internalId: sheet.properties.sheetId.toString(), + }, + }); + } + } + } while (params.pageToken); +}; + +export default newWorksheets; diff --git a/packages/docs/pages/apps/google-sheets/triggers.md b/packages/docs/pages/apps/google-sheets/triggers.md index 2189ccb9..d5c14ac0 100644 --- a/packages/docs/pages/apps/google-sheets/triggers.md +++ b/packages/docs/pages/apps/google-sheets/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/google-sheets.svg items: - name: New Spreadsheets desc: Triggers when you create a new spreadsheet + - name: New Worksheets + desc: Triggers when you create a new worksheet in a spreadsheet ---