JoinRoom.js 2.59 KB
Newer Older
우지원's avatar
e    
우지원 committed
1
2
3
import { useEffect, useState } from "react";
import { Redirect } from "react-router-dom";
import roomApi from "../../apis/room.api";
4
import catchErrors from "../../context/catchError";
우지원's avatar
e    
우지원 committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

const userId = localStorage.getItem('user');

const JoinRoom = () => {
    const [roomId, setRoomId] = useState('');
    const [disabled, setDisabled] = useState(true);
    const [error, setError] = useState("");
    const [success, setSuccess] = useState(false);

    useEffect(() => {
        const isRoom = Object.values(roomApi).every((el) => Boolean(el));
        isRoom ? setDisabled(false) : setDisabled(true);
    }, [roomId]);

    function handleChange(event) {
        const { value } = event.target;
        setRoomId(value);
    }

    async function handleSubmit(e) {
        e.preventDefault();
        try {
            // setLoading(true);
28
            setError("");
Kim, Chaerin's avatar
merge19    
Kim, Chaerin committed
29
            const data = await roomApi.join({ userId: userId, roomId: roomId });
우지원's avatar
e    
우지원 committed
30
31
            setSuccess(true);
        } catch (error) {
32
            catchErrors(error, setError);
우지원's avatar
e    
우지원 committed
33
34
35
36
37
        } finally {
            // setLoading(false);
        }
    }
    if (success) {
Kim, Chaerin's avatar
merge19    
Kim, Chaerin committed
38
        return <Redirect to="/user" />;
우지원's avatar
e    
우지원 committed
39
40
41
42
43
44
    }

    return (
        <div className="modal-content">
            <form onSubmit={handleSubmit}>
                <div className="modal-header">
45
46
47
                    <div className="modal-title" id="joinModal">
                        방참여하기
                    </div>
우지원's avatar
e    
우지원 committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
                    <button
                        type="button"
                        className="btn-close"
                        data-bs-dismiss="modal"
                        aria-label="Close"
                    ></button>
                </div>
                <div className="modal-body">
                    <div className="input-group mb-3">
                        <input
                            type="text"
                            className="form-control"
                            placeholder="참여코드를 입력하세요"
                            aria-label="참여코드를 입력하세요"
                            aria-describedby="basic-addon1"
                            name="roomId"
                            value={roomId}
                            onChange={handleChange}
                        />
                    </div>
                    <div className="modal-footer">
                        <button type="submit" className="btn btn-primary">
                            확인
                        </button>
                    </div>
                </div>
            </form>
        </div>
    );
};

79
export default JoinRoom;