import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Menu, ChevronDown, LogOut, User, Shield, Building2, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { SidebarTrigger } from "@/components/ui/sidebar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { useAuth } from "@/contexts/AuthContext"; import { api, Organization } from "@/lib/api"; export function TopBar() { const navigate = useNavigate(); const { user, isAuthenticated } = useAuth(); const [organizations, setOrganizations] = useState([]); const [currentOrg, setCurrentOrg] = useState(null); const [orgsLoading, setOrgsLoading] = useState(true); useEffect(() => { async function fetchOrgs() { if (!isAuthenticated) { setOrgsLoading(false); return; } try { const response = await api.users.organizations(); setOrganizations(response.organizations); if (response.organizations.length > 0 && !currentOrg) { setCurrentOrg(response.organizations[0]); } } catch (error) { console.error("Failed to fetch organizations:", error); } finally { setOrgsLoading(false); } } fetchOrgs(); }, [isAuthenticated]); const handleLogout = () => { navigate("/login"); }; const userInitials = user?.full_name ? user.full_name.split(" ").map(n => n[0]).join("").toUpperCase().slice(0, 2) : user?.email?.slice(0, 2).toUpperCase() || "U"; return (
{/* Left side - Sidebar toggle */}
{/* Right side - Org selector + User menu */}
{/* Organization Selector */} Switch Organization {orgsLoading ? (
) : organizations.length === 0 ? (
No organizations
) : ( organizations.map((org) => ( setCurrentOrg(org)} className="flex items-center justify-between" >
{org.name}
{org.role && ["owner", "admin"].includes(org.role) && ( {org.role} )}
)) )}
{/* User Menu */}
{user?.full_name || "User"} {user?.email}
navigate("/profile")}> Profile navigate("/security")}> Security Log out
); }