import { headers } from "next/headers" import { redirect } from "next/navigation" import { getProfile } from "@/lib/trpc/memoizedRequests" import { getIntl } from "@/i18n" import type { LangParams, LayoutArgs } from "@/types/params" export default async function Layout( props: React.PropsWithChildren> ) { const params = await props.params const { children } = props const intl = await getIntl() const user = await getProfile() if (!user) { console.log(`[webview:page] unable to load user`) return (

{intl.formatMessage({ defaultMessage: "Error: No user could be loaded", })}

) } if ("error" in user) { switch (user.cause) { case "unauthorized": // fall through case "forbidden": // fall through case "token_expired": const headersList = await headers() const returnURL = `/${params.lang}/webview${headersList.get("x-pathname")!}` const redirectURL = `/${params.lang}/webview/refresh?returnUrl=${encodeURIComponent(returnURL)}` console.log(`[webview:page] user error, redirecting to: ${redirectURL}`) redirect(redirectURL) case "notfound": return (

{intl.formatMessage({ defaultMessage: "Error: user not found", })}

) case "unknown": return (

{intl.formatMessage({ defaultMessage: "Unknown error occurred loading user", })}

) default: const u: never = user console.log("[webview:page] unhandled user loading error", u) } } return <>{children} }