Spaces:
Running
Running
MichaelEdou
feat: add Email Senders page, replace Reports with Coming Soon, remove AI references
efc415a | import { useEffect } from 'react'; | |
| import { Outlet, useNavigate } from 'react-router'; | |
| import Sidebar from './Sidebar'; | |
| import { useAuthStore } from '@/stores/authStore'; | |
| export default function MainLayout() { | |
| const user = useAuthStore((s) => s.user); | |
| const navigate = useNavigate(); | |
| // Eagerly fetch user profile on mount if not already in store | |
| useEffect(() => { | |
| if (user) return; | |
| let cancelled = false; | |
| async function init() { | |
| try { | |
| const res = await fetch('/api/auth/me', { credentials: 'include' }); | |
| if (res.ok && !cancelled) { | |
| const { user: userData } = await res.json(); | |
| useAuthStore.getState().setUser(userData); | |
| } else if (!cancelled) { | |
| // Not authenticated — redirect to login | |
| navigate('/login'); | |
| } | |
| } catch { | |
| if (!cancelled) navigate('/login'); | |
| } | |
| } | |
| init(); | |
| return () => { cancelled = true; }; | |
| }, [user, navigate]); | |
| return ( | |
| <div className="flex h-screen w-full overflow-hidden"> | |
| <Sidebar /> | |
| <main className="flex flex-1 flex-col overflow-hidden bg-background"> | |
| <Outlet /> | |
| </main> | |
| </div> | |
| ); | |
| } | |