Chat.js 4.45 KB
Newer Older
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
1
import axios from 'axios';
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
2
import React, { useState, useEffect } from 'react';
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
3
4
5
import { Form, Button, Row, Image, Col, Container } from 'react-bootstrap';
import { isAuthenticated } from '../utils/auth';
import catchErrors from '../utils/catchErrors';
우지원's avatar
ul    
우지원 committed
6
7
8


function Chat(props) {
Choi Ga Young's avatar
Choi Ga Young committed
9
  // let defaultname = sessionStorage.getItem('name');
JeongYeonwoo's avatar
JeongYeonwoo committed
10

Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
11
  const [inner, setInner] = useState([''])
Soo Hyun Kim's avatar
Soo Hyun Kim committed
12
  const [chat, setChat] = useState([])   //object로 key는 보낸사람 value는 메세지
Choi Ga Young's avatar
Choi Ga Young committed
13
14
15
  const [disabled, setDisabled] = useState(true)
  const [user, setUser] = useState('')
  const [error, setError] = useState('');
Choi Ga Young's avatar
Choi Ga Young committed
16
  
Choi Ga Young's avatar
Choi Ga Young committed
17
18
19
20
21
22
23
24
25
26

  const userId = isAuthenticated()
  async function getProfile(userId) {
    try {
      const response = await axios.get(`/users/${userId}`)
      setUser(response.data)
    } catch (error) {
      catchErrors(error, setError)
    }
  }
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
27

28
29
  function handleChange(e) {
    e.preventDefault()
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
30
    setInner(e.target.value)
31
    console.log(e.target.value)
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
32
    setDisabled(false)
33
34
35
  }

  function sendMsgCH(e) {
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
36
37
    e.preventDefault()
    props.setSingleChat(inner)
38
    props.sendMsg(e)
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
39
    setInner('')
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
40
41
    setDisabled(true)
    console.log(chat)
42
  }
Choi Ga Young's avatar
Choi Ga Young committed
43
44
45
46
47
48

  function handleClick(e) {
    setChat([])
    props.handleChatc()
  }

JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
49
50
51
  useEffect(() => {
    getProfile(userId)
  }, [userId])
52

Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
53
54
  useEffect(() => {
    setChat([...chat, props.singleChat])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
55
56
    console.log('UseEffect singlechat', chat)
    // check()
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
57
  }, [props.singleChat])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
58

Soo Hyun Kim's avatar
Soo Hyun Kim committed
59
60
  useEffect(() => {
    setChat([...chat, props.recievedMsg])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
61
    console.log('UseEffect recievechat', chat)
Soo Hyun Kim's avatar
Soo Hyun Kim committed
62
63
  }, [props.recievedMsg])

JeongYeonwoo's avatar
JeongYeonwoo committed
64

JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
65
66
67
68
69
70
71
72
73
74
  // function check() {
  //   // if (chat[chat.length-1].user ===chat[chat.length-2].user){  //마지막보낸거랑 그 전꺼랑 보낸사람이 같은지 비교
  //   if (chat.length === 2) {
  //     setHidden(false)
  //   } else {
  //     setHidden(true)
  //   }
  //   console.log(hidden)
  // }
  const time = new Date().toLocaleTimeString()
우지원's avatar
ul    
우지원 committed
75
  return (
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
76
    <div className="chat" id="chat" style={{ border: "2px solid", height: "300%", margin: "1%", borderColor: "#BDBDBD", background: '' }}>
77
      <h2>해당 방에 대한 참여코드는 {props.roomCode} 입니다.</h2>
Choi Ga Young's avatar
Choi Ga Young committed
78
      <p>{props.newUser}님이 입장하셨습니다.</p>
79
80
81
82
83
84
85
86
87
88
89
90
91
92
      {chat.map((value, index) => {
        if (!(value == '')) {
          return (
            <Row key={index} className='m-1 ml-3' >
              <Col xs={2}>
                {user.profileimg ? <Image src={user.profileimg && `/images/${user.profileimg}`} style={{ width: "50px", height: "50px" }} roundedCircle /> : <Image src='https://www.flaticon.com/svg/vstatic/svg/149/149071.svg?token=exp=1610922596~hmac=f4b972b9db509d4e3cc2eb40543b0b0f' style={{ width: "50px", height: "50px" }} roundedCircle />}
              </Col>
              <Col xs={8}>
                <Row><strong>{user.nickname} {index}</strong></Row>
                <Row className='d-flex flex-wrap-nowrap'>
                  <Col className='border border-dark' style={{ width: 'max-content', maxWidth: '300px', height: 'auto', paddingLeft: '15px', paddingRight: '15px', background: 'white', borderRadius: '5px', fontSize: 'x-large' }}>{value}</Col>
                  <Col className='ml-4'>{new Date().toLocaleTimeString()}</Col>
                </Row>
              </Col>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
93
            </Row>
94
95
96
97
          )
        } else {
          return null
        }
Choi Ga Young's avatar
Choi Ga Young committed
98

99
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
100
101
      }
      {/* 내가 보낸 메세지 띄우기 */}
102
103
104
105
106
107
108
109
110
111
      {chat.map((value, index) => {
        if (!(value == '')) {
          return (
            <Row key={index} className='m-1 mr-4 justify-content-end'>
              <div className='d-flex flex-wrap-nowrap' >
                <Row className='mr-4'>{time}</Row>
                <Row style={{ width: 'max-content', maxWidth: '300px', height: 'auto', paddingLeft: '15px', paddingRight: '15px', background: 'yellow', borderRadius: '3px', fontSize: 'x-large' }}>{value}</Row>
              </div>
            </Row>
          )
Soo Hyun Kim's avatar
Soo Hyun Kim committed
112
113
114
        } else {
          return null
        }
115
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
116
      }
Choi Ga Young's avatar
Choi Ga Young committed
117
      <Button variant="light" onClick={handleClick} >{`<`}</Button>
118
      <Form onSubmit={sendMsgCH}>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
119
120
121
122
123
        <Form.Group className='d-flex flex-wrap-nowrap justify-content-center ml-2 mr-2'>
          <Form.Control className='border border-warning' name='chat' type="text" value={inner} onChange={handleChange} style={{ width: '85%' }} />
          <Button variant="warning" type="submit" disabled={disabled} style={{ width: '10%' }}>
            전송
          </Button>
우지원's avatar
ul    
우지원 committed
124
        </Form.Group>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
125

126
      </Form>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
127
    </div >
우지원's avatar
ul    
우지원 committed
128
129
130
131
132


  );
}

Soo Hyun Kim's avatar
Soo Hyun Kim committed
133

우지원's avatar
ul    
우지원 committed
134
export default Chat;