// src/components/layout/TopBar.jsx import { useState, useEffect, useRef } from 'react'; import { useLocation } from 'react-router-dom'; import { Menu, RefreshCw, ChevronDown, LogOut } from 'lucide-react'; import { useAuth } from '@/auth/AuthContext'; import { useQueryClient } from '@tanstack/react-query'; import clsx from 'clsx'; const PAGE_TITLES = { '/': 'Overview', '/vpgs': 'VPG Monitor', '/vms': 'VM Protection', '/vras': 'VRA Infrastructure', '/encryption': 'Encryption Detection', '/storage': 'Storage & Datastores', '/settings/users': 'User Management', '/settings': 'Settings', }; function UserMenu({ user, onLogout }) { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, []); const initials = user.name ? user.name.split(' ').map((w) => w[0]).slice(0, 2).join('').toUpperCase() : user.username.slice(0, 2).toUpperCase(); return (
{open && (

{user.name}

{user.email}

)}
); } export default function TopBar({ sidebarOpen, onMenuToggle }) { const { user, logout } = useAuth(); const location = useLocation(); const queryClient = useQueryClient(); const [refreshing, setRefreshing] = useState(false); const title = PAGE_TITLES[location.pathname] ?? 'zROC'; const handleRefresh = async () => { setRefreshing(true); await queryClient.invalidateQueries(); setTimeout(() => setRefreshing(false), 800); }; return (

{title}

{user && }
); }