import { array, bool, number, object, string } from 'yup'; import type { SchemaOf } from 'yup'; import { BookingCancellationBody, BookingCancellationPathParams, BookingConfirmationBody, BookingConfirmationPathParams, BookingContact, BookingReservationBody, BookingUnitItem, BookingUpdateBody, BookingUpdatePathParams, ExtendReservationBody, ExtendReservationPathParams, } from '../models/types.gen'; export const getBookingPathParamsSchema: SchemaOf = object().shape({ uuid: string().required(), }); export const bookingContactSchema: SchemaOf = object().shape({ fullName: string().nullable().notRequired(), firstName: string().nullable().notRequired(), lastName: string().nullable().notRequired(), emailAddress: string().nullable().notRequired(), phoneNumber: string().nullable().notRequired(), country: string().nullable().notRequired(), notes: string().nullable().notRequired(), locales: array().of(string()).notRequired(), postalCode: string().nullable().notRequired(), }); export const bookingUnitItemSchema: SchemaOf = object().shape({ uuid: string().notRequired(), unitId: string().required(), resellerReference: string().notRequired(), contact: bookingContactSchema.notRequired().default(undefined), }); export const createBookingBodySchema: SchemaOf = object().shape({ uuid: string().notRequired(), resellerReference: string().notRequired(), productId: string().required(), optionId: string().required(), availabilityId: string().required(), expirationMinutes: number().integer().notRequired(), notes: string().nullable().notRequired(), emailReceipt: bool().notRequired(), unitItems: array().min(1).of(bookingUnitItemSchema).required(), contact: bookingContactSchema.notRequired().default(undefined), currency: string().notRequired().nullable(), }); export const updateBookingBodySchema: SchemaOf = object().shape({ resellerReference: string().notRequired(), productId: string().notRequired(), optionId: string().notRequired(), availabilityId: string().notRequired(), expirationMinutes: number().integer().notRequired(), notes: string().notRequired().nullable(), emailReceipt: bool().notRequired(), unitItems: array().of(bookingUnitItemSchema).notRequired(), contact: bookingContactSchema.notRequired().default(undefined), }); export const updateBookingPathParamsSchema: SchemaOf = object().shape({ uuid: string().required(), }); export const confirmBookingBodySchema: SchemaOf = object().shape({ resellerReference: string().notRequired(), emailReceipt: bool().notRequired(), unitItems: array().of(bookingUnitItemSchema).notRequired(), contact: bookingContactSchema.required(), }); export const confirmBookingPathParamsSchema: SchemaOf = object().shape({ uuid: string().required(), }); export const cancelBookingBodySchema: SchemaOf = object().shape({ reason: string().nullable().notRequired(), force: bool().notRequired(), }); export const cancelBookingPathParamsSchema: SchemaOf = object().shape({ uuid: string().required(), }); export const extendBookingBodySchema: SchemaOf = object().shape({ expirationMinutes: number().integer().notRequired(), }); export const extendBookingPathParamsSchema: SchemaOf = object().shape({ uuid: string().required(), });