75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { GeistSans } from "geist/font/sans";
|
|
import { GeistMono } from "geist/font/mono";
|
|
import "./globals.css";
|
|
import "@/lib/fontawesome"; // Configuration Font Awesome
|
|
import { ThemeProvider } from "@/components/layout/theme-provider";
|
|
import { Toaster } from "@/components/ui/sonner";
|
|
import { UserProvider } from "@/hooks/use-user-context";
|
|
import { NavigationWrapper } from "@/components/layout/navigation-wrapper";
|
|
import { AuthService, TeamsService } from "@/services";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "PeakSkills - Auto-évaluation de compétences",
|
|
description:
|
|
"Plateforme d'auto-évaluation de compétences techniques pour les équipes",
|
|
};
|
|
|
|
export default async function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
// Récupérer les infos utilisateur côté serveur
|
|
let userInfo = null;
|
|
try {
|
|
const { userUuid, userProfile } =
|
|
await AuthService.requireAuthenticatedUser();
|
|
|
|
// Récupérer le nom de l'équipe
|
|
let teamName = "Équipe non définie";
|
|
if (userProfile.teamId) {
|
|
try {
|
|
const team = await TeamsService.getTeamById(userProfile.teamId);
|
|
if (team) {
|
|
teamName = team.name;
|
|
}
|
|
} catch (error) {
|
|
console.error("Failed to fetch team name:", error);
|
|
}
|
|
}
|
|
|
|
userInfo = {
|
|
firstName: userProfile.firstName,
|
|
lastName: userProfile.lastName,
|
|
teamName,
|
|
teamId: userProfile.teamId,
|
|
uuid: userUuid,
|
|
};
|
|
} catch (error) {
|
|
// Utilisateur non authentifié, userInfo reste null
|
|
console.log("User not authenticated:", error);
|
|
}
|
|
|
|
return (
|
|
<html lang="en" suppressHydrationWarning>
|
|
<body
|
|
className={`${GeistSans.variable} ${GeistMono.variable} antialiased`}
|
|
>
|
|
<ThemeProvider
|
|
attribute="class"
|
|
defaultTheme="system"
|
|
enableSystem
|
|
disableTransitionOnChange
|
|
>
|
|
<UserProvider initialUserInfo={userInfo}>
|
|
<NavigationWrapper />
|
|
<main className="min-h-screen">{children}</main>
|
|
<Toaster />
|
|
</UserProvider>
|
|
</ThemeProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|