Chat.js 4.13 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
aa    
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는 메세지
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
13

14
15
  function handleChange(e) {
    e.preventDefault()
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
16
    setInner(e.target.value)
17
    console.log(e.target.value)
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
18
    setDisabled(false)
19
20
21
  }

  function sendMsgCH(e) {
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
22
23
    e.preventDefault()
    props.setSingleChat(inner)
24
    props.sendMsg(e)
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
25
    setInner('')
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
26
27
    setDisabled(true)
    console.log(chat)
28
  }
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
29
30
31
  useEffect(() => {
    getProfile(userId)
  }, [userId])
32

Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
33
34
  useEffect(() => {
    setChat([...chat, props.singleChat])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
35
36
    console.log('UseEffect singlechat', chat)
    // check()
Soo Hyun Kim's avatar
soo0115    
Soo Hyun Kim committed
37
  }, [props.singleChat])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
38

Soo Hyun Kim's avatar
Soo Hyun Kim committed
39
40
  useEffect(() => {
    setChat([...chat, props.recievedMsg])
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
41
    console.log('UseEffect recievechat', chat)
Soo Hyun Kim's avatar
Soo Hyun Kim committed
42
43
  }, [props.recievedMsg])

JeongYeonwoo's avatar
JeongYeonwoo committed
44

JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
45
46
47
48
49
50
51
52
53
54
  // 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
55
  return (
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
56
    <div className="chat" id="chat" style={{ border: "2px solid", height: "300%", margin: "1%", borderColor: "#BDBDBD", background: '' }}>
57
      <h2>해당 방에 대한 참여코드는 {props.roomCode} 입니다.</h2>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
58
      {/* 상대방이 보낸 메세지 띄우기 + 같은유저면 프로필 이미지는 생략(chat을 object로 보낸사람과 함께 보내서 구분하자) */}
59
60
61
62
63
64
65
66
67
68
69
70
71
72
      {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
73
            </Row>
74
75
76
77
78
          )
        } else {
          return null
        }
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
79
80
      }
      {/* 내가 보낸 메세지 띄우기 */}
81
82
83
84
85
86
87
88
89
90
      {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
91
92
93
        } else {
          return null
        }
94
      })
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
95
96
97
98
      }



99
100


우지원's avatar
ul    
우지원 committed
101
      <Button variant="light" onClick={props.handleChatc} >{`<`}</Button>
102
      <Form onSubmit={sendMsgCH}>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
103
104
105
106
107
        <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
108
        </Form.Group>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
109

110
      </Form>
JeongYeonwoo's avatar
yeonwoo    
JeongYeonwoo committed
111
    </div >
우지원's avatar
ul    
우지원 committed
112
113
114
115
116


  );
}

Soo Hyun Kim's avatar
Soo Hyun Kim committed
117

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