import { z } from "zod" import { productSchema } from "./product" import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel" import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" export const roomConfigurationSchema = z .object({ breakfastIncludedInAllRatesMember: z.boolean().default(false), breakfastIncludedInAllRatesPublic: z.boolean().default(false), features: z .array( z.object({ inventory: z.number(), code: z.enum([ RoomPackageCodeEnum.PET_ROOM, RoomPackageCodeEnum.ALLERGY_ROOM, RoomPackageCodeEnum.ACCESSIBILITY_ROOM, ]), }) ) .default([]), products: z.array(productSchema).default([]), roomsLeft: z.number(), roomType: z.string(), roomTypeCode: z.string(), status: z.string(), }) .transform((data) => { if (data.products.length) { /** * Just guaranteeing that if all products all miss * both public and member rateCode that status is * set to `NotAvailable` */ const allProductsMissBothRateCodes = data.products.every( (product) => !product.public?.rateCode && !product.member?.rateCode ) if (allProductsMissBothRateCodes) { data.status = AvailabilityEnum.NotAvailable } } return data })