SideChat.js
2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import './App.css';
import axios from "axios";
import { useEffect, useState, useRef } from 'react';
import './SideChat.css'
import InnerChat from './InnerChat';
function SideChat() {
const chatContainer = useRef(null);
const [list, setList] = useState([]);
const getWaiting = () => {
axios.get("/api/waiting").then((res) => {
var newList = [];
setList(res.data);
setTimeout(() =>{
const scroll = chatContainer.current.scrollHeight - chatContainer.current.clientHeight;
chatContainer.current.scrollTo(0, scroll);
},100);
});
}
const postWaiting = (inp) => {
axios.post("/api/waiting", {value:inp}).then((res) => {
getWaiting();
});
}
useEffect(() => {
getWaiting();
scrollChat();
}, []);
return (
<div className='SideChat'>
<div ref={chatContainer} className='innerChat1'>
{list.map((item, index) => {
return (
<InnerChat key={index} value={item.value} time={item.time}/>
)
})}
</div>
<div className='innerChat2'>
<div>
대기시간
</div>
<div className='innerBtnCover'>
<button className='innerBtn' id='under5' onClick={()=>postWaiting("5분 이내")}>5분 이내</button>
<button className='innerBtn' id='5to10' onClick={()=>postWaiting("5분~10분")}>5분~10분</button>
<button className='innerBtn' id='over10' onClick={()=>postWaiting("10분 이상")}>10분 이상</button>
</div>
</div>
</div>
);
}
const scrollChat = () => {
let scrollY;
const sideChat = document.getElementsByClassName('SideChat')[0];
scrollY = window.scrollY + document.body.scrollHeight / 5 - 50;
sideChat.style.top = scrollY + "px";
const reposition = () => { // 화면 크기 바뀔때도 이래야함--> 추후수정
sideChat.style.transition = '800ms';
scrollY = window.scrollY + document.body.scrollHeight / 5 - 50;
sideChat.style.top = scrollY + "px";
}
document.addEventListener('scroll', reposition);
document.addEventListener('resize', reposition);
}
// 각 버튼마다 서버에 알맞은 요청 전송
// 받아온 응답을 배열에 넣기 --> 채팅창은 한정되어있으므로 배열 크기는 한정
// 응답은 {id, 대기시간, 현재시간}을 모아놓은 배열로
// innerChat1은 아래쪽 정렬
export default SideChat;