Merged in fix/suspense-key (pull request #1356)

feat: suspense key - use json-stable-stringify for suspense key

* feat: suspense key - use json-stable-stringify for suspense key


Approved-by: Joakim Jäderberg
This commit is contained in:
Linus Flood
2025-02-17 09:42:54 +00:00
parent c4ae9201db
commit 1116bdafa8
3 changed files with 12 additions and 11 deletions

View File

@@ -1,3 +1,4 @@
import stringify from "json-stable-stringify-without-jsonify"
import { Suspense } from "react" import { Suspense } from "react"
import { SelectHotelMapContainer } from "@/components/HotelReservation/SelectHotel/SelectHotelMap/SelectHotelMapContainer" import { SelectHotelMapContainer } from "@/components/HotelReservation/SelectHotel/SelectHotelMap/SelectHotelMapContainer"
@@ -16,11 +17,13 @@ export default async function SelectHotelMapPage({
}: PageArgs<LangParams, SelectHotelSearchParams>) { }: PageArgs<LangParams, SelectHotelSearchParams>) {
setLang(params.lang) setLang(params.lang)
const suspenseKey = stringify(searchParams)
return ( return (
<div className={styles.main}> <div className={styles.main}>
<MapContainer> <MapContainer>
<Suspense <Suspense
key={JSON.stringify(searchParams)} key={suspenseKey}
fallback={<SelectHotelMapContainerSkeleton />} fallback={<SelectHotelMapContainerSkeleton />}
> >
<SelectHotelMapContainer searchParams={searchParams} /> <SelectHotelMapContainer searchParams={searchParams} />

View File

@@ -1,3 +1,4 @@
import stringify from "json-stable-stringify-without-jsonify"
import { Suspense } from "react" import { Suspense } from "react"
import SelectHotel from "@/components/HotelReservation/SelectHotel" import SelectHotel from "@/components/HotelReservation/SelectHotel"
@@ -13,11 +14,10 @@ export default async function SelectHotelPage({
}: PageArgs<LangParams, SelectHotelSearchParams>) { }: PageArgs<LangParams, SelectHotelSearchParams>) {
setLang(params.lang) setLang(params.lang)
const suspenseKey = stringify(searchParams)
return ( return (
<Suspense <Suspense key={suspenseKey} fallback={<SelectHotelSkeleton />}>
key={JSON.stringify(searchParams)}
fallback={<SelectHotelSkeleton />}
>
<SelectHotel params={params} searchParams={searchParams} /> <SelectHotel params={params} searchParams={searchParams} />
</Suspense> </Suspense>
) )

View File

@@ -1,4 +1,5 @@
import { differenceInCalendarDays, format, isWeekend } from "date-fns" import { differenceInCalendarDays, format, isWeekend } from "date-fns"
import stringify from "json-stable-stringify-without-jsonify"
import { notFound } from "next/navigation" import { notFound } from "next/navigation"
import { Suspense } from "react" import { Suspense } from "react"
@@ -96,17 +97,14 @@ export default async function SelectRatePage({
const hotelId = +hotel.id const hotelId = +hotel.id
const booking = convertSearchParamsToObj<SelectRateSearchParams>(searchParams) const booking = convertSearchParamsToObj<SelectRateSearchParams>(searchParams)
const suspenseKey = stringify(searchParams)
return ( return (
<> <>
<Suspense fallback={<HotelInfoCardSkeleton />}> <Suspense fallback={<HotelInfoCardSkeleton />}>
<HotelInfoCard hotelData={hotelData} /> <HotelInfoCard hotelData={hotelData} />
</Suspense> </Suspense>
<Suspense <Suspense key={suspenseKey} fallback={<RoomsContainerSkeleton />}>
key={JSON.stringify(searchParams)}
fallback={<RoomsContainerSkeleton />}
>
<RoomsContainer <RoomsContainer
adultArray={adultsInRoom} adultArray={adultsInRoom}
booking={booking} booking={booking}
@@ -117,7 +115,7 @@ export default async function SelectRatePage({
toDate={departureDate} toDate={departureDate}
/> />
</Suspense> </Suspense>
<Suspense fallback={null}> <Suspense key={suspenseKey} fallback={null}>
<TrackingSDK <TrackingSDK
pageData={pageTrackingData} pageData={pageTrackingData}
hotelInfo={hotelsTrackingData} hotelInfo={hotelsTrackingData}