"use client"; import { useState, useEffect } from "react"; import { useRouter, usePathname } from "next/navigation"; import Link from "next/link"; import { LogOut, LayoutDashboard, Activity, ShieldCheck, Settings2, CalendarDays } from "lucide-react"; export default function AdminLayout({ children }: { children: React.ReactNode }) { const router = useRouter(); const pathname = usePathname(); const [user, setUser] = useState(null); // 1. TAMBAHAN BARU: Gembok Loading untuk mencegah glitch redirect const [isAuthorized, setIsAuthorized] = useState(false); useEffect(() => { const userData = localStorage.getItem("user"); if (!userData) { router.push("/login"); return; } try { const parsed = JSON.parse(userData); // 2. PERBAIKAN: Baca role dengan aman, ubah semua ke huruf kecil const userRole = parsed.role || parsed.Role || ""; if (userRole.toLowerCase() !== 'admin') { router.push("/dashboard"); } else { setUser(parsed); setIsAuthorized(true); // Buka gembok karena dia benar-benar admin! } } catch (error) { console.error("Gagal membaca data user", error); router.push("/login"); } }, [router]); const handleLogout = () => { localStorage.clear(); router.push("/login"); }; // 3. CEGATAN RENDER: Jika belum divalidasi, jangan render apapun selain layar loading if (!isAuthorized) { return (
Memverifikasi Otoritas Admin...
); } return (
{/* HEADER ADMIN */}

Admin Panel,

S-CLASS

{user?.full_name ? user.full_name.charAt(0).toUpperCase() : "A"}
{user?.full_name || "Administrator"} System Controller
{/* SIDEBAR ADMIN (Lebar Permanen: w-64) */} {/* KONTEN UTAMA */}
{children}
); }