diff --git a/packages/backend/src/apps/google-sheets/triggers/index.ts b/packages/backend/src/apps/google-sheets/triggers/index.ts index 3821ce70..cd9d065a 100644 --- a/packages/backend/src/apps/google-sheets/triggers/index.ts +++ b/packages/backend/src/apps/google-sheets/triggers/index.ts @@ -1,4 +1,5 @@ import newSpreadsheets from './new-spreadsheets'; import newWorksheets from './new-worksheets'; +import newSpreadsheetRows from './new-spreadsheet-rows'; -export default [newSpreadsheets, newWorksheets]; +export default [newSpreadsheets, newWorksheets, newSpreadsheetRows]; diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts new file mode 100644 index 00000000..53e06847 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts @@ -0,0 +1,82 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import newSpreadsheetRows from './new-spreadsheet-rows'; + +export default defineTrigger({ + name: 'New spreadsheet rows', + key: 'newSpreadsheetRows', + pollInterval: 15, + description: + 'Triggers when a new row is added to the bottom of 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}', + }, + ], + }, + }, + { + label: 'Worksheet', + key: 'worksheetId', + type: 'dropdown' as const, + required: true, + dependsOn: ['parameters.spreadsheetId'], + description: + 'The worksheets in your selected spreadsheet. You must have column headers.', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listWorksheets', + }, + { + name: 'parameters.spreadsheetId', + value: '{parameters.spreadsheetId}', + }, + ], + }, + }, + ], + + async run($) { + await newSpreadsheetRows($); + }, +}); diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts new file mode 100644 index 00000000..ca2f9ced --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts @@ -0,0 +1,46 @@ +import { IGlobalVariable } from '@automatisch/types'; + +type TSheetsResponse = { + sheets: { + properties: { + sheetId: string; + title: string; + }; + }[]; +}; + +const newSpreadsheetRows = async ($: IGlobalVariable) => { + const { + data: { sheets }, + } = await $.http.get( + `/v4/spreadsheets/${$.step.parameters.spreadsheetId}` + ); + + const selectedSheet = sheets.find( + (sheet) => sheet.properties.sheetId === $.step.parameters.worksheetId + ); + + if (!selectedSheet) return; + + const sheetName = selectedSheet.properties.title; + + const range = sheetName; + + const { data } = await $.http.get( + `v4/spreadsheets/${$.step.parameters.spreadsheetId}/values/${range}` + ); + + if (data.values?.length) { + for (let index = data.values.length - 1; index > 0; index--) { + const value = data.values[index]; + $.pushTriggerItem({ + raw: { row: value }, + meta: { + internalId: index.toString(), + }, + }); + } + } +}; + +export default newSpreadsheetRows; diff --git a/packages/docs/pages/apps/google-sheets/triggers.md b/packages/docs/pages/apps/google-sheets/triggers.md index 1d1714a5..40695244 100644 --- a/packages/docs/pages/apps/google-sheets/triggers.md +++ b/packages/docs/pages/apps/google-sheets/triggers.md @@ -5,6 +5,8 @@ items: desc: Triggers when you create a new spreadsheet - name: New worksheets desc: Triggers when you create a new worksheet in a spreadsheet + - name: New spreadsheet rows + desc: Triggers when a new row is added to the bottom of a spreadsheet ---