fix: validation

This commit is contained in:
Christel Westerberg
2024-11-14 11:41:56 +01:00
parent 7a3194f978
commit 9189d588d1
6 changed files with 120 additions and 94 deletions

View File

@@ -1,18 +1,37 @@
import { z } from "zod"
import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums"
import type { Location } from "@/types/trpc/routers/hotel/locations"
export const guestRoomSchema = z.object({
adults: z.number().default(1),
child: z
.array(
z.object({
age: z.number().nonnegative(),
bed: z.number(),
})
export const guestRoomSchema = z
.object({
adults: z.number().default(1),
child: z
.array(
z.object({
age: z.number().min(0, "Age is required"),
bed: z.number().min(0, "Bed choice is required"),
})
)
.default([]),
})
.superRefine((value, ctx) => {
const childrenInAdultsBed = value.child.filter(
(c) => c.bed === ChildBedMapEnum.IN_ADULTS_BED
)
.default([]),
})
if (value.adults < childrenInAdultsBed.length) {
const lastAdultBedIndex = value.child
.map((c) => c.bed)
.lastIndexOf(ChildBedMapEnum.IN_ADULTS_BED)
ctx.addIssue({
code: z.ZodIssueCode.custom,
message:
"You cannot have more children in adults bed than adults in the room",
path: ["child", lastAdultBedIndex],
})
}
})
export const guestRoomsSchema = z.array(guestRoomSchema)