45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
"use client";
|
|
|
|
import { Inter } from "next/font/google";
|
|
import { createContext, useContext, useState } from "react";
|
|
import "./globals.css";
|
|
import Authentication from "./lib/auth/authentication.component";
|
|
import { User, UserService } from "./lib/auth/user.service";
|
|
|
|
const inter = Inter({ subsets: ["latin"] });
|
|
|
|
export const UserContext = createContext(User.ANONYMOUS);
|
|
export function useUserContext() {
|
|
return useContext(UserContext);
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
const [user, setUser] = useState(User.ANONYMOUS);
|
|
const userService = new UserService(user, setUser);
|
|
|
|
return (
|
|
<html lang="en">
|
|
<body className={inter.className}>
|
|
<UserContext.Provider value={user}>
|
|
<div className="flex">
|
|
<div className="m-auto"></div>
|
|
<h1 className="mt-2">React UI</h1>
|
|
<div className="m-auto"></div>
|
|
<div className="mt-2">
|
|
<Authentication
|
|
onLogin={() => userService.refresh(user, setUser)}
|
|
></Authentication>
|
|
</div>
|
|
<div className="mr-3"></div>
|
|
</div>
|
|
{children}
|
|
</UserContext.Provider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|