Merged in fix/remove-old-select-rate (pull request #2647)

Fix/remove old select rate

* remove old select-rate

* Fix imports

* renamed SelectRate2 -> SelectRate
This commit is contained in:
Joakim Jäderberg
2025-08-13 13:43:48 +00:00
parent 51f53a717d
commit e3067331c6
127 changed files with 1859 additions and 8448 deletions

View File

@@ -1,92 +1,39 @@
"use client"
import { useEffect } from "react"
import { useRatesStore } from "@/stores/select-rate"
import { useSelectRateContext } from "@/contexts/SelectRate/SelectRateContext"
import RoomProvider from "@/providers/SelectRate/RoomProvider"
import { trackLowestRoomPrice } from "@/utils/tracking"
import MultiRoomWrapper from "./MultiRoomWrapper"
import { MultiRoomWrapper } from "./MultiRoomWrapper"
import NoAvailabilityAlert from "./NoAvailabilityAlert"
import RoomsHeader from "./RoomsHeader"
import { RoomsHeader } from "./RoomsHeader"
import RoomsList from "./RoomsList"
import styles from "./rooms.module.css"
import type { PriceProduct } from "@scandic-hotels/trpc/types/roomAvailability"
export default function Rooms() {
const {
arrivalDate,
bookingRooms,
departureDate,
hotelId,
rooms,
visibleRooms,
} = useRatesStore((state) => ({
arrivalDate: state.booking.fromDate,
bookingRooms: state.booking.rooms,
departureDate: state.booking.toDate,
hotelId: state.booking.hotelId,
rooms: state.rooms,
visibleRooms: state.roomConfigurations,
}))
availability,
input: { isMultiRoom },
} = useSelectRateContext()
useEffect(() => {
const pricesWithCurrencies = visibleRooms.flatMap((roomConfiguration) =>
roomConfiguration.flatMap((room) =>
room.products
.filter(
(product): product is PriceProduct =>
!!(
("public" in product && product.public) ||
("member" in product && product.member)
)
)
.map((product) => ({
currency: (product.public?.localPrice.currency ||
product.member?.localPrice.currency)!,
price: (product.public?.localPrice.pricePerNight ||
product.member?.localPrice.pricePerNight)!,
}))
)
)
// Specific n/a when no prices available in reward night and voucher scenarios
const lowestPrice = pricesWithCurrencies.length
? pricesWithCurrencies
.reduce((minPrice, { price }) => Math.min(minPrice, price), Infinity)
.toString()
: "n/a"
const currency = pricesWithCurrencies.length
? pricesWithCurrencies[0]?.currency
: "n/a"
trackLowestRoomPrice({
hotelId,
arrivalDate,
departureDate,
lowestPrice: lowestPrice,
currency: currency,
})
}, [arrivalDate, departureDate, hotelId, visibleRooms])
if (!availability) {
return null
}
return (
<div className={styles.content}>
{bookingRooms.map((room, idx) => (
<RoomProvider
key={`${room.rateCode}-${room.roomTypeCode}-${idx}`}
idx={idx}
room={rooms[idx]}
>
<MultiRoomWrapper isMultiRoom={bookingRooms.length > 1}>
<RoomsHeader />
<NoAvailabilityAlert />
<RoomsList />
{availability.data?.map((_room, idx) => {
return (
<MultiRoomWrapper
key={`${idx}`}
roomIndex={idx}
isMultiRoom={isMultiRoom}
>
<RoomsHeader roomIndex={idx} />
<NoAvailabilityAlert roomIndex={idx} />
<RoomsList roomIndex={idx} />
</MultiRoomWrapper>
</RoomProvider>
))}
)
})}
</div>
)
}