Refactor page components to use NavigationWrapper and integrate Prisma for data fetching. Update EventsSection and LeaderboardSection to accept props for events and leaderboard data, enhancing performance and user experience. Implement user authentication in ProfilePage and AdminPage, ensuring secure access to user data.

This commit is contained in:
Julien Froidefond
2025-12-09 14:11:47 +01:00
parent b1f36f6210
commit 67131f6470
14 changed files with 1041 additions and 944 deletions

View File

@@ -4,9 +4,32 @@ import Link from "next/link";
import { useSession, signOut } from "next-auth/react";
import PlayerStats from "./PlayerStats";
export default function Navigation() {
interface UserData {
username: string;
avatar: string | null;
hp: number;
maxHp: number;
xp: number;
maxXp: number;
level: number;
}
interface NavigationProps {
initialUserData?: UserData | null;
initialIsAdmin?: boolean;
}
export default function Navigation({
initialUserData,
initialIsAdmin,
}: NavigationProps) {
const { data: session } = useSession();
// Utiliser initialUserData pour déterminer l'état de connexion pendant l'hydratation
// Cela évite le clignottement au reload
const isAuthenticated = initialUserData !== null || session !== null;
const isAdmin = initialIsAdmin ?? session?.user?.role === "ADMIN";
return (
<nav className="w-full fixed top-0 left-0 z-50 px-8 py-3 bg-black/80 backdrop-blur-sm border-b border-gray-800/30">
<div className="max-w-7xl mx-auto flex items-center justify-between">
@@ -42,7 +65,7 @@ export default function Navigation() {
>
LEADERBOARD
</Link>
{session?.user?.role === "ADMIN" && (
{isAdmin && (
<Link
href="/admin"
className="text-pixel-gold hover:text-orange-400 transition text-xs font-normal uppercase tracking-widest"
@@ -54,9 +77,9 @@ export default function Navigation() {
{/* Right Side */}
<div className="flex items-center gap-4">
{session ? (
{isAuthenticated ? (
<>
<PlayerStats />
<PlayerStats initialUserData={initialUserData} />
<Link
href="/profile"
className="text-white hover:text-pixel-gold transition text-xs font-normal uppercase tracking-widest"