Merged in feat/SW-2033-implement-new-room-feature-request (pull request #1665)
feat(SW-2033): Added new route for fetching room features, and merged the data with existing availability data * feat(SW-2033): Added new route for fetching room features, and merged the data with existing availability data * fix: issue with total price not including room features * fix: add return null * fix * fix * fixes from PR feedback Approved-by: Arvid Norlin
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
import { useSearchParams } from "next/navigation"
|
||||
import { useEffect, useMemo, useState } from "react"
|
||||
|
||||
import { trpc } from "@/lib/trpc/client"
|
||||
|
||||
import { convertSearchParamsToObj, searchParamsToRecord } from "@/utils/url"
|
||||
|
||||
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate"
|
||||
import type { Lang } from "@/constants/languages"
|
||||
import type { ChildrenInRoom } from "@/utils/hotelSearchDetails"
|
||||
|
||||
@@ -14,16 +20,76 @@ export function useRoomsAvailability(
|
||||
bookingCode?: string,
|
||||
redemption?: boolean
|
||||
) {
|
||||
return trpc.hotel.availability.roomsCombinedAvailability.useQuery({
|
||||
adultsCount,
|
||||
bookingCode,
|
||||
childArray,
|
||||
hotelId,
|
||||
lang,
|
||||
redemption,
|
||||
roomStayEndDate: toDateString,
|
||||
roomStayStartDate: fromDateString,
|
||||
})
|
||||
const searchParams = useSearchParams()
|
||||
const searchParamsObj = convertSearchParamsToObj<SelectRateSearchParams>(
|
||||
searchParamsToRecord(searchParams)
|
||||
)
|
||||
|
||||
const hasPackagesParam = searchParamsObj.rooms.some((room) => room.packages)
|
||||
const [hasRoomFeatures, setHasRoomFeatures] = useState(hasPackagesParam)
|
||||
|
||||
useEffect(() => {
|
||||
setHasRoomFeatures(hasPackagesParam)
|
||||
}, [hasPackagesParam, setHasRoomFeatures])
|
||||
|
||||
const { data: roomFeatures, isPending: isRoomFeaturesPending } =
|
||||
trpc.hotel.availability.roomFeatures.useQuery(
|
||||
{
|
||||
hotelId,
|
||||
startDate: fromDateString,
|
||||
endDate: toDateString,
|
||||
adultsCount,
|
||||
childArray,
|
||||
},
|
||||
{
|
||||
enabled: hasRoomFeatures,
|
||||
}
|
||||
)
|
||||
|
||||
const { data: roomsAvailability, isPending: isRoomsAvailabiltyPending } =
|
||||
trpc.hotel.availability.roomsCombinedAvailability.useQuery({
|
||||
adultsCount,
|
||||
bookingCode,
|
||||
childArray,
|
||||
hotelId,
|
||||
lang,
|
||||
redemption,
|
||||
roomStayEndDate: toDateString,
|
||||
roomStayStartDate: fromDateString,
|
||||
})
|
||||
|
||||
const combinedData = useMemo(() => {
|
||||
if (!roomsAvailability) {
|
||||
return undefined
|
||||
}
|
||||
if (!roomFeatures) {
|
||||
return roomsAvailability
|
||||
}
|
||||
|
||||
return roomsAvailability.map((room, idx) => {
|
||||
if ("error" in room) {
|
||||
return room
|
||||
}
|
||||
|
||||
return {
|
||||
...room,
|
||||
roomConfigurations: room.roomConfigurations.map((config) => ({
|
||||
...config,
|
||||
features:
|
||||
roomFeatures?.[idx]?.find(
|
||||
(r) => r.roomTypeCode === config.roomTypeCode
|
||||
)?.features ?? [],
|
||||
})),
|
||||
}
|
||||
})
|
||||
}, [roomFeatures, roomsAvailability])
|
||||
|
||||
return {
|
||||
data: combinedData,
|
||||
isPending: hasRoomFeatures
|
||||
? isRoomsAvailabiltyPending || isRoomFeaturesPending
|
||||
: isRoomsAvailabiltyPending,
|
||||
}
|
||||
}
|
||||
|
||||
export function useHotelPackages(
|
||||
|
||||
Reference in New Issue
Block a user