Pratham200Rajbhar
first commit
78013c4
Raw
History Blame Contribute Delete
1.71 kB
"use client";
import React, { useState, useEffect } from "react";
import { useRouter, usePathname } from "next/navigation";
import { useAuthStore } from "@/store/authStore";
import Sidebar from "@/components/ui/Sidebar";
import Header from "@/components/ui/Header";
import GlassLoader from "@/components/ui/GlassLoader";
export default function DashboardLayout({ children }: { children: React.ReactNode }): React.ReactElement {
const router = useRouter();
const pathname = usePathname();
const { isAuthenticated, isHydrated, user } = useAuthStore();
const [sidebarOpen, setSidebarOpen] = useState(false);
useEffect(() => {
if (!isHydrated) return;
if (!isAuthenticated) {
router.replace("/login");
return;
}
if (user?.role === "TEACHER" && pathname.startsWith("/admin")) {
router.replace("/teacher/classes");
return;
}
if (user?.role === "ADMIN" && pathname.startsWith("/teacher")) {
router.replace("/admin/dashboard");
return;
}
}, [isHydrated, isAuthenticated, user, pathname, router]);
if (!isHydrated || !isAuthenticated) {
return (
<div className="min-h-screen flex items-center justify-center">
<GlassLoader text="Authenticating..." />
</div>
);
}
return (
<div className="min-h-screen flex flex-col md:flex-row">
<Sidebar isOpen={sidebarOpen} onClose={() => setSidebarOpen(false)} />
<div className="flex-1 md:ml-[302px] min-w-0 transition-all duration-300">
<Header onMenuToggle={() => setSidebarOpen(!sidebarOpen)} />
<main className="px-4 md:px-6 pb-6 lg:pb-8 animate-fade-in-up">
{children}
</main>
</div>
</div>
);
}