Merged in feat/sw-1839-show-added-breakfast (pull request #1673)
Feat/sw-1839 show added breakfast * Fix wrong space character * Change to correct CSS variable * Show added breakfast ancillary in the "My add-ons" section * Show breakfast info in room card * Show breakfast in price details table * Format price Approved-by: Pontus Dreij
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { BreakfastPackageEnum } from "@/types/enums/breakfast"
|
||||
|
||||
export function hasBreakfastPackage(
|
||||
export function hasBreakfastPackageFromBookingFlow(
|
||||
packages: {
|
||||
code: string
|
||||
}[]
|
||||
@@ -12,3 +12,41 @@ export function hasBreakfastPackage(
|
||||
p.code === BreakfastPackageEnum.SPECIAL_PACKAGE_BREAKFAST
|
||||
)
|
||||
}
|
||||
|
||||
export function getBreakfastPackagesFromBookingFlow<T extends { code: string }>(
|
||||
packages: T[]
|
||||
): T[] | undefined {
|
||||
// Since `FREE_CHILD_BREAKFAST` has the same code when breakfast is added
|
||||
// in the booking flow and as ancillary we can't just do a simple filter on the codes.
|
||||
// So we shortcircuit if there are no booking flow specific packages.
|
||||
if (!packages || !hasBreakfastPackageFromBookingFlow(packages)) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return packages.filter(
|
||||
(p) =>
|
||||
p.code === BreakfastPackageEnum.REGULAR_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.FREE_MEMBER_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.CHILD_PAYING_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.FREE_CHILD_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.SPECIAL_PACKAGE_BREAKFAST
|
||||
)
|
||||
}
|
||||
|
||||
export function getBreakfastPackagesFromAncillaryFlow<
|
||||
T extends { code: string },
|
||||
>(packages: T[]): T[] | undefined {
|
||||
// Since `FREE_CHILD_BREAKFAST` has the same code when breakfast is added
|
||||
// in the booking flow and as ancillary we can't just do a simple filter on the codes.
|
||||
// So we shortcircuit if there are any booking flow specific packages.
|
||||
if (!packages || hasBreakfastPackageFromBookingFlow(packages)) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return packages.filter(
|
||||
(p) =>
|
||||
p.code === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.ANCILLARY_CHILD_PAYING_BREAKFAST ||
|
||||
p.code === BreakfastPackageEnum.FREE_CHILD_BREAKFAST
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import { dt } from "@/lib/dt"
|
||||
import { formatChildBedPreferences } from "../utils"
|
||||
import { convertToChildType } from "./convertToChildType"
|
||||
import { getPriceType } from "./getPriceType"
|
||||
import { getBreakfastPackagesFromBookingFlow } from "./hasBreakfastPackage"
|
||||
|
||||
import type { BreakfastPackage } from "@/types/components/hotelReservation/breakfast"
|
||||
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
@@ -28,37 +29,45 @@ export function mapRoomDetails({
|
||||
.startOf("day")
|
||||
.diff(dt(booking.checkInDate).startOf("day"), "days")
|
||||
|
||||
const breakfastPkg = booking.packages.find(
|
||||
(pkg) =>
|
||||
pkg.code === BreakfastPackageEnum.REGULAR_BREAKFAST ||
|
||||
pkg.code === BreakfastPackageEnum.FREE_MEMBER_BREAKFAST ||
|
||||
pkg.code === BreakfastPackageEnum.SPECIAL_PACKAGE_BREAKFAST
|
||||
const breakfastPackages = getBreakfastPackagesFromBookingFlow(
|
||||
booking.packages
|
||||
)
|
||||
|
||||
const featuresPkg = booking.packages.filter(
|
||||
const featuresPackages = booking.packages.filter(
|
||||
(pkg) =>
|
||||
pkg.code === RoomPackageCodeEnum.PET_ROOM ||
|
||||
pkg.code === RoomPackageCodeEnum.ALLERGY_ROOM ||
|
||||
pkg.code === RoomPackageCodeEnum.ACCESSIBILITY_ROOM
|
||||
)
|
||||
|
||||
const breakfast: BreakfastPackage | false = breakfastPkg
|
||||
const breakfast: BreakfastPackage | null = breakfastPackages?.length
|
||||
? {
|
||||
code: breakfastPkg.code,
|
||||
description: breakfastPkg.description,
|
||||
code: BreakfastPackageEnum.REGULAR_BREAKFAST,
|
||||
description: breakfastPackages[0].description,
|
||||
localPrice: {
|
||||
currency: breakfastPkg.currency,
|
||||
price: breakfastPkg.unitPrice,
|
||||
totalPrice: breakfastPkg.totalPrice,
|
||||
currency: breakfastPackages[0].currency,
|
||||
price: breakfastPackages.reduce(
|
||||
(acc, curr) => acc + curr.unitPrice,
|
||||
0
|
||||
),
|
||||
totalPrice: breakfastPackages.reduce(
|
||||
(acc, curr) => acc + curr.totalPrice,
|
||||
0
|
||||
),
|
||||
},
|
||||
requestedPrice: {
|
||||
currency: breakfastPkg.currency,
|
||||
price: breakfastPkg.unitPrice,
|
||||
totalPrice: breakfastPkg.totalPrice,
|
||||
currency: breakfastPackages[0].currency,
|
||||
price: breakfastPackages.reduce(
|
||||
(acc, curr) => acc + curr.unitPrice,
|
||||
0
|
||||
),
|
||||
totalPrice: breakfastPackages.reduce(
|
||||
(acc, curr) => acc + curr.totalPrice,
|
||||
0
|
||||
),
|
||||
},
|
||||
packageType: PackageTypeEnum.BreakfastAdult,
|
||||
}
|
||||
: false
|
||||
: null
|
||||
|
||||
const isCancelled = booking.reservationStatus === BookingStatusEnum.Cancelled
|
||||
|
||||
@@ -112,7 +121,7 @@ export function mapRoomDetails({
|
||||
childrenInRoom,
|
||||
childrenAsString,
|
||||
terms: booking.rateDefinition.cancellationText,
|
||||
packages: featuresPkg.map((pkg) => ({
|
||||
packages: featuresPackages.map((pkg) => ({
|
||||
code: pkg.code as RoomPackageCodeEnum,
|
||||
description: pkg.description,
|
||||
inventories: [],
|
||||
|
||||
Reference in New Issue
Block a user