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.
69 lines
1.8 KiB
69 lines
1.8 KiB
import { cookies, headers } from "next/headers";
|
|
import { redirect } from "next/navigation";
|
|
import {
|
|
getAuthenticatedCachedEntryPath,
|
|
isAuthenticatedToken,
|
|
MARRIAGE_ENTRY_PATH_COOKIE,
|
|
} from "@/lib/entry-route-cache";
|
|
import {
|
|
getSubmitPath,
|
|
hasCompletedMarriageProfileBasics,
|
|
} from "@/lib/get-submit-path";
|
|
import { fetchProfileSSR } from "@/lib/ssr-fetch";
|
|
import {
|
|
defaultLocale,
|
|
isLocale,
|
|
localizePath,
|
|
} from "@/translations/config";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export default async function RootPage() {
|
|
const cookieStore = await cookies();
|
|
const habibLanguage =
|
|
cookieStore.get("HABIB_LANGUAGE")?.value ??
|
|
cookieStore.get("habib_language")?.value;
|
|
|
|
let targetLocale = defaultLocale;
|
|
|
|
if (isLocale(habibLanguage)) {
|
|
targetLocale = habibLanguage;
|
|
} else {
|
|
const headersList = await headers();
|
|
const acceptLanguage = headersList.get("accept-language");
|
|
if (acceptLanguage) {
|
|
const preferredLanguage = acceptLanguage.split(",")[0].split("-")[0];
|
|
if (isLocale(preferredLanguage)) {
|
|
targetLocale = preferredLanguage;
|
|
}
|
|
}
|
|
}
|
|
|
|
const token =
|
|
cookieStore.get("HABIB_TOKEN")?.value ??
|
|
cookieStore.get("habib_token")?.value;
|
|
const hasToken = isAuthenticatedToken(token);
|
|
|
|
if (!hasToken) {
|
|
redirect(`/${targetLocale}`);
|
|
}
|
|
|
|
const cachedEntryPath = getAuthenticatedCachedEntryPath(
|
|
token,
|
|
cookieStore.get(MARRIAGE_ENTRY_PATH_COOKIE)?.value,
|
|
);
|
|
|
|
if (cachedEntryPath) {
|
|
redirect(localizePath(cachedEntryPath, targetLocale));
|
|
}
|
|
|
|
const profile = await fetchProfileSSR(token);
|
|
if (profile) {
|
|
const targetPath = hasCompletedMarriageProfileBasics(profile)
|
|
? getSubmitPath(profile)
|
|
: "/intro";
|
|
redirect(localizePath(targetPath, targetLocale));
|
|
}
|
|
|
|
redirect(`/${targetLocale}`);
|
|
}
|