"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { Bell, HelpCircle, Search, Menu } from "lucide-react"; import Sidebar from "@/components/Sidebar"; import { api, clearToken } from "@/lib/api"; import { useRef } from "react"; import { LogOut } from "lucide-react"; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const router = useRouter(); const [me, setMe] = useState(null); const [org, setOrg] = useState(null); const [ready, setReady] = useState(false); const [navOpen, setNavOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const profileRef = useRef(null); function logout() { clearToken(); router.replace("/login"); } useEffect(() => { function handleClick(e: MouseEvent) { if ( profileRef.current && !profileRef.current.contains(e.target as Node) ) { setProfileOpen(false); } } document.addEventListener("mousedown", handleClick); return () => document.removeEventListener("mousedown", handleClick); }, []); useEffect(() => { api("/me") .then((m) => { setMe(m); // Product Admins don't belong here — send them to the Super Admin Panel. if (m.is_product_admin) { router.replace("/admin"); return; } if (!m.has_org) { router.replace("/onboarding"); return; } api("/organization").then(setOrg).catch(() => {}); setReady(true); }) .catch((e) => { clearToken(); router.replace("/login"); }); }, [router]); if (!ready) return
Loading…
; const initial = (me?.name?.[0] ?? "U").toUpperCase(); return (
setNavOpen(false)} />

Welcome back, {me?.name ?? "there"}! 👋

Here's what's happening with your products today.

{profileOpen && (
{me?.name}
{me?.email}
)}
{children}
); }