import React, { useState } from 'react' import { useNavigate } from 'react-router-dom' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faChevronRight, faRightFromBracket, faRightToBracket, faUserCircle, faGear, faHome, faNewspaper, faTimes } from '@fortawesome/free-solid-svg-icons' import { Hooks } from 'applesauce-react' import { useEventModel } from 'applesauce-react/hooks' import { Models } from 'applesauce-core' import { Accounts } from 'applesauce-accounts' import IconButton from './IconButton' interface SidebarHeaderProps { onToggleCollapse: () => void onLogout: () => void onOpenSettings: () => void isMobile?: boolean } const SidebarHeader: React.FC = ({ onToggleCollapse, onLogout, onOpenSettings, isMobile = false }) => { const [isConnecting, setIsConnecting] = useState(false) const navigate = useNavigate() const activeAccount = Hooks.useActiveAccount() const accountManager = Hooks.useAccountManager() const profile = useEventModel(Models.ProfileModel, activeAccount ? [activeAccount.pubkey] : null) const handleLogin = async () => { try { setIsConnecting(true) const account = await Accounts.ExtensionAccount.fromExtension() accountManager.addAccount(account) accountManager.setActive(account) } catch (error) { console.error('Login failed:', error) alert('Login failed. Please install a nostr browser extension and try again.\n\nIf you aren\'t on nostr yet, start here: https://nstart.me/') } finally { setIsConnecting(false) } } const getProfileImage = () => { return profile?.picture || null } const getUserDisplayName = () => { if (!activeAccount) return 'Unknown User' if (profile?.name) return profile.name if (profile?.display_name) return profile.display_name if (profile?.nip05) return profile.nip05 return `${activeAccount.pubkey.slice(0, 8)}...${activeAccount.pubkey.slice(-8)}` } const profileImage = getProfileImage() return ( <>
{isMobile ? ( ) : ( )}
navigate('/me') : (isConnecting ? () => {} : handleLogin) } style={{ cursor: 'pointer' }} > {profileImage ? ( {getUserDisplayName()} ) : ( )}
navigate('/')} title="Home" ariaLabel="Home" variant="ghost" /> navigate('/explore')} title="Explore" ariaLabel="Explore" variant="ghost" /> {activeAccount ? ( ) : ( {} : handleLogin} title={isConnecting ? "Connecting..." : "Login"} ariaLabel="Login" variant="ghost" /> )}
) } export default SidebarHeader