import React, { useState, useContext, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { Button, Grid, LinearProgress, Typography, Alert, Select, MenuItem, Box, useTheme, Tooltip, type SelectChangeEvent, } from '@mui/material'; import { Bolt, Add, DeleteSweep, Logout, Download } from '@mui/icons-material'; import RobotAvatar from '../../components/RobotAvatar'; import TokenInput from './TokenInput'; import { type Slot, type Robot } from '../../models'; import { AppContext, type UseAppStoreType } from '../../contexts/AppContext'; import { genBase62Token } from '../../utils'; import { LoadingButton } from '@mui/lab'; import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext'; import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext'; interface RobotProfileProps { robot: Robot; setRobot: (state: Robot) => void; setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void; getGenerateRobot: (token: string, slot?: number) => void; inputToken: string; logoutRobot: () => void; setInputToken: (state: string) => void; width: number; baseUrl: string; } const RobotProfile = ({ inputToken, getGenerateRobot, setInputToken, logoutRobot, setView, width, }: RobotProfileProps): JSX.Element => { const { windowSize } = useContext(AppContext); const { garage, robotUpdatedAt, orderUpdatedAt } = useContext(GarageContext); const { sortedCoordinators } = useContext(FederationContext); const { t } = useTranslation(); const theme = useTheme(); const navigate = useNavigate(); const [loading, setLoading] = useState(true); useEffect(() => { const slot = garage.getSlot(); const robot = slot?.getRobot(sortedCoordinators[0]); if (Boolean(slot?.hashId)) { setLoading(false); } }, [orderUpdatedAt, robotUpdatedAt, loading]); const handleAddRobot = (): void => { getGenerateRobot(genBase62Token(36)); setLoading(true); }; const handleChangeSlot = (e: SelectChangeEvent): void => { garage.currentSlot = e.target.value; setInputToken(garage.getSlot()?.token ?? ''); setLoading(true); }; const slot = garage.getSlot(); const robot = slot?.getRobot(); return ( {Boolean(slot?.hashId) ? (
{width < 19 ? null : ( )} {slot?.nickname} {width < 19 ? null : ( )}
) : ( <> {t('Building your robot!')} )}
{robot?.found && Boolean(slot?.lastShortAlias) ? ( {t('Welcome back!')} ) : ( <> )} {Boolean(robot?.activeOrderId) && Boolean(slot?.hashId) ? ( ) : null} {Boolean(robot?.lastOrderId) && Boolean(slot?.hashId) ? ( {t( 'Reusing trading identity degrades your privacy against other users, coordinators and observers.', )} ) : null} null} />
{t('Robot Garage')}
{t('Add Robot')} {window.NativeRobosats === undefined ? ( ) : null} ); }; export default RobotProfile;