Merge pull request #1461 from automatisch/AUT-537

feat(google-sheets): add find worksheet action
This commit is contained in:
Ali BARIN
2024-08-07 16:22:06 +02:00
committed by GitHub
5 changed files with 212 additions and 2 deletions

View File

@@ -0,0 +1,175 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Find worksheet',
key: 'findWorksheet',
description:
'Finds a worksheet by title. Optionally, create a worksheet if none are found.',
arguments: [
{
label: 'Drive',
key: 'driveId',
type: 'dropdown',
required: false,
description:
'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listDrives',
},
],
},
},
{
label: 'Spreadsheet',
key: 'spreadsheetId',
type: 'dropdown',
required: true,
dependsOn: ['parameters.driveId'],
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listSpreadsheets',
},
{
name: 'parameters.driveId',
value: '{parameters.driveId}',
},
],
},
},
{
label: 'Title',
key: 'title',
type: 'string',
required: true,
description:
'The worksheet title needs to match exactly, and the search is case-sensitive.',
variables: true,
},
{
label: 'Create worksheet if none are found.',
key: 'createWorksheet',
type: 'dropdown',
required: false,
options: [
{ label: 'Yes', value: true },
{ label: 'No', value: false },
],
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listCreateWorksheetFields',
},
{
name: 'parameters.createWorksheet',
value: '{parameters.createWorksheet}',
},
],
},
},
],
async run($) {
const createWorksheet = $.step.parameters.createWorksheet;
async function findWorksheet() {
const {
data: { sheets },
} = await $.http.get(`/v4/spreadsheets/${$.step.parameters.spreadsheetId}`);
const selectedSheet = sheets.find(
(sheet) => sheet.properties.title === $.step.parameters.title
);
return selectedSheet;
}
const selectedSheet = await findWorksheet();
if (selectedSheet) {
$.setActionItem({
raw: selectedSheet,
});
return;
}
if (createWorksheet) {
const headers = $.step.parameters.headers;
const headerValues = headers.map((entry) => entry.header);
const body = {
requests: [
{
addSheet: {
properties: {
title: $.step.parameters.title,
},
},
},
],
};
const { data } = await $.http.post(
`/v4/spreadsheets/${$.step.parameters.spreadsheetId}:batchUpdate`,
body
);
if (headerValues.length) {
const body = {
requests: [
{
updateCells: {
rows: [
{
values: headerValues.map((header) => ({
userEnteredValue: { stringValue: header },
})),
},
],
fields: '*',
start: {
sheetId:
data.replies[data.replies.length - 1].addSheet.properties
.sheetId,
rowIndex: 0,
columnIndex: 0,
},
},
},
],
};
await $.http.post(
`/v4/spreadsheets/${$.step.parameters.spreadsheetId}:batchUpdate`,
body
);
const createdSheet = await findWorksheet();
$.setActionItem({
raw: createdSheet,
});
return;
}
}
$.setActionItem({
raw: null,
});
},
});

View File

@@ -1,5 +1,11 @@
import createSpreadsheet from './create-spreadsheet/index.js';
import createSpreadsheetRow from './create-spreadsheet-row/index.js';
import createWorksheet from './create-worksheet/index.js';
import findWorksheet from './find-worksheet/index.js';
export default [createSpreadsheet, createSpreadsheetRow, createWorksheet];
export default [
createSpreadsheet,
createSpreadsheetRow,
createWorksheet,
findWorksheet,
];

View File

@@ -1,3 +1,4 @@
import listSheetHeaders from './list-sheet-headers/index.js';
import listCreateWorksheetFields from './list-create-worksheet-fields/index.js';
export default [listSheetHeaders];
export default [listSheetHeaders, listCreateWorksheetFields];

View File

@@ -0,0 +1,26 @@
export default {
name: 'List create worksheet fields',
key: 'listCreateWorksheetFields',
async run($) {
if ($.step.parameters.createWorksheet) {
return [
{
label: 'Headers',
key: 'headers',
type: 'dynamic',
required: false,
fields: [
{
label: 'Header',
key: 'header',
type: 'string',
required: true,
variables: true,
},
],
},
];
}
},
};

View File

@@ -7,6 +7,8 @@ items:
desc: Creates a new row in a specific spreadsheet.
- name: Create worksheet
desc: Create a blank worksheet with a title. Optionally, provide headers.
- name: Find worksheet
desc: Finds a worksheet by title. Optionally, create a worksheet if none are found.
---
<script setup>