fix(SW-2385): add booking widget error messages

This commit is contained in:
Christian Andolf
2025-04-16 09:59:16 +02:00
committed by Michael Zetterberg
parent 595eb575d7
commit e544feaa36
2 changed files with 70 additions and 25 deletions

View File

@@ -4,14 +4,27 @@ import { REDEMPTION } from "@/constants/booking"
import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums"
export const bookingWidgetErrors = {
AGE_REQUIRED: "AGE_REQUIRED",
BED_CHOICE_REQUIRED: "BED_CHOICE_REQUIRED",
CHILDREN_EXCEEDS_ADULTS: "CHILDREN_EXCEEDS_ADULTS",
BOOKING_CODE_INVALID: "BOOKING_CODE_INVALID",
REQUIRED: "REQUIRED",
DESTINATION_REQUIRED: "DESTINATION_REQUIRED",
MULTIROOM_BOOKING_CODE_UNAVAILABLE: "MULTIROOM_BOOKING_CODE_UNAVAILABLE",
MULTIROOM_REWARD_NIGHT_UNAVAILABLE: "MULTIROOM_REWARD_NIGHT_UNAVAILABLE",
CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE:
"CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE",
} as const
export const guestRoomSchema = z
.object({
adults: z.number().default(1),
childrenInRoom: z
.array(
z.object({
age: z.number().min(0, "Age is required"),
bed: z.number().min(0, "Bed choice is required"),
age: z.number().min(0, bookingWidgetErrors.AGE_REQUIRED),
bed: z.number().min(0, bookingWidgetErrors.BED_CHOICE_REQUIRED),
})
)
.default([]),
@@ -27,8 +40,7 @@ export const guestRoomSchema = z
ctx.addIssue({
code: z.ZodIssueCode.custom,
message:
"You cannot have more children in adults bed than adults in the room",
message: bookingWidgetErrors.CHILDREN_EXCEEDS_ADULTS,
path: ["childrenInRoom", lastAdultBedIndex],
})
}
@@ -41,19 +53,12 @@ export const bookingCodeSchema = z
value: z
.string()
.refine(
(value) => {
if (
!value ||
/(^D\d*$)|(^DSH[0-9a-z]*$)|(^L\d*$)|(^LH[0-9a-z]*$)|(^B[a-z]{3}\d{6})|(^VO[0-9a-z]*$)|^[0-9a-z]*$/i.test(
value
)
) {
return true
} else {
return false
}
},
{ message: "Invalid booking code" }
(value) =>
!value ||
/(^D\d*$)|(^DSH[0-9a-z]*$)|(^L\d*$)|(^LH[0-9a-z]*$)|(^B[a-z]{3}\d{6})|(^VO[0-9a-z]*$)|^[0-9a-z]*$/i.test(
value
),
{ message: bookingWidgetErrors.BOOKING_CODE_INVALID }
)
.default(""),
remember: z.boolean().default(false),
@@ -71,7 +76,7 @@ export const bookingWidgetSchema = z
}),
redemption: z.boolean().default(false),
rooms: guestRoomsSchema,
search: z.string({ coerce: true }).min(1, "Required"),
search: z.string({ coerce: true }).min(1, bookingWidgetErrors.REQUIRED),
selectedSearch: z.string().optional(),
hotel: z.number().optional(),
city: z.string().optional(),
@@ -80,43 +85,43 @@ export const bookingWidgetSchema = z
if (!value.hotel && !value.city) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Destination required",
message: bookingWidgetErrors.DESTINATION_REQUIRED,
path: ["search"],
})
}
if (value.rooms.length > 1 && value.bookingCode?.value.startsWith("VO")) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Multi-room booking is not available with this booking code.",
message: bookingWidgetErrors.MULTIROOM_BOOKING_CODE_UNAVAILABLE,
path: ["bookingCode.value"],
})
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Multi-room booking is not available with this booking code.",
message: bookingWidgetErrors.MULTIROOM_BOOKING_CODE_UNAVAILABLE,
path: ["rooms"],
})
}
if (value.rooms.length > 1 && value.redemption) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Multi-room booking is not available with reward night.",
message: bookingWidgetErrors.MULTIROOM_REWARD_NIGHT_UNAVAILABLE,
path: [REDEMPTION],
})
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Multi-room booking is not available with reward night.",
message: bookingWidgetErrors.MULTIROOM_REWARD_NIGHT_UNAVAILABLE,
path: ["rooms"],
})
}
if (value.bookingCode?.value && value.redemption) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Code and voucher is not available with reward night.",
message: bookingWidgetErrors.CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE,
path: [REDEMPTION],
})
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Code and voucher is not available with reward night.",
message: bookingWidgetErrors.CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE,
path: ["bookingCode.value"],
})
}