import type z from "zod"; import { slugify } from "@calcom/lib/slugify"; import type { bookingCreateSchemaLegacyPropsForApi } from "@calcom/prisma/zod-utils"; import type { CalendarEvent } from "@calcom/types/Calendar"; import type { getEventTypeResponse } from "./types"; type CustomInputs = z.infer["customInputs"]; type RequestBody = { responses?: Record; customInputs?: CustomInputs; }; function mapCustomInputs( customInputs: { label: string; value: CustomInputs[number]["value"] }[] ): Record { return customInputs.reduce((acc, { label, value }) => { acc[label] = value; return acc; }, {} as Record); } function mapResponsesToCustomInputs( responses: Record, eventTypeCustomInputs: getEventTypeResponse["customInputs"] ): NonNullable { // Backward Compatibility: Map new `responses` to old `customInputs` format so that webhooks can still receive same values. return Object.entries(responses).reduce((acc, [fieldName, fieldValue]) => { const foundInput = eventTypeCustomInputs.find((input) => slugify(input.label) === fieldName); if (foundInput) { acc[foundInput.label] = fieldValue; } return acc; }, {} as NonNullable); } export function getCustomInputsResponses( reqBody: RequestBody, eventTypeCustomInputs: getEventTypeResponse["customInputs"] ): NonNullable { if (reqBody.customInputs && reqBody.customInputs.length > 0) { return mapCustomInputs(reqBody.customInputs); } const responses = reqBody.responses || {}; return mapResponsesToCustomInputs(responses, eventTypeCustomInputs); }