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 { Organization } from "@/lib/api"; import { useOrganizations } from "@/hooks/useOrganizations"; import { ComplianceBanner } from "@/components/auth/ComplianceBanner"; export function TopBar() { const navigate = useNavigate(); const { user, isAuthenticated, mfaCompliance, logout } = useAuth(); const [currentOrg, setCurrentOrg] = useState(null); // Use React Query hook for organizations with automatic caching and deduplication const { data: organizations = [], isLoading: orgsLoading } = useOrganizations(); // Ensure organizations is always an array (defensive check) const organizationsArray = Array.isArray(organizations) ? organizations : []; // Set initial currentOrg when organizations are loaded useEffect(() => { if (organizationsArray.length > 0 && !currentOrg) { setCurrentOrg(organizationsArray[0]); } }, [organizationsArray, currentOrg]); const handleLogout = async () => { await logout(); }; 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 ? (
) : organizationsArray.length === 0 ? (
No organizations
) : ( organizationsArray.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
); }