Merged in feat(SW-1274)-modify-date-my-stay (pull request #1528)

Feat(SW-1274) modify date my stay

* feat(SW-1676): Modify guest details step 1

* feat(SW-1676) Integration to api to update guest details

* feat(SW-1676) Reuse of old modal

* feat(SW-1676) updated modify guest

* feat(SW-1676) cleanup

* feat(SW-1274) modify stay modal and datepicker

* feat(SW-1274) DatePicker from modify dates

* feat(SW-1274) Modify dates fixes and merge conflicts

* feat(SW-1274) handle modify for multiroom

* feat(SW-1274) update manage stay

* feat(SW-1274) fixed some comments

* feat(SW-1274) use Modal instead

* feat(SW-1274) fixed formatChildBedPreferences

* feat(SW-1274) removed any as prop

* feat(SW-1274) fix rebase conflicts

* feat(SW-1274) fix flicker on modify modal

* feat(SW-1274) CalendarButton

* feat(SW-1274) fixed gap variable

* feat(SW-1274) simplified code

* feat(SW-1274) Split up DatePicker on mode

* feat(SW-1274) Updated file structure for datepicker


Approved-by: Arvid Norlin
This commit is contained in:
Pontus Dreij
2025-03-19 13:11:03 +00:00
parent b0aea68ee5
commit fb321cdb13
54 changed files with 1986 additions and 321 deletions

View File

@@ -51,7 +51,6 @@ const addPackageSuccessCounter = meter.createCounter(
const addPackageFailCounter = meter.createCounter(
"trpc.bookings.add-package-fail"
)
const guaranteeBookingCounter = meter.createCounter("trpc.bookings.guarantee")
const guaranteeBookingSuccessCounter = meter.createCounter(
"trpc.bookings.guarantee-success"
@@ -59,13 +58,12 @@ const guaranteeBookingSuccessCounter = meter.createCounter(
const guaranteeBookingFailCounter = meter.createCounter(
"trpc.bookings.guarantee-fail"
)
const updateGuestCounter = meter.createCounter("trpc.bookings.update-guest")
const updateGuestSuccessCounter = meter.createCounter(
"trpc.bookings.update-guest-success"
const updateBookingCounter = meter.createCounter("trpc.bookings.update-booking")
const updateBookingSuccessCounter = meter.createCounter(
"trpc.bookings.update-booking-success"
)
const updateGuestFailCounter = meter.createCounter(
"trpc.bookings.update-guest-fail"
const updateBookingFailCounter = meter.createCounter(
"trpc.bookings.update-booking-fail"
)
const removePackageCounter = meter.createCounter("trpc.bookings.remove-package")
@@ -485,7 +483,7 @@ export const bookingMutationRouter = router({
const accessToken = ctx.serviceToken
const { confirmationNumber, ...body } = input
updateGuestCounter.add(1, { confirmationNumber })
updateBookingCounter.add(1, { confirmationNumber })
const headers = {
Authorization: `Bearer ${accessToken}`,
@@ -501,7 +499,7 @@ export const bookingMutationRouter = router({
if (!apiResponse.ok) {
const text = await apiResponse.text()
updateGuestFailCounter.add(1, {
updateBookingFailCounter.add(1, {
confirmationNumber,
error_type: "http_error",
error: JSON.stringify({
@@ -509,7 +507,7 @@ export const bookingMutationRouter = router({
}),
})
console.error(
"api.booking.updateGuest error",
"api.booking.updateBooking error",
JSON.stringify({
query: { confirmationNumber },
error: {
@@ -523,14 +521,16 @@ export const bookingMutationRouter = router({
}
const apiJson = await apiResponse.json()
console.log("apiJson", apiJson)
const verifiedData = createBookingSchema.safeParse(apiJson)
if (!verifiedData.success) {
updateGuestFailCounter.add(1, {
updateBookingFailCounter.add(1, {
confirmationNumber,
error_type: "validation_error",
})
console.error(
"api.booking.updateGuest validation error",
"api.booking.updateBooking validation error",
JSON.stringify({
query: { confirmationNumber },
error: verifiedData.error,
@@ -539,7 +539,7 @@ export const bookingMutationRouter = router({
return null
}
updateGuestSuccessCounter.add(1, { confirmationNumber })
updateBookingSuccessCounter.add(1, { confirmationNumber })
return verifiedData.data
}),

View File

@@ -12,6 +12,8 @@ export const createBookingSchema = z
data: z.object({
attributes: z.object({
reservationStatus: z.string(),
checkInDate: z.string(),
checkOutDate: z.string(),
paymentUrl: z.string().nullable().optional(),
rooms: z
.array(
@@ -61,6 +63,8 @@ export const createBookingSchema = z
reservationStatus: d.data.attributes.reservationStatus,
paymentUrl: d.data.attributes.paymentUrl,
rooms: d.data.attributes.rooms,
checkInDate: d.data.attributes.checkInDate,
checkOutDate: d.data.attributes.checkOutDate,
errors: d.data.attributes.errors,
}))

View File

@@ -58,6 +58,7 @@ export const selectedRoomAvailabilityInputSchema = z.object({
roomTypeCode: z.string(),
counterRateCode: z.string().optional(),
packageCodes: z.array(z.nativeEnum(RoomPackageCodeEnum)).optional(),
lang: z.nativeEnum(Lang).optional(),
})
export type GetSelectedRoomAvailabilityInput = z.input<

View File

@@ -587,6 +587,8 @@ export const hotelQueryRouter = router({
room: serviceProcedure
.input(selectedRoomAvailabilityInputSchema)
.query(async ({ input, ctx }) => {
const { lang } = input
const {
hotelId,
roomStayStartDate,
@@ -605,7 +607,7 @@ export const hotelQueryRouter = router({
adults,
...(children && { children }),
...(bookingCode && { bookingCode }),
language: toApiLang(ctx.lang),
language: lang ?? toApiLang(ctx.lang),
}
metrics.selectedRoomAvailability.counter.add(1, {
@@ -688,7 +690,7 @@ export const hotelQueryRouter = router({
{
hotelId,
isCardOnlyPayment: false,
language: ctx.lang,
language: lang ?? ctx.lang,
},
ctx.serviceToken
)