import React, { useContext, useEffect, useState } from 'react'; import { Box, Button, CircularProgress, Collapse, Divider, Drawer, Grid, List, ListItem, ListItemButton, ListItemIcon, ListItemText, Typography, useTheme, } from '@mui/material'; import { AppContext, closeAll, Page, type UseAppStoreType } from '../../contexts/AppContext'; import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext'; import { Add, BubbleChart, ExpandLess, ExpandMore, Info, Menu as MenuIcon, People, PriceChange, School, SettingsApplications, } from '@mui/icons-material'; import { TorIcon, RoboSatsTextIcon } from '../../components/Icons'; import RobotAvatar from '../../components/RobotAvatar'; import { useTranslation } from 'react-i18next'; import { UseFederationStoreType, FederationContext } from '../../contexts/FederationContext'; import { genBase62Token } from '../../utils'; import { useNavigate } from 'react-router-dom'; const TopBar = (): React.JSX.Element => { const { t } = useTranslation(); const theme = useTheme(); const navigate = useNavigate(); const { garage } = useContext(GarageContext); const { open, setOpen, client, torStatus, page, navigateToPage } = useContext(AppContext); const { federation } = useContext(FederationContext); const [show, setShow] = useState(false); const [openGarage, setOpenGarage] = useState(false); const [torColor, setTorColor] = useState< 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' | 'inherit' >('error'); const [torProgress, setTorProgress] = useState(true); const [torTitle, setTorTitle] = useState(t('Connection error')); const slot = garage.getSlot(); useEffect(() => { if (!show) setOpenGarage(false); }, [show]); useEffect(() => { setShow(false); }, [page]); useEffect(() => { if (torStatus === 'OFF' || torStatus === 'STOPPING') { setTorColor('primary'); setTorProgress(true); setTorTitle(t('Initializing Tor daemon')); } else if (torStatus === 'STARTING') { setTorColor('warning'); setTorProgress(true); setTorTitle(t('Connecting to Tor network')); } else if (torStatus === 'ON') { setTorColor('success'); setTorProgress(false); setTorTitle(t('Connected to Tor network')); } }, [torStatus]); const handleAddRobot = (): void => { const token = genBase62Token(36); void garage.createRobot(federation, token, Object.keys(garage.slots).length > 0); }; const changePage = (newPage: Page) => { navigateToPage(newPage, navigate); setShow(false); }; return ( setShow(false)}> {slot?.hashId ? ( <> { setOpen({ ...closeAll, profile: !open.profile }); }} > setOpenGarage((op) => !op)} sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', pl: 0, }} > {slot?.nickname} {openGarage ? : } {Object.values(garage.slots).map((garageSlot, index) => { if (garageSlot.token === slot.token) return
; return ( { garage.setCurrentSlot(garageSlot.token ?? ''); setOpenGarage(false); setTimeout(() => setShow(false), 300); }} > {garageSlot?.nickname} ); })}
{t('Add Robot')} ) : (
{t('Add Robot')} )} { setOpen({ ...closeAll, info: !open.info }); }} > { setOpen({ ...closeAll, learn: !open.learn }); }} > { setOpen({ ...closeAll, community: !open.community }); }} > { setOpen({ ...closeAll, exchange: !open.exchange }); }} > { setOpen({ ...closeAll, client: !open.client }); }} >
changePage('settings')}> {client === 'mobile' && ( {torProgress ? ( <> ) : ( )} )} {t('A Simple and Private LN P2P Exchange')} ); }; export default TopBar;