diff --git a/packages/renderer/src/lib/api.ts b/packages/renderer/src/lib/api.ts index d164804..bd360fa 100644 --- a/packages/renderer/src/lib/api.ts +++ b/packages/renderer/src/lib/api.ts @@ -8,7 +8,6 @@ export function connectApi(url: string) { const connect = async () => { try { connectionAttempts ++; - // console.log('connecting to', url); socket = new WebSocket(url); } catch (e) { if(destroy) return; @@ -25,6 +24,7 @@ export function connectApi(url: string) { socket.addEventListener('open', () => { if(socket === null) return; connectionAttempts = 0; + console.log('connected to', url); // socket.send('Hello Server!'); }); diff --git a/packages/renderer/src/pages/NewAccount.tsx b/packages/renderer/src/pages/NewAccount.tsx index ff43e16..0d200e2 100644 --- a/packages/renderer/src/pages/NewAccount.tsx +++ b/packages/renderer/src/pages/NewAccount.tsx @@ -5,10 +5,12 @@ import { FaUserPlus } from 'react-icons/fa'; import ServerConnection from "../components/ServerConnection"; import useHomeServer from "../contexts/PersistentState/useHomeServerNative"; import { BigButton } from "./BigButton"; -import { SignUp } from "./SignUp"; import { MdOutlineNavigateNext } from 'react-icons/md'; import useHover from "../hooks/useHover"; import { AiOutlineEdit } from "react-icons/ai"; +import { useApi } from "../lib/useApi"; +import useSessionToken from "../hooks/useSessionToken"; +import useClientId from "../hooks/useClientId"; export default function NewAccount() { @@ -70,11 +72,8 @@ export default function NewAccount() { // const homeServerInputRef = useRef(null); const { setHomeServer, homeServer } = useHomeServer(); const [homeServerInput, setHomeServerInput] = useState(homeServer ?? ''); - const [usernameInput, setUsernameInput] = useState(''); - const [authCodeInput, setAuthCodeInput] = useState(''); const [returning, setReturning] = useState(true); - const [connection, setConnection] = useState(null); - const [connecting, setConnecting] = useState(false); + // const [connection, setConnection] = useState(null); const [connectionError, setConnectionError] = useState(''); const [edittingHomeServer, setEdittingHomeServer] = useState(false); const [homeServerInputRef, homeServerHovered] = useHover(); @@ -88,29 +87,43 @@ export default function NewAccount() { } }, [homeServer]); - const connect = useCallback((url: string) => { + const [connecting, setConnecting] = useState(false); + const [connectionSucceeded, setConnectionSucceeded] = useState(false); + + const connect = useCallback(() => { if(connecting) return; - setHomeServer(url); + const url = homeServerInput; setConnecting(true); - - const ws = new WebSocket(url); + try { + const ws = new WebSocket(url); + + ws.addEventListener('open', () => { + setConnecting(false); + setConnectionSucceeded(true); + setHomeServer(homeServerInput); + setEdittingHomeServer(false); + }); + + ws.addEventListener('error', (e) => { + setConnecting(false); + setConnectionSucceeded(false); + setConnectionError('Connection failed') + }); + } catch (e) { + setConnecting(false) + setConnectionSucceeded(false); + setConnectionError('Connection failed in catch'); + } + }, [connecting, homeServerInput]); - ws.addEventListener('open', () => { - setConnecting(false); - setConnection(ws); - setConnectionError(''); - }); - - ws.addEventListener('close', (e) => { - setConnecting(false); - setConnection(null); - console.log(e) - }); - - ws.addEventListener('error', (e) => { - setConnectionError('Connection failed') - }); - }, [connecting]); + const next = useCallback(() => { + // debugger; + if(edittingHomeServer) { + connect() + } else { + console.log('do login'); + } + }, [homeServer, homeServerInput, edittingHomeServer, connect]) // return ( //
{ setEdittingHomeServer(true); }} - onKeyPress={(e: any) => { - if(e.code === 'Enter') { - if(homeServer === homeServerInput) - return setEdittingHomeServer(false); - setHomeServer(homeServerInput) - } - }} + onKeyPress={(e: any) => e.code === 'Enter' && next()} > +
+ {(connecting) ? ( +
+ Connecting... +
+ ) : ( + (!connectionSucceeded) && ( +
+ {connectionError} +
+ ) + )} +
- -
- -
- -
- -
-
- {}} - > -
+ + {(returning) ? ( + + ) : ( + + )} + + {edittingHomeServer && }
) } +function Next(props: { + onClick?: (e: any) => void +}) { + return ( +
+ +
+ ) +} + +interface LoginProps { + disabled?: boolean +} + +function Login(props: LoginProps) { + const [usernameInput, setUsernameInput] = useState(''); + const [authCodeInput, setAuthCodeInput] = useState(''); + const [error, setError] = useState(null); + const [success, setSuccess] = useState(null); + + const { setSessionToken } = useSessionToken(); + const { setClientId } = useClientId(); + + const { send } = useApi({ + 'session:login'({ err, sessionToken, clientId }) { + if(err) { + setSuccess(null); + setError(err); + return; + } + setError(null); + setSuccess('Success!'); + setTimeout(() => { + setClientId(clientId); + setSessionToken(sessionToken); + }, 1000) + } + }) + + const next = () => { + send('session:login', { + username: usernameInput, + totp: authCodeInput + }) + } + + return ( + <> + +
+ +
+ +
+ +
+ {error &&
+ {error} +
} + {success &&
+ {success} +
} + {!props.disabled && } + + ) +} + +interface SignUpProps { + disabled?: boolean +} + +function SignUp(props: SignUpProps) { + const [usernameInput, setUsernameInput] = useState(''); + const [authCodeInput, setAuthCodeInput] = useState(''); + + const next = () => { + + } + + return ( + <> + +
+ +
+ +
+ +
+ {!props.disabled && } + + ) +} + function Label(props: any) { return