import React, { useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { UserMeResponse } from '../types/api'; import { logout } from '../utils/api'; import { NAV_ITEMS, SETTINGS_ID } from './navItems'; const TOP_NAV_ITEMS = NAV_ITEMS.filter(item => item.id !== SETTINGS_ID); const SETTINGS_NAV_ITEM = NAV_ITEMS.find(item => item.id === SETTINGS_ID)!; import SettingsPanel from './SettingsPanel'; interface SidebarItemProps { icon: React.ReactNode; label: string; isActive?: boolean; onClick?: () => void; } const SidebarItem: React.FC = ({ icon, label, isActive, onClick }) => { return (
{icon}
{label}
); }; interface SidebarProps { activeItem: string; onNavigate: (id: string) => void; onLogoClick?: () => void; userInfo?: UserMeResponse | null; onLogout?: () => void; credits?: number | null; isGuest: boolean; onLoginClick: () => void; } const Sidebar: React.FC = ({ activeItem, onNavigate, onLogoClick, userInfo, onLogout, credits, isGuest, onLoginClick }) => { const { t } = useTranslation(); const [isLoggingOut, setIsLoggingOut] = useState(false); const [settingsOpen, setSettingsOpen] = useState(false); const settingsAnchorRef = useRef(null); const handleLogout = async () => { if (isLoggingOut) return; setIsLoggingOut(true); try { await logout(); onLogout?.(); } catch (error) { console.error('Logout failed:', error); onLogout?.(); } finally { setIsLoggingOut(false); } }; const handleItemClick = (id: string) => { if (id === SETTINGS_ID) { setSettingsOpen(v => !v); return; } onNavigate(id); }; return (
ADO2
{TOP_NAV_ITEMS.map(item => ( handleItemClick(item.id)} /> ))}
handleItemClick(SETTINGS_NAV_ITEM.id)} /> {settingsOpen && ( setSettingsOpen(false)} onNavigate={onNavigate} activeItem={activeItem} userInfo={userInfo} credits={credits} isGuest={isGuest} isLoggingOut={isLoggingOut} onLogout={handleLogout} onLoginClick={onLoginClick} anchorRef={settingsAnchorRef} /> )}
); }; export default Sidebar;