feat: add multiroom tracking to booking flow
This commit is contained in:
@@ -22,6 +22,7 @@ import { relationshipsSchema } from "./schemas/relationships"
|
||||
import { roomConfigurationSchema } from "./schemas/roomAvailability/configuration"
|
||||
import { rateDefinitionSchema } from "./schemas/roomAvailability/rateDefinition"
|
||||
|
||||
import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel"
|
||||
import type {
|
||||
AdditionalData,
|
||||
City,
|
||||
@@ -137,6 +138,13 @@ const cancellationRules = {
|
||||
NotCancellable: 0,
|
||||
} as const
|
||||
|
||||
// Used to ensure `Available` rooms
|
||||
// are shown before all `NotAvailable`
|
||||
const statusLookup = {
|
||||
[AvailabilityEnum.Available]: 1,
|
||||
[AvailabilityEnum.NotAvailable]: 2,
|
||||
}
|
||||
|
||||
export const roomsAvailabilitySchema = z
|
||||
.object({
|
||||
data: z.object({
|
||||
@@ -161,8 +169,8 @@ export const roomsAvailabilitySchema = z
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
attributes.roomConfigurations = attributes.roomConfigurations.map(
|
||||
(room) => {
|
||||
const roomConfigurations = attributes.roomConfigurations
|
||||
.map((room) => {
|
||||
if (room.products.length) {
|
||||
room.breakfastIncludedInAllRatesMember = room.products.every(
|
||||
(product) =>
|
||||
@@ -222,10 +230,16 @@ export const roomsAvailabilitySchema = z
|
||||
}
|
||||
|
||||
return room
|
||||
}
|
||||
)
|
||||
})
|
||||
.sort(
|
||||
// @ts-expect-error - array indexing
|
||||
(a, b) => statusLookup[a.status] - statusLookup[b.status]
|
||||
)
|
||||
|
||||
return attributes
|
||||
return {
|
||||
...attributes,
|
||||
roomConfigurations,
|
||||
}
|
||||
})
|
||||
|
||||
export const ratesSchema = z.array(rateSchema)
|
||||
|
||||
Reference in New Issue
Block a user