feat(SW-2857): Refactor booking flow url updates * Add support for removing parameters when using initial values in serializeSearchParams * Don't manually write search params in rate store * Booking is already from live search params so no need * Fix input type in serializeBookingSearchParams Approved-by: Linus Flood
63 lines
1.4 KiB
TypeScript
63 lines
1.4 KiB
TypeScript
"use client"
|
|
|
|
import { usePathname, useSearchParams } from "next/navigation"
|
|
import { useMemo } from "react"
|
|
import { useIntl } from "react-intl"
|
|
|
|
import { createRatesStore } from "@/stores/select-rate"
|
|
|
|
import { RatesContext } from "@/contexts/Rates"
|
|
|
|
import type { RatesProviderProps } from "@/types/providers/rates"
|
|
|
|
export default function RatesProvider({
|
|
booking,
|
|
children,
|
|
hotelType,
|
|
roomCategories,
|
|
roomsAvailability,
|
|
vat,
|
|
}: RatesProviderProps) {
|
|
const pathname = usePathname()
|
|
const searchParams = useSearchParams()
|
|
const intl = useIntl()
|
|
|
|
const modifyRateIndex = searchParams.has("modifyRateIndex")
|
|
? Number(searchParams.get("modifyRateIndex"))
|
|
: undefined
|
|
|
|
const store = useMemo(() => {
|
|
return createRatesStore({
|
|
booking,
|
|
hotelType,
|
|
labels: {
|
|
accessibilityRoom: intl.formatMessage({
|
|
defaultMessage: "Accessible room",
|
|
}),
|
|
allergyRoom: intl.formatMessage({
|
|
defaultMessage: "Allergy-friendly room",
|
|
}),
|
|
petRoom: intl.formatMessage({
|
|
defaultMessage: "Pet-friendly room",
|
|
}),
|
|
},
|
|
pathname,
|
|
roomCategories,
|
|
roomsAvailability,
|
|
vat,
|
|
initialActiveRoom: modifyRateIndex,
|
|
})
|
|
}, [
|
|
booking,
|
|
hotelType,
|
|
intl,
|
|
pathname,
|
|
roomCategories,
|
|
roomsAvailability,
|
|
modifyRateIndex,
|
|
vat,
|
|
])
|
|
|
|
return <RatesContext.Provider value={store}>{children}</RatesContext.Provider>
|
|
}
|