Feat(SW-1275) cancel booking my stay * feat(SW-1276) UI implementation Desktop part 1 for MyStay * feat(SW-1276) UI implementation Desktop part 2 for MyStay * feat(SW-1276) UI implementation Mobile part 1 for MyStay * refactor: move files from MyStay/MyStay to MyStay * feat(SW-1276) Sidepeek implementation * feat(SW-1276): Refactoring * feat(SW-1276) UI implementation Mobile part 2 for MyStay * feat(SW-1276): translations * feat(SW-1276) fixed skeleton * feat(SW-1276): Added missing translations * feat(SW-1276) fixed translations * feat(SW-1275) cancel modal * feat(SW-1275): Mutate cancel booking * feat(SW-1275) added translations * feat(SW-1275) match current cancellationReason * feat(SW-1275) Added modal for manage stay * feat(SW-1275) Added missing icon * feat(SW-1275) New Dont cancel button * feat(SW-1275) Added preperation for Cancellation number * feat(SW-1275): added --modal-box-shadow * feat(SW-1718) Add to calendar * feat(SW-1718) general add to calendar Approved-by: Niclas Edenvin
105 lines
2.5 KiB
TypeScript
105 lines
2.5 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { ChildBedTypeEnum } from "@/constants/booking"
|
|
import { Lang, langToApiLang } from "@/constants/languages"
|
|
|
|
const signupSchema = z.discriminatedUnion("becomeMember", [
|
|
z.object({
|
|
dateOfBirth: z.string(),
|
|
postalCode: z.string(),
|
|
becomeMember: z.literal<boolean>(true),
|
|
}),
|
|
z.object({ becomeMember: z.literal<boolean>(false) }),
|
|
])
|
|
|
|
const roomsSchema = z.array(
|
|
z.object({
|
|
adults: z.number().int().nonnegative(),
|
|
childrenAges: z
|
|
.array(
|
|
z.object({
|
|
age: z.number().int().nonnegative(),
|
|
bedType: z.nativeEnum(ChildBedTypeEnum),
|
|
})
|
|
)
|
|
.default([]),
|
|
rateCode: z.string(),
|
|
roomTypeCode: z.coerce.string(),
|
|
guest: z.intersection(
|
|
z.object({
|
|
firstName: z.string(),
|
|
lastName: z.string(),
|
|
email: z.string().email(),
|
|
phoneNumber: z.string(),
|
|
countryCode: z.string(),
|
|
membershipNumber: z.string().optional(),
|
|
}),
|
|
signupSchema
|
|
),
|
|
smsConfirmationRequested: z.boolean(),
|
|
packages: z.object({
|
|
breakfast: z.boolean(),
|
|
allergyFriendly: z.boolean(),
|
|
petFriendly: z.boolean(),
|
|
accessibility: z.boolean(),
|
|
}),
|
|
roomPrice: z.object({
|
|
publicPrice: z.number().or(z.string().transform((val) => Number(val))),
|
|
memberPrice: z
|
|
.number()
|
|
.or(z.string().transform((val) => Number(val)))
|
|
.optional(),
|
|
}),
|
|
})
|
|
)
|
|
|
|
const paymentSchema = z.object({
|
|
paymentMethod: z.string(),
|
|
card: z
|
|
.object({
|
|
alias: z.string(),
|
|
expiryDate: z.string(),
|
|
cardType: z.string(),
|
|
})
|
|
.optional(),
|
|
cardHolder: z
|
|
.object({
|
|
email: z.string().email(),
|
|
name: z.string(),
|
|
phoneCountryCode: z.string(),
|
|
phoneSubscriber: z.string(),
|
|
})
|
|
.optional(),
|
|
success: z.string(),
|
|
error: z.string(),
|
|
cancel: z.string(),
|
|
})
|
|
|
|
// Mutation
|
|
export const createBookingInput = z.object({
|
|
hotelId: z.string(),
|
|
checkInDate: z.string(),
|
|
checkOutDate: z.string(),
|
|
rooms: roomsSchema,
|
|
payment: paymentSchema,
|
|
language: z.nativeEnum(Lang).transform((val) => langToApiLang[val]),
|
|
})
|
|
|
|
export const priceChangeInput = z.object({
|
|
confirmationNumber: z.string(),
|
|
})
|
|
|
|
export const cancelBookingInput = z.object({
|
|
confirmationNumber: z.string(),
|
|
language: z.nativeEnum(Lang).transform((val) => langToApiLang[val]),
|
|
})
|
|
|
|
// Query
|
|
const confirmationNumberInput = z.object({
|
|
confirmationNumber: z.string(),
|
|
})
|
|
|
|
export const bookingConfirmationInput = confirmationNumberInput
|
|
|
|
export const getBookingStatusInput = confirmationNumberInput
|