You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.4 KiB
49 lines
1.4 KiB
import { cookies } from "next/headers";
|
|
import {
|
|
dehydrate,
|
|
HydrationBoundary,
|
|
QueryClient,
|
|
} from "@tanstack/react-query";
|
|
import { isAuthenticatedToken } from "@/lib/entry-route-cache";
|
|
import { fetchProfileSSR } from "@/lib/ssr-fetch";
|
|
import { marriageQueryKeys } from "@/hooks/marriage/query-keys";
|
|
import QuestionsListClient from "./questions-list-client";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
/**
|
|
* Server Component wrapper for questions-list.
|
|
*
|
|
* Prefetches the marriage profile server-side using the HABIB_TOKEN cookie
|
|
* (Flutter sets it via WebViewCookieManager before loadRequest). The profile
|
|
* determines which page the user should see — having it in the HTML avoids
|
|
* the white-flash caused by waiting for the client-side API call.
|
|
*
|
|
* The sections/form-overview loads client-side with shimmer — that's fine.
|
|
*/
|
|
export default async function QuestionsListPage() {
|
|
const cookieStore = await cookies();
|
|
|
|
const token =
|
|
cookieStore.get("HABIB_TOKEN")?.value ??
|
|
cookieStore.get("habib_token")?.value;
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: { staleTime: 10 * 1000 },
|
|
},
|
|
});
|
|
|
|
if (isAuthenticatedToken(token)) {
|
|
await queryClient.prefetchQuery({
|
|
queryKey: marriageQueryKeys.profile(),
|
|
queryFn: () => fetchProfileSSR(token!),
|
|
});
|
|
}
|
|
|
|
return (
|
|
<HydrationBoundary state={dehydrate(queryClient)}>
|
|
<QuestionsListClient />
|
|
</HydrationBoundary>
|
|
);
|
|
}
|