feat: add support for bought children breakfast package

This commit is contained in:
Simon Emanuelsson
2025-05-13 11:30:49 +02:00
committed by Simon.Emanuelsson
parent aceb88cb1a
commit b7c78a53b5
9 changed files with 229 additions and 68 deletions

View File

@@ -2,19 +2,81 @@ import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums"
import type { Child } from "@/types/components/hotelReservation/selectRate/selectRate"
import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation"
const bedTypeToMapEnum: Record<string, ChildBedMapEnum> = {
Crib: ChildBedMapEnum.IN_CRIB,
ExtraBed: ChildBedMapEnum.IN_EXTRA_BED,
ParentsBed: ChildBedMapEnum.IN_ADULTS_BED,
Unknown: ChildBedMapEnum.UNKNOWN,
}
export function convertToChildType(
childrenAges: number[],
childBedPreferences: BookingConfirmation["booking"]["childBedPreferences"]
): Child[] {
return childBedPreferences.map((preference, index) => ({
age: childrenAges[index],
bed: bedTypeToMapEnum[preference.bedType] ?? ChildBedMapEnum.UNKNOWN,
}))
const lookup = childBedPreferences.reduce(
(preferences, preference) => {
preferences[preference.bedType] = preference.quantity
return preferences
},
{
Crib: 0,
ExtraBed: 0,
ParentsBed: 0,
Unknown: 0,
}
)
const adultsAndOrCribKids = childrenAges.filter((childAge) => childAge <= 2)
const adultsAndOrExtraBedKids = childrenAges.filter(
(childAge) => childAge >= 3 && childAge <= 5
)
const extraBedKids = childrenAges.filter((childAge) => childAge >= 6)
const cribKids = adultsAndOrCribKids.map((age) => {
if (lookup.Crib) {
lookup.Crib = lookup.Crib - 1
return {
age,
bed: ChildBedMapEnum.IN_CRIB,
}
}
lookup.ParentsBed = lookup.ParentsBed - 1
return {
age,
bed: ChildBedMapEnum.IN_ADULTS_BED,
}
})
const adultOrExtraKids = adultsAndOrExtraBedKids.map((age) => {
if (lookup.ParentsBed) {
lookup.ParentsBed = lookup.ParentsBed - 1
return {
age,
bed: ChildBedMapEnum.IN_ADULTS_BED,
}
}
if (lookup.ExtraBed) {
lookup.ExtraBed = lookup.ExtraBed - 1
return {
age,
bed: ChildBedMapEnum.IN_EXTRA_BED,
}
}
return {
age,
bed: ChildBedMapEnum.UNKNOWN,
}
})
const extraKids = extraBedKids.map((age) => {
if (lookup.ExtraBed) {
lookup.ExtraBed = lookup.ExtraBed - 1
return {
age,
bed: ChildBedMapEnum.IN_EXTRA_BED,
}
}
return {
age,
bed: ChildBedMapEnum.UNKNOWN,
}
})
return [...cribKids, ...adultOrExtraKids, ...extraKids]
}