"use client"; import React, { useEffect } from "react"; import { useAuth } from "@/hooks/useAuth"; import { usePathname, useRouter } from "next/navigation"; import { Navbar } from "@/components/layout/Navbar"; import { Footer } from "@/components/layout/Footer"; import { Sidebar, MobileSidebar } from "@/components/layout/Sidebar"; // The sidebar shows only on these exact routes — each role's dashboard root, // plus Profile & Security and Site Settings (matching the redesign // mockups). Every other /dashboard/* route relies on the global floating // help button instead of sidebar nav, same as before this redesign. const SIDEBAR_ROUTES = [ "/dashboard/admin", "/dashboard/supervisor", "/dashboard/staff", "/dashboard/user", "/dashboard/user/profile", "/dashboard/admin/settings", ]; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const { user, loading } = useAuth(); const router = useRouter(); const pathname = usePathname(); // Redirect unauthenticated users to login useEffect(() => { if (loading) return; if (!user) { router.replace("/login"); } }, [user, loading, router]); // Role-based route guard within /dashboard useEffect(() => { if (loading) return; if (!user) return; // handled above if (!pathname || !pathname.startsWith("/dashboard")) return; const role = user.role || "user"; // Determine allowed prefixes and default destination per role let allowed: string[] = ["/dashboard/user"]; // everyone can access user dashboard let dest = "/dashboard/user"; if (role === "admin") { allowed = ["/dashboard/admin", "/dashboard/user"]; dest = "/dashboard/admin"; } else if (role === "supervisor") { allowed = ["/dashboard/supervisor", "/dashboard/user"]; dest = "/dashboard/supervisor"; } else if (role === "staff") { allowed = ["/dashboard/staff", "/dashboard/user"]; dest = "/dashboard/staff"; } // Allow admin to access supervisor and staff subpages (but not their root dashboards) const isAllowed = allowed.some(prefix => pathname === prefix || pathname.startsWith(prefix + "/")) || (role === "admin" && (pathname.startsWith("/dashboard/supervisor/") || pathname.startsWith("/dashboard/staff/"))) || (role === "supervisor" && pathname.startsWith("/dashboard/staff/")); if (!isAllowed && pathname !== dest) { router.replace(dest); } }, [pathname, user, loading, router]); // Don't render protected content until auth state is known if (loading || !user) { return (