chore(SW-3321): Moved Select rate context to booking-flow package * chore(SW-3321): Moved Select rate context to booking-flow package * chore(SW-3321): Optimised code Approved-by: Joakim Jäderberg
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import type {
|
|
Rate,
|
|
Room as SelectRateRoom,
|
|
} from "@scandic-hotels/booking-flow/types/components/selectRate/selectRate"
|
|
|
|
import type { Room } from "@/components/HotelReservation/PriceDetailsModal/PriceDetailsTable"
|
|
|
|
export function mapToPrice(
|
|
rooms: (Rate | null)[],
|
|
bookingRooms: SelectRateRoom[],
|
|
isUserLoggedIn: boolean
|
|
) {
|
|
return rooms
|
|
.map((room, idx) => {
|
|
if (!room) {
|
|
return null
|
|
}
|
|
|
|
let price = null
|
|
if ("corporateCheque" in room.product) {
|
|
price = {
|
|
corporateCheque: room.product.corporateCheque.localPrice,
|
|
}
|
|
} else if ("redemption" in room.product) {
|
|
price = {
|
|
redemption: room.product.redemption.localPrice,
|
|
}
|
|
} else if ("voucher" in room.product) {
|
|
price = {
|
|
voucher: room.product.voucher,
|
|
}
|
|
} else {
|
|
const isMainRoom = idx === 0
|
|
const memberRate = room.product.member
|
|
const onlyMemberRate = !room.product.public && memberRate
|
|
if ((isUserLoggedIn && isMainRoom && memberRate) || onlyMemberRate) {
|
|
price = {
|
|
regular: {
|
|
...memberRate.localPrice,
|
|
regularPricePerStay:
|
|
room.product.public?.localPrice.pricePerStay ||
|
|
memberRate.localPrice.pricePerStay,
|
|
},
|
|
}
|
|
} else if (room.product.public) {
|
|
price = {
|
|
regular: room.product.public.localPrice,
|
|
}
|
|
}
|
|
}
|
|
|
|
const bookingRoom = bookingRooms[idx]
|
|
return {
|
|
adults: bookingRoom.adults,
|
|
bedType: undefined,
|
|
breakfast: undefined,
|
|
breakfastIncluded: room.product.rateDefinition.breakfastIncluded,
|
|
childrenInRoom: bookingRoom.childrenInRoom,
|
|
packages: room.packages,
|
|
price,
|
|
roomType: room.roomType,
|
|
rateDefinition: room.product.rateDefinition,
|
|
}
|
|
})
|
|
.filter((r) => !!(r && r.price)) as Room[]
|
|
}
|