Merged in chore/SW-2878-extract-booking-confirmation-pag (pull request #2779)
Chore/SW-2878 extract booking confirmation pag * chore(SW-2878): Moved booking confirmation page to booking-flow package * chore(SW-2878): Fixed promo styles as per design * chore(SW-2878): Kept tiny duplicate function to avoid export from booking-flow package Approved-by: Anton Gunnarsson
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
import { BreakfastPackageEnum } from "@scandic-hotels/trpc/enums/breakfast"
|
||||
import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
|
||||
import { PackageTypeEnum } from "@scandic-hotels/trpc/enums/packages"
|
||||
import {
|
||||
type BreakfastPackage,
|
||||
breakfastPackageSchema,
|
||||
packageSchema,
|
||||
} from "@scandic-hotels/trpc/routers/hotels/schemas/packages"
|
||||
|
||||
import type { Package } from "@scandic-hotels/trpc/types/packages"
|
||||
|
||||
import type { Room } from "../../../types/stores/booking-confirmation"
|
||||
|
||||
export function mapToPrice(rooms: (Room | null)[], nights: number) {
|
||||
return rooms
|
||||
.filter((room): room is Room => !!room)
|
||||
.map((room) => {
|
||||
let price
|
||||
if (room.cheques) {
|
||||
price = {
|
||||
corporateCheque: {
|
||||
additionalPricePerStay: room.roomPrice ? room.roomPrice : undefined,
|
||||
currency: room.roomPrice ? room.currencyCode : undefined,
|
||||
numberOfCheques: room.cheques,
|
||||
},
|
||||
}
|
||||
} else if (room.roomPoints) {
|
||||
price = {
|
||||
redemption: {
|
||||
additionalPricePerStay: room.roomPrice ? room.roomPrice : undefined,
|
||||
currency: room.roomPrice ? room.currencyCode : undefined,
|
||||
pointsPerNight: room.roomPoints / nights,
|
||||
pointsPerStay: room.roomPoints,
|
||||
},
|
||||
}
|
||||
} else if (room.vouchers) {
|
||||
price = {
|
||||
voucher: {
|
||||
numberOfVouchers: room.vouchers,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
price = {
|
||||
regular: {
|
||||
currency: room.currencyCode,
|
||||
pricePerNight: room.roomPrice / nights,
|
||||
pricePerStay: room.roomPrice,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
let breakfast:
|
||||
| false
|
||||
| undefined
|
||||
| Omit<BreakfastPackage, "requestedPrice">
|
||||
if (room.breakfast) {
|
||||
const breakfastPackage = breakfastPackageSchema.safeParse({
|
||||
code: room.breakfast?.code,
|
||||
description: room.breakfast?.description,
|
||||
localPrice: {
|
||||
currency: room.breakfast?.currency,
|
||||
price: room.breakfast?.unitPrice,
|
||||
totalPrice: room.breakfast?.totalPrice,
|
||||
},
|
||||
packageType:
|
||||
room.breakfast?.code === BreakfastPackageEnum.REGULAR_BREAKFAST
|
||||
? PackageTypeEnum.BreakfastAdult
|
||||
: "",
|
||||
requestedPrice: {
|
||||
currency: room.breakfast?.currency,
|
||||
price: room.breakfast?.unitPrice,
|
||||
totalPrice: room.breakfast?.totalPrice,
|
||||
},
|
||||
})
|
||||
if (breakfastPackage.success) {
|
||||
breakfast = breakfastPackage.data
|
||||
}
|
||||
}
|
||||
|
||||
if (!room.breakfastIncluded && !breakfast) {
|
||||
breakfast = false
|
||||
}
|
||||
|
||||
const packages = room.roomFeatures
|
||||
?.map((featPkg) => {
|
||||
const pkg = packageSchema.safeParse({
|
||||
code: featPkg.code,
|
||||
description: featPkg.description,
|
||||
inventories: [],
|
||||
localPrice: {
|
||||
currency: featPkg.currency,
|
||||
price: featPkg.unitPrice,
|
||||
totalPrice: featPkg.totalPrice,
|
||||
},
|
||||
requestedPrice: {
|
||||
currency: featPkg.currency,
|
||||
price: featPkg.unitPrice,
|
||||
totalPrice: featPkg.totalPrice,
|
||||
},
|
||||
})
|
||||
if (pkg.success) {
|
||||
return pkg.data
|
||||
}
|
||||
return null
|
||||
})
|
||||
.filter((pkg): pkg is Package => !!pkg)
|
||||
|
||||
return {
|
||||
...room,
|
||||
adults: room.adults,
|
||||
bedType: {
|
||||
description: room.bedDescription,
|
||||
roomTypeCode: room.roomTypeCode || "",
|
||||
type: room.bedType,
|
||||
},
|
||||
breakfast,
|
||||
breakfastIncluded: room.rateDefinition.breakfastIncluded,
|
||||
childrenInRoom: room.childrenAges?.map((age) => ({
|
||||
age,
|
||||
bed: ChildBedMapEnum.UNKNOWN,
|
||||
})),
|
||||
packages,
|
||||
price,
|
||||
roomType: room.name,
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user