import React, { useState, useRef, useEffect } from 'react'; const AppLayout = ({ user, onLogout, onSettingsClick, notifications = [], onSosClick, navItems, activeNavId, children }) => { const [showProfile, setShowProfile] = useState(false); const [registeredRoles, setRegisteredRoles] = useState([]); const profileRef = useRef(null); useEffect(() => { if (user?.email) { const token = user.token || localStorage.getItem('token'); fetch(`/api/users/roles?email=${encodeURIComponent(user.email)}`, { headers: { 'Authorization': `Bearer ${token}` } }) .then(res => { if (!res.ok) throw new Error('Network response was not ok'); return res.json(); }) .then(data => { if (Array.isArray(data)) setRegisteredRoles(data); }) .catch(err => console.error('Failed to fetch user roles', err)); } }, [user?.email]); useEffect(() => { const handleClickOutside = (event) => { if (profileRef.current && !profileRef.current.contains(event.target)) { setShowProfile(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); return (
{/* SideNavBar (Desktop) */} {/* Main Canvas */}
{/* Header Elements Row (Inline flow, no background bar) */}
Reliance RideShare
search
setShowProfile(!showProfile)} > {user?.avatar_url ? ( Profile ) : ( user?.name?.charAt(0) )}
{showProfile && (
{user?.avatar_url ? ( Profile ) : ( user?.name?.charAt(0) )}

{user?.name}

{user?.email}

Registered as: {registeredRoles.length > 0 ? registeredRoles.join(', ') : user?.role}
Logged in as: {user?.role}
)}
{children}
{/* BottomNavBar (Mobile) */}
); }; export default AppLayout;