Select-rate: refactor - converted RoomsContainer into a client component * feat/select-rate - refactor and fixed duplicate key warning * Rooms as client component * Fixed lang in input * It works * Cleanup * Cleanup * PR fixes Approved-by: Joakim Jäderberg
82 lines
2.0 KiB
TypeScript
82 lines
2.0 KiB
TypeScript
"use client"
|
|
import { useSession } from "next-auth/react"
|
|
|
|
import { dt } from "@/lib/dt"
|
|
|
|
import useLang from "@/hooks/useLang"
|
|
import RatesProvider from "@/providers/RatesProvider"
|
|
import { isValidClientSession } from "@/utils/clientSession"
|
|
|
|
import { useHotelPackages, useRoomsAvailability } from "../utils"
|
|
import RateSummary from "./RateSummary"
|
|
import Rooms from "./Rooms"
|
|
import { RoomsContainerSkeleton } from "./RoomsContainerSkeleton"
|
|
|
|
import type { RoomsContainerProps } from "@/types/components/hotelReservation/selectRate/roomsContainer"
|
|
|
|
export function RoomsContainer({
|
|
adultArray,
|
|
booking,
|
|
childArray,
|
|
fromDate,
|
|
hotelId,
|
|
hotelData,
|
|
toDate,
|
|
}: RoomsContainerProps) {
|
|
const { data: session } = useSession()
|
|
const isUserLoggedIn = isValidClientSession(session)
|
|
const lang = useLang()
|
|
|
|
const fromDateString = dt(fromDate).format("YYYY-MM-DD")
|
|
const toDateString = dt(toDate).format("YYYY-MM-DD")
|
|
|
|
const uniqueAdultsCount = Array.from(new Set(adultArray))
|
|
|
|
const { isPending: isLoadingAvailability, data: roomsAvailability } =
|
|
useRoomsAvailability(
|
|
uniqueAdultsCount,
|
|
hotelId,
|
|
fromDateString,
|
|
toDateString,
|
|
lang,
|
|
childArray
|
|
)
|
|
|
|
const { data: packages, isPending: isLoadingPackages } = useHotelPackages(
|
|
adultArray,
|
|
childArray,
|
|
fromDateString,
|
|
toDateString,
|
|
hotelId,
|
|
lang
|
|
)
|
|
|
|
if (isLoadingAvailability || isLoadingPackages) {
|
|
return <RoomsContainerSkeleton />
|
|
}
|
|
|
|
if (!hotelData?.hotel) {
|
|
return null
|
|
}
|
|
|
|
if (packages === null) {
|
|
// TODO: Log packages error
|
|
console.error("[RoomsContainer] unable to fetch packages")
|
|
}
|
|
|
|
return (
|
|
<RatesProvider
|
|
booking={booking}
|
|
hotelType={hotelData.hotel.hotelType}
|
|
isUserLoggedIn={isUserLoggedIn}
|
|
packages={packages}
|
|
roomCategories={hotelData.roomCategories}
|
|
roomsAvailability={roomsAvailability}
|
|
vat={hotelData.hotel.vat}
|
|
>
|
|
<Rooms />
|
|
<RateSummary isUserLoggedIn={isUserLoggedIn} />
|
|
</RatesProvider>
|
|
)
|
|
}
|