import React, { useState, useRef, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '@/contexts/AuthContext'; import { User, Settings, LogOut, Info } from 'lucide-react'; import AboutDialog from './AboutDialog'; import { checkLatestVersion, compareVersions } from '@/utils/version'; interface UserProfileMenuProps { collapsed: boolean; version: string; } const UserProfileMenu: React.FC = ({ collapsed, version }) => { const { t } = useTranslation(); const navigate = useNavigate(); const { auth, logout } = useAuth(); const [isOpen, setIsOpen] = useState(false); const [showNewVersionInfo, setShowNewVersionInfo] = useState(false); const [showAboutDialog, setShowAboutDialog] = useState(false); const menuRef = useRef(null); // Check for new version on login and component mount useEffect(() => { const checkForNewVersion = async () => { try { const latestVersion = await checkLatestVersion(); if (latestVersion) { setShowNewVersionInfo(compareVersions(version, latestVersion) > 0); } } catch (error) { console.error('Error checking for new version:', error); } }; checkForNewVersion(); }, [version]); // Close the menu when clicking outside useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); const handleSettingsClick = () => { navigate('/settings'); setIsOpen(false); }; const handleLogoutClick = () => { logout(); navigate('/login'); }; const handleAboutClick = () => { setShowAboutDialog(true); setIsOpen(false); }; return (
{isOpen && (
)} {/* About dialog */} setShowAboutDialog(false)} version={version} />
); }; export default UserProfileMenu;