'use client'; import { memo, useCallback, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/lib/hooks/useAuth'; import Sidebar from '@/components/ui/Sidebar'; import { ThemeToggle } from '@/components/ui/ThemeToggle'; import { LogOut } from 'lucide-react'; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const { user, currentOrganization, isAuthReady, logout } = useAuth(); const router = useRouter(); const handleLogout = useCallback(() => { void logout(); }, [logout]); // ✅ AUTH GUARD (runs once per navigation group) useEffect(() => { if (!isAuthReady) return; if (!user) { router.replace('/login'); return; } if (!currentOrganization) { router.replace('/select-organization'); return; } }, [isAuthReady, user, currentOrganization, router]); // ✅ LOADING ONLY FOR INITIAL LOAD if (!isAuthReady) { return (
Loading app...
); } if (!user || !currentOrganization) { return (
Loading workspace...
); } return (
{children}
); } const DashboardHeader = memo(function DashboardHeader({ organizationName, userName, onLogout, }: { organizationName: string; userName: string; onLogout: () => void; }) { return (

{organizationName}

{userName}
); });