Chat.js 4.55 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
16
17
18
19
20
21
22
23
24
25
  const [disabled, setDisabled] = useState(true)
  const [user, setUser] = useState('')
  const [error, setError] = useState('');

  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
26

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

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

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

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

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

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

JeongYeonwoo's avatar
JeongYeonwoo committed
63

JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
64
65
66
67
68
69
70
71
72
73
  // 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
74
  return (
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
75
    <div className="chat" id="chat" style={{ border: "2px solid", height: "300%", margin: "1%", borderColor: "#BDBDBD", background: '' }}>
76
      <h2>해당 방에 대한 참여코드는 {props.roomCode} 입니다.</h2>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
77
      {/* 상대방이 보낸 메세지 띄우기 + 같은유저면 프로필 이미지는 생략(chat을 object로 보낸사람과 함께 보내서 구분하자) */}
78
79
80
81
82
83
84
85
86
87
88
89
90
91
      {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
92
            </Row>
93
94
95
96
97
          )
        } else {
          return null
        }
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
98
99
      }
      {/* 내가 보낸 메세지 띄우기 */}
100
101
102
103
104
105
106
107
108
109
      {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
110
111
112
        } else {
          return null
        }
113
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
114
115
      }

Choi Ga Young's avatar
Choi Ga Young committed
116
      <Button variant="light" onClick={handleClick} >{`<`}</Button>
117
      <Form onSubmit={sendMsgCH}>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
118
119
120
121
122
        <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
123
        </Form.Group>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
124

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


  );
}

Soo Hyun Kim's avatar
Soo Hyun Kim committed
132

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