import { AppBar as AppBarMui, Box, Button, Menu, MenuItem, Toolbar, Typography } from '@mui/material' import { useEffect, useState } from 'react' import { useAppSelector } from '../../hooks/store' import Username from '../username' import { Link, useNavigate } from 'react-router-dom' import { appPublicRoutes, appPrivateRoutes, getProfileRoute } from '../../routes' import { getProfileUsername, hexToNpub } from '../../utils' import styles from './style.module.scss' import { Container } from '../Container' import { ButtonIcon } from '../ButtonIcon' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faClose } from '@fortawesome/free-solid-svg-icons' import useMediaQuery from '@mui/material/useMediaQuery' import { useLogout } from '../../hooks/useLogout' import { launch as launchNostrLoginDialog } from 'nostr-login' export const AppBar = () => { const navigate = useNavigate() const logout = useLogout() const [username, setUsername] = useState('') const [userAvatar, setUserAvatar] = useState('') const [anchorElUser, setAnchorElUser] = useState(null) const authState = useAppSelector((state) => state.auth) const userProfile = useAppSelector((state) => state.user.profile) const userRobotImage = useAppSelector((state) => state.user.robotImage) useEffect(() => { const npub = authState.usersPubkey ? hexToNpub(authState.usersPubkey) : '' if (userProfile) { setUserAvatar(userProfile.image || userRobotImage || '') setUsername(getProfileUsername(npub, userProfile)) } else { setUserAvatar('') setUsername(getProfileUsername(npub)) } }, [userRobotImage, authState.usersPubkey, userProfile]) const handleOpenUserMenu = (event: React.MouseEvent) => { setAnchorElUser(event.currentTarget) } const handleCloseUserMenu = () => { setAnchorElUser(null) } const handleProfile = () => { const hexKey = authState?.usersPubkey if (hexKey) navigate(getProfileRoute(hexKey)) setAnchorElUser(null) } const handleLogout = () => { handleCloseUserMenu() logout() navigate('/') } const isAuthenticated = authState?.loggedIn === true const matches = useMediaQuery('(max-width:767px)') const [isBannerVisible, setIsBannerVisible] = useState(true) const handleBannerHide = () => { setIsBannerVisible(false) } return ( <> {isAuthenticated && isBannerVisible && (

SIGit is currently Beta software (available for user experience testing), use at your own risk!

)} Logo { if (['', '#/'].includes(window.location.hash)) { location.reload() } else { navigate('/') } }} /> {!isAuthenticated && ( )} {isAuthenticated && ( <> {username} Profile { setAnchorElUser(null) navigate(appPrivateRoutes.settings) }} sx={{ justifyContent: 'center' }} > Settings { setAnchorElUser(null) navigate(appPublicRoutes.verify) }} sx={{ justifyContent: 'center' }} > Verify Source Logout )} ) }