-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
import {useEffect, useState} from 'react';
export default function LoginForm({finish, socket, username}: {finish: (s: string) => void, socket: SocketIOClient.Socket, username: string | null}) {
const [value, setValue] = useState(username || '');
const [waiting, setWaiting] = useState(false);
const [error, setError] = useState('');
const login = () => {
setWaiting(true);
socket.emit('login', value);
socket.once('loginRes', (data: {success: boolean; error?: string}) => {
setWaiting(false);
if (data.success)
finish(value);
else
setError(data.error!);
});
};
useEffect(() => {
if (username) login();
}, []);
return (
<>
<input
type="text"
maxLength={15}
placeholder="Your username..."
value={value}
onChange={(e) => setValue(e.target.value)}
disabled={waiting}
/>
<button onClick={login} disabled={!value || waiting}>
Ok
</button>
{waiting && 'Logging in...'}
<p style={{color: 'red'}}>{error}</p>
</>
);
};