Merged in feat/SW-964-Sticky-summary-multiroom (pull request #1231)
Feat/SW-964 Sticky summary multiroom (UX) * feat(SW-964) Multiroom support for summary in select-rate * feat(SW-964) added utils for calculateTotalPrice * feat(SW-964) Removed duplicated code Approved-by: Tobias Johansson
This commit is contained in:
@@ -14,7 +14,6 @@ import { convertObjToSearchParams, convertSearchParamsToObj } from "@/utils/url"
|
||||
import RateSummary from "../RateSummary"
|
||||
import { RoomSelectionPanel } from "../RoomSelectionPanel"
|
||||
import SelectedRoomPanel from "../SelectedRoomPanel"
|
||||
import { filterDuplicateRoomTypesByLowestPrice } from "./utils"
|
||||
import { roomSelectionPanelVariants } from "./variants"
|
||||
|
||||
import styles from "./rooms.module.css"
|
||||
@@ -25,7 +24,6 @@ import {
|
||||
} from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
import type { SelectRateProps } from "@/types/components/hotelReservation/selectRate/roomSelection"
|
||||
import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate"
|
||||
import type { RoomConfiguration } from "@/types/trpc/routers/hotel/roomAvailability"
|
||||
|
||||
export default function Rooms({
|
||||
availablePackages,
|
||||
@@ -37,6 +35,7 @@ export default function Rooms({
|
||||
const router = useRouter()
|
||||
const pathname = usePathname()
|
||||
const searchParams = useSearchParams()
|
||||
const intl = useIntl()
|
||||
|
||||
const hotelId = searchParams.get("hotel")
|
||||
const arrivalDate = searchParams.get("fromDate")
|
||||
@@ -47,6 +46,7 @@ export default function Rooms({
|
||||
|
||||
const {
|
||||
selectedPackagesByRoom,
|
||||
visibleRooms,
|
||||
setVisibleRooms,
|
||||
setRoomsAvailability,
|
||||
getFilteredRooms,
|
||||
@@ -62,33 +62,10 @@ export default function Rooms({
|
||||
|
||||
const isMultipleRooms = bookingWidgetSearchData.rooms.length > 1
|
||||
|
||||
const intl = useIntl()
|
||||
|
||||
useEffect(() => {
|
||||
initializeRates(bookingWidgetSearchData.rooms.length)
|
||||
}, [initializeRates, bookingWidgetSearchData.rooms.length])
|
||||
|
||||
const visibleRooms: RoomConfiguration[] = useMemo(() => {
|
||||
const deduped = filterDuplicateRoomTypesByLowestPrice(
|
||||
roomsAvailability.roomConfigurations
|
||||
)
|
||||
|
||||
const separated = deduped.reduce<{
|
||||
available: RoomConfiguration[]
|
||||
notAvailable: RoomConfiguration[]
|
||||
}>(
|
||||
(acc, curr) => {
|
||||
if (curr.status === "NotAvailable") {
|
||||
return { ...acc, notAvailable: [...acc.notAvailable, curr] }
|
||||
}
|
||||
return { ...acc, available: [...acc.available, curr] }
|
||||
},
|
||||
{ available: [], notAvailable: [] }
|
||||
)
|
||||
|
||||
return [...separated.available, ...separated.notAvailable]
|
||||
}, [roomsAvailability.roomConfigurations])
|
||||
|
||||
const defaultPackages: DefaultFilterOptions[] = useMemo(
|
||||
() => [
|
||||
{
|
||||
@@ -197,7 +174,9 @@ export default function Rooms({
|
||||
const SCROLL_OFFSET = 100
|
||||
const roomElements = document.querySelectorAll(`.${styles.roomContainer}`)
|
||||
const index = selectedRates.findIndex((rate) => rate === undefined)
|
||||
const selectedRoom = roomElements[index - 1]
|
||||
|
||||
const targetIndex = index === -1 ? selectedRates.length - 1 : index - 1
|
||||
const selectedRoom = roomElements[targetIndex]
|
||||
|
||||
if (selectedRoom) {
|
||||
const elementPosition = selectedRoom.getBoundingClientRect().top
|
||||
@@ -286,6 +265,7 @@ export default function Rooms({
|
||||
isUserLoggedIn={isUserLoggedIn}
|
||||
packages={availablePackages}
|
||||
roomsAvailability={roomsAvailability}
|
||||
rooms={bookingWidgetSearchData.rooms}
|
||||
/>
|
||||
</form>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user