diff --git a/apps/frontend/app/ClientProvider.tsx b/apps/frontend/app/ClientProvider.tsx new file mode 100644 index 0000000..1e0e03d --- /dev/null +++ b/apps/frontend/app/ClientProvider.tsx @@ -0,0 +1,25 @@ +'use client'; + +import { useEffect } from 'react'; +import { useUserStore } from '@/store/useUserStore'; +import { User } from '@/lib/types/user'; + +export function ClientProvider({ + initialUser, + children, +}: { + initialUser: User | null; + children: React.ReactNode; +}) { + const setUser = useUserStore((state) => state.setUser); + const setInitialized = useUserStore((state) => state.setInitialized); + + useEffect(() => { + if (initialUser) { + setUser(initialUser); + } + setInitialized(); + }, [initialUser, setUser, setInitialized]); + + return <>{children}>; +} \ No newline at end of file diff --git a/apps/frontend/app/layout.tsx b/apps/frontend/app/layout.tsx index 599f128..cdac60f 100644 --- a/apps/frontend/app/layout.tsx +++ b/apps/frontend/app/layout.tsx @@ -3,6 +3,8 @@ import "./globals.css"; import { ThemeProvider } from "../components/theme-provider"; import { metadata } from "./config/metadata"; import { Toaster } from "sonner"; +import { UserAPI } from "@/lib/api/server"; +import { ClientProvider } from "./ClientProvider"; const geistSans = Geist({ variable: "--font-geist-sans", @@ -16,28 +18,32 @@ const geistMono = Geist_Mono({ export { metadata }; -export default function RootLayout({ +export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { + const user = await UserAPI.me().catch(() => null); + return (
-