import { Menu, ChevronDown, LogOut, } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import { useSidebar } from "../../context/SidebarContext"; import { useAuth } from "../../context/AuthContext"; import { useTranslation } from "react-i18next"; import { authApi } from "../../application/authentication/AuthApi"; import { clearAuthCookies } from "../../lib/authCookies"; import NotificationBell from "../../application/notifications/NotificationBell"; const AppHeader: React.FC = () => { const { t } = useTranslation(['profile', 'common']); const { user } = useAuth(); const { toggleMobileSidebar } = useSidebar(); const navigate = useNavigate(); const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const userMenuRef = useRef(null); const handleLogout = async () => { try { await authApi.logout(); } catch { // ignore } clearAuthCookies(); navigate("/signin"); }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (!userMenuRef.current?.contains(event.target as Node)) { setIsUserMenuOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const fullName = user ? `${user.first_name || ""} ${user.last_name || ""}`.trim() || t('common:common.loading') : t('common:common.loading'); const initials = user?.first_name && user?.last_name ? `${user.first_name[0]}${user.last_name[0]}` : "U"; return (
{/* LEFT: Mobile Toggle & Brand (Mobile only) */}
SaaS
{/* RIGHT: Actions */}
{/* Before the user menu: this is the thing that changes, and the one somebody is looking for when they arrive. */} {/* User Menu */}
{/* Dropdown */} {isUserMenuOpen && (

{user?.email}

{user?.role?.role_name || "User"}

setIsUserMenuOpen(false)} className="flex w-full items-center gap-3 px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors" >
{t('profile:header.profileSettings')}
)}
); }; export default AppHeader;