HomePage.js 6.5 KB
Newer Older
Soo Hyun Kim's avatar
Soo Hyun Kim committed
1
import React, { useState, useEffect } from 'react';
Choi Ga Young's avatar
에러    
Choi Ga Young committed
2
import { Row, Col, Button } from 'react-bootstrap';
우지원's avatar
ul    
우지원 committed
3
4
5
6
import Tabs from 'react-bootstrap/Tabs';
import Tab from 'react-bootstrap/Tab';
import ClosedList from '../Components/ClosedList';
import OpenList from '../Components/OpenList';
Choi Ga Young's avatar
Choi Ga Young committed
7
import Menu from '../Components/Menu';
8
import { io } from "socket.io-client";   //모듈 가져오기
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
9
import Chat from "../Components/Chat";
Soo Hyun Kim's avatar
Soo Hyun Kim committed
10
11
import RoomMake from "../Components/RoomMake"
import EnterRoom from "../Components/EnterRoom"
우지원's avatar
우지원 committed
12
import axios from 'axios';
우지원's avatar
ul    
우지원 committed
13

14
const socket = io();
우지원's avatar
ul    
우지원 committed
15

우지원's avatar
우지원 committed
16
const INIT_ROOM = {
우지원's avatar
e    
우지원 committed
17
18
19
20
    roomName: '',
    interest: '',
    roomId: '',
    member: '',
우지원's avatar
우지원 committed
21
22
}

우지원's avatar
ul    
우지원 committed
23
function Home() {
우지원's avatar
e    
우지원 committed
24
25
26
27
28
29
30
    const userName = sessionStorage.getItem('name')

    const [showModal, setShowModal] = useState(false);
    const [showEnter, setShowEnter] = useState(false);
    const [chat, setChat] = useState(false);
    const [open, setOpen] = useState(false);
    const [room, setRoom] = useState(INIT_ROOM)
31
    const [show, setShow] = useState(false)
우지원's avatar
e    
우지원 committed
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

    //소켓
    const [singleChat, setSingleChat] = useState('')
    const [recievedMsg, setRecievedMsg] = useState('')
    const [roomCode, setRoomCode] = useState('')
    const [newUser, setNewUser] = useState('')

    const [singleUser, setSingleUser] = useState('')
    const [recievedUser, setRecievedUser] = useState('')

    const [singleImg, setSingleImg] = useState('')
    const [recievedImg, setRecievedImg] = useState('')


    //SOCKET 관련 시작
    function enterChatRoom(rCode) {    //방 입장하기
        socket.emit('joinRoom', rCode)
        socket.emit('newUser', { rmIf: rCode, userInfo: userName })
        console.log(`joinRoom : ${rCode} 입장`)
    }
    const [roomName, setRoomName] = useState('')

    const handleCloseModal = () => setShowModal(false);
    const handleShowModal = () => setShowModal(true);
    const handleCloseEnter = () => setShowEnter(false);
    const handleShowEnter = () => setShowEnter(true);
    const handleChato = () => setChat(true);
59
    const handleChatc = () => setChat(false);
우지원's avatar
e    
우지원 committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

    socket.on("sendUser", (data) => {
        setNewUser(data)
    })

    //오픈채팅방에서 참가하기
    async function openListroom(roomId) {
        console.log(roomId)
        const roomInf = await axios.get('/room/changeMem', { params: { 'roomId': roomId } })
        console.log(roomInf)
        console.log(roomInf.data)
        console.log(roomInf.data[0])
        setRoom(roomInf.data[0])
        setOpen(true)
        setShow(false)
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
75
    }
우지원's avatar
e    
우지원 committed
76

77
78


우지원's avatar
e    
우지원 committed
79
80
81
82
83
84
85
86
    async function attendListRoom() {
        const userId = sessionStorage.getItem('userId'); //sessionStorage에 저장된 userId가져옴
        const roomId = room.roomId
        const tf = await axios.put('/room/changeMem', { userId: userId, roomId: roomId })
        if (tf.data) {
            alert('참가되었습니다.')
        } else {
            alert('이미 참가된 방입니다.')
87
        }
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
88
89
    }

우지원's avatar
e    
우지원 committed
90
91
92
93
94
95
    function enterButton() {
        setOpen(false)
    }
    const sendMsg = (e) => {
        e.preventDefault()
    }
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
96

우지원's avatar
e    
우지원 committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    useEffect(() => {
        socket.on("sendedMSG", (sendInfo) => {
            setRecievedImg(sendInfo.img)
            setRecievedUser(sendInfo.sender)
            setRecievedMsg(sendInfo.msg)
        })
    }, [])

    return (
        <>
            <Menu />
            <Row className="mr-0">
                <Col className="list" md={5}>
                    <Tabs defaultActiveKey="closed" id="uncontrolled-tab-example">
                        <Tab eventKey="closed" title="내 채팅" onClick={handleChato} >
                            <ClosedList enterChatRoom={enterChatRoom} setRoomCode={setRoomCode} setRoomName={setRoomName} roomCode={roomCode} />
                        </Tab>
114
115
                        <Tab eventKey="open" title="공개방" onClick={handleChato}>
                            <OpenList enterChatRoom={enterChatRoom} openListroom={openListroom} setRoomCode={setRoomCode} setRoomName={setRoomName} roomCode={roomCode} />
우지원's avatar
e    
우지원 committed
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
                        </Tab>
                    </Tabs>
                </Col>
                <Col style={{ padding: "0" }}>
                    <>
                        {(show || chat) ?
                            null
                            : <div style={{ position: "fixed", bottom: "20px", right: "30px" }}>
                                <Button variant="primary" onClick={handleShowModal} size="lg" block>생성</Button>
                                <Button variant="secondary" onClick={handleShowEnter} size="lg" block>참가</Button>
                            </div>
                        }
                        {chat ?
                            <Chat handleChatc={handleChatc} sendMsg={sendMsg} singleChat={singleChat} recievedMsg={recievedMsg} setSingleChat={setSingleChat} roomCode={roomCode} roomName={roomName} />
                            : null}
131
132
133
134
135
136
137
138
139
140
141
142
143
144
                        {open ?
                            <div className="vh-90 flex-column align-items-center justify-content-center mt-2" variant="dark">
                                <div className="d-flex justify-content-center">
                                    <div className="mt-5 p-5 shadow w-75">
                                        <h2 className="d-flex justify-content-center mb-3">현재 {room.roomName} 입니다.</h2>
                                        <h5> 관심분야 : {room.interest}</h5>
                                        <h5> 참여인원 : {room.member.length}</h5>
                                        <h5 className="mb-3"> 방코드(방코드를 통해서도 참여할  있습니다.) : {room.roomId}</h5>
                                        <Row className='justify-content-center'>
                                            <Button variant="outline-warning" size="sm" className="mr-4" onClick={enterButton}>뒤로가기</Button>
                                            <Button variant="outline-warning" size="sm" className="ml-4" type='submit' onClick={attendListRoom}>참가</Button>
                                        </Row>
                                    </div>
                                </div>
우지원's avatar
e    
우지원 committed
145
                            </div>
146
147
                            : null}
                    </>
우지원's avatar
e    
우지원 committed
148
149
150
151
152
153
                </Col>
            </Row>
            <RoomMake showModal={showModal} handleCloseModal={handleCloseModal} />
            <EnterRoom showEnter={showEnter} enterChatRoom={enterChatRoom} handleCloseEnter={handleCloseEnter} handleChato={handleChato} setRoomCode={setRoomCode} setRoomName={setRoomName} />
        </>
    );
우지원's avatar
ul    
우지원 committed
154
155
}

156
export default Home