import * as z from "zod" import { defineAction } from "../../../automation/actions" import { toGoogleClearFormatFields } from "../lib/formatting" import { getGoogleSheetsApi, normalizeSpreadsheetId, resolveRangeTarget, } from "../lib/google-sheets" import { GOOGLE_SHEETS_WRITE_REQUIREMENT } from "../lib/scopes" import { CLEAR_FORMAT_PROPERTY_SCHEMA, NORMALIZED_GRID_RANGE_SCHEMA, RANGE_TARGET_SCHEMA, SPREADSHEET_REFERENCE_SCHEMA, } from "../lib/schemas" /** Clears all or selected cell formatting without changing values. */ export const clearGoogleSheetsRangeFormatting = defineAction( "Clear Google Sheets range formatting", ) .describe("Clears selected cell formatting while preserving values.") .account("google", GOOGLE_SHEETS_WRITE_REQUIREMENT) .input( z.object({ /** Properties to clear. Omit to clear all cell formatting. */ properties: CLEAR_FORMAT_PROPERTY_SCHEMA.array().min(1).optional(), /** One-based grid range or native-table section. */ range: RANGE_TARGET_SCHEMA, /** Spreadsheet ID or standard Google Sheets URL. */ spreadsheet: SPREADSHEET_REFERENCE_SCHEMA, }), ) .output(NORMALIZED_GRID_RANGE_SCHEMA) .retry({ replaySafety: "unsafe" }) .handler(async ({ account, input }) => { const sheetsApi = getGoogleSheetsApi(account.secret) const spreadsheetId = normalizeSpreadsheetId(input.spreadsheet) const range = await resolveRangeTarget( sheetsApi, spreadsheetId, input.range, ) await sheetsApi.spreadsheets.batchUpdate({ requestBody: { requests: [ { updateCells: { fields: toGoogleClearFormatFields(input.properties), range, }, }, ], }, spreadsheetId, }) return range })