KalashJain23's picture
Update dashboard, layout, sidebar, and UI components
761bfc9
Raw
History Blame Contribute Delete
1.16 kB
"use client";
import { useState, useEffect } from "react";
import { usePathname } from "next/navigation";
import { Sidebar } from "./Sidebar";
import { TopNav } from "./TopNav";
export function AppShell({ children }: { children: React.ReactNode }) {
const [sidebarOpen, setSidebarOpen] = useState(false);
const pathname = usePathname();
// Close sidebar on route change (mobile nav tap)
useEffect(() => {
setSidebarOpen(false);
}, [pathname]);
// Prevent body scroll when sidebar is open on mobile
useEffect(() => {
document.body.style.overflow = sidebarOpen ? "hidden" : "";
return () => { document.body.style.overflow = ""; };
}, [sidebarOpen]);
return (
<div className="app-layout">
{sidebarOpen && (
<div
className="sidebar-backdrop"
onClick={() => setSidebarOpen(false)}
aria-hidden="true"
/>
)}
<Sidebar isOpen={sidebarOpen} onClose={() => setSidebarOpen(false)} />
<div className="app-main">
<TopNav onMenuToggle={() => setSidebarOpen((v) => !v)} />
<main className="app-content">{children}</main>
</div>
</div>
);
}