import React, { useContext, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Paper, Grid, CircularProgress, Box, Alert, Typography, useTheme, AlertTitle, } from '@mui/material'; import { useParams } from 'react-router-dom'; import { Robot } from '../../models'; import { apiClient } from '../../services/api'; import Onboarding from './Onboarding'; import Welcome from './Welcome'; import RobotProfile from './RobotProfile'; import Recovery from './Recovery'; import { TorIcon } from '../../components/Icons'; import { genKey } from '../../pgp'; import { AppContext, AppContextProps } from '../../contexts/AppContext'; const RobotPage = (): JSX.Element => { const { robot, setRobot, setPage, setCurrentOrder, fetchRobot, torStatus, windowSize, baseUrl } = useContext(AppContext); const { t } = useTranslation(); const params = useParams(); const refCode = params.refCode; const width = Math.min(windowSize.width * 0.8, 28); const maxHeight = windowSize.height * 0.85 - 3; const theme = useTheme(); const [badRequest, setBadRequest] = useState(undefined); const [inputToken, setInputToken] = useState(''); const [view, setView] = useState<'welcome' | 'onboarding' | 'recovery' | 'profile'>( robot.token ? 'profile' : 'welcome', ); useEffect(() => { if (robot.token) { setInputToken(robot.token); } if (robot.nickname == null && robot.token) { if (window.NativeRobosats === undefined || torStatus == '"Done"') { fetchRobot({ action: 'generate', setBadRequest }); } } }, [torStatus]); const getGenerateRobot = (token: string, slot?: number) => { setInputToken(token); genKey(token).then(function (key) { fetchRobot({ action: 'generate', newKeys: { pubKey: key.publicKeyArmored, encPrivKey: key.encryptedPrivateKeyArmored, }, newToken: token, slot, refCode, setBadRequest, }); }); }; const logoutRobot = () => { setInputToken(''); setRobot(new Robot()); }; if (!(window.NativeRobosats === undefined) && !(torStatus == 'DONE' || torStatus == '"Done"')) { return ( {t('Connecting to TOR')} {t('Connection encrypted and anonymized using TOR.')} {t( 'This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.', )} ); } else { return ( {view === 'welcome' ? ( ) : null} {view === 'onboarding' ? ( null} badRequest={badRequest} inputToken={inputToken} setInputToken={setInputToken} getGenerateRobot={getGenerateRobot} setPage={setPage} baseUrl={baseUrl} /> ) : null} {view === 'profile' ? ( null} setCurrentOrder={setCurrentOrder} badRequest={badRequest} getGenerateRobot={getGenerateRobot} logoutRobot={logoutRobot} width={width} inputToken={inputToken} setInputToken={setInputToken} getGenerateRobot={getGenerateRobot} setPage={setPage} baseUrl={baseUrl} /> ) : null} {view === 'recovery' ? ( null} badRequest={badRequest} inputToken={inputToken} setInputToken={setInputToken} getGenerateRobot={getGenerateRobot} setPage={setPage} baseUrl={baseUrl} /> ) : null} ); } }; export default RobotPage;