-
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
-
42
-
43
-
44
-
45
-
46
import {useState} from 'react';
export default function JoinRoomForm({socket} : {socket: SocketIOClient.Socket}) {
const [name, setName] = useState('');
const [password, setPassword] = useState('');
const [waiting, setWaiting] = useState(false);
const [error, setError] = useState('');
return (
<>
<p>Join Room</p>
<input
type="text"
maxLength={15}
placeholder="Room name..."
value={name}
onChange={(e) => setName(e.target.value)}
disabled={waiting}
/>
<input
type="text"
maxLength={15}
placeholder="Password..."
value={password}
onChange={(e) => setPassword(e.target.value)}
disabled={waiting}
/>
<button
onClick={() => {
setWaiting(true);
socket.emit('joinRoom', name, password);
socket.once('joinRoomRes', (data: {success: boolean; error?: string}) => {
setWaiting(false);
if (!data.success)
setError(data.error!);
});
}}
disabled={!name || waiting}
>
Join
</button>
{waiting && 'Joining room...'}
<p style={{color: 'red'}}>{error}</p>
</>
);
};