import * as z from "zod" import { defineAction } from "../../../automation/actions" import { getGoogleSheetsApi, normalizeBandedRange, normalizeSpreadsheetId, resolveBandedRange, } from "../lib/google-sheets" import { GOOGLE_SHEETS_WRITE_REQUIREMENT } from "../lib/scopes" import { BANDED_RANGE_SCHEMA, SPREADSHEET_REFERENCE_SCHEMA, } from "../lib/schemas" /** Removes alternating colors from a banded range without deleting values. */ export const deleteGoogleSheetsBandedRange = defineAction( "Delete Google Sheets banded range", ) .describe("Removes banding while preserving the range's cell values.") .account("google", GOOGLE_SHEETS_WRITE_REQUIREMENT) .input( z.object({ /** Numeric banded-range ID. */ bandedRangeId: z.number().int(), /** Spreadsheet ID or standard Google Sheets URL. */ spreadsheet: SPREADSHEET_REFERENCE_SCHEMA, }), ) .output(BANDED_RANGE_SCHEMA) .retry({ replaySafety: "unsafe" }) .handler(async ({ account, input }) => { const sheetsApi = getGoogleSheetsApi(account.secret) const spreadsheetId = normalizeSpreadsheetId(input.spreadsheet) // Preserve the metadata because Google returns no delete-banding reply. const bandedRange = normalizeBandedRange( await resolveBandedRange(sheetsApi, spreadsheetId, input.bandedRangeId), ) await sheetsApi.spreadsheets.batchUpdate({ requestBody: { requests: [{ deleteBanding: { bandedRangeId: input.bandedRangeId } }], }, spreadsheetId, }) return bandedRange })