Files
Joe Au-YeungandGitHub b3d5a6edca feat: Salesforce - on booking cancel, write to event object (#20601)
* Type app options

* Refactor `writeToPersonRecord` to `writeToRecord`

* Abstract writing to salesforce record options component

* Add option to write to event object on cancellation

* Add on booking cancel write to event object to schema

* Refactor writing to record on booking option to use `<WriteToObjectSettings />`

* Pass event object to crm delete method

* When cancelling booking write to event object
- App data isn't being read

* V1 pass app data to crm service

* Undo .env commit

* Fix passing event to cancel crm cancel event method

* Pass event type metadata to `EventManager` in `handleCancelBooking`

* Handle writing to event record

* Type fix
2025-04-08 11:40:05 -04:00

67 lines
2.5 KiB
TypeScript

import { z } from "zod";
import { eventTypeAppCardZod } from "../eventTypeAppCardZod";
import { SalesforceRecordEnum, WhenToWriteToRecord, SalesforceFieldType } from "./lib/enums";
export const writeToBookingEntry = z.object({
value: z.union([z.string(), z.boolean()]),
fieldType: z.nativeEnum(SalesforceFieldType),
whenToWrite: z.nativeEnum(WhenToWriteToRecord),
});
export const writeToRecordEntrySchema = z.object({
field: z.string(),
fieldType: z.nativeEnum(SalesforceFieldType),
value: z.union([z.string(), z.boolean()]),
whenToWrite: z.nativeEnum(WhenToWriteToRecord),
});
export const writeToRecordDataSchema = z.record(z.string(), writeToBookingEntry);
export const routingFormOptions = z
.object({
rrSkipToAccountLookupField: z.boolean().optional(),
rrSKipToAccountLookupFieldName: z.string().optional(),
})
.optional();
export const routingFormIncompleteBookingDataSchema = z.object({
writeToRecordObject: writeToRecordDataSchema.optional(),
});
const optionalBooleanOnlyRunTimeValidation = z
.any()
.refine((val) => typeof val === "boolean" || val === undefined)
.optional();
export const appDataSchema = eventTypeAppCardZod.extend({
roundRobinLeadSkip: z.boolean().optional(),
roundRobinSkipCheckRecordOn: z
.nativeEnum(SalesforceRecordEnum)
.default(SalesforceRecordEnum.CONTACT)
.optional(),
ifFreeEmailDomainSkipOwnerCheck: z.boolean().optional(),
roundRobinSkipFallbackToLeadOwner: z.boolean().optional(),
skipContactCreation: z.boolean().optional(),
createEventOn: z.nativeEnum(SalesforceRecordEnum).default(SalesforceRecordEnum.CONTACT).optional(),
createNewContactUnderAccount: z.boolean().optional(),
createLeadIfAccountNull: z.boolean().optional(),
onBookingWriteToEventObject: z.boolean().optional(),
onBookingWriteToEventObjectMap: z.record(z.any()).optional(),
createEventOnLeadCheckForContact: z.boolean().optional(),
onBookingChangeRecordOwner: z.boolean().optional(),
onBookingChangeRecordOwnerName: z.string().optional(),
sendNoShowAttendeeData: z.boolean().optional(),
sendNoShowAttendeeDataField: z.string().optional(),
onBookingWriteToRecord: z.boolean().optional(),
onBookingWriteToRecordFields: z.record(z.string(), writeToBookingEntry).optional(),
ignoreGuests: z.boolean().optional(),
onCancelWriteToEventRecord: z.boolean().optional(),
onCancelWriteToEventRecordFields: z.record(z.string(), writeToBookingEntry).optional(),
});
export const appKeysSchema = z.object({
consumer_key: z.string().min(1),
consumer_secret: z.string().min(1),
});