κ³ κ°-PBκ° μΌμ κ΄λ¦¬ λ° μ±ν μλΉμ€
μ νν¬μμ¦κΆ μΈν΄κ³΅ν΅ νλ‘μ νΈ
- κ³ κ°μ΄
PBμ μ 보μ μ λ¬Έμ±μ νμΈνκ³ - λ©μ μ λ₯Ό ν΅ν΄ κ°νΈνκ²
μλ΄μ μμ½νλ©° PBμ μ 무 ν¨μ¨μ±μ λμΌ μ μλ μΉ μ΄ν리μΌμ΄μ
- μ΄λ²μλ
Front-endλ§‘μ - Calendar Page κ°λ°
- MyPage κ°λ°
- μ€μκ° ν΅μ μ°κ²°μ ν΅ν μ€μκ° μ±ν λ° μλ μλΉμ€
| μΊλ¦°λ νμ΄μ§ | PB κ°μΈ μΌμ μΆκ° | μΌμ μμΈ λ΄μ© |
|---|---|---|
![]() |
![]() |
![]() |
| λ§μ΄νμ΄μ§ | μ€μκ° μ±ν μ°κ²° | μλ μλΉμ€ |
|---|---|---|
![]() |
![]() |
![]() |
AddSchedule.jsx CalendarPage.jsx ConsultingReservationPage.jsx SignupPage.jsxμμ 곡ν΅μΌλ‘ μ¬μ©λ AlertModal.jsxμ μ»΄ν¬λννμ¬ κ΄λ¦¬
import React from 'react'
import check from '../../assets/check.svg';
import ButtonActive from '../button/ButtonActive';
export default function AlertModal({status, message, clickBtn}){
return (
<div className="absolute z-10 flex items-center justify-center w-screen h-screen">
<div className="absolute w-full h-full bg-gray-300 opacity-50 z-11" />
<div className="fixed shadow-md bg-white rounded-[30px] z-20 p-10 flex flex-col items-center gap-5 animate-slide-down">
<div className="flex justify-center gap-1">
<img src={check} className="w-7 h-7" />
<span className="font-bold text-[18px] text-center whitespace-pre-line">
{message(status)}
</span>
</div>
<div className="flex items-center justify-center w-full">
<ButtonActive
btnTxt="νμΈ"
isConfirm={true}
clickBtn={() => clickBtn(status)}
/>
</div>
</div>
</div>
)
}- μλ κΈ°λ₯μ μν΄μ connect()μ ν΅ν΄
κ°μ₯ μ΅μ λ©μμ§μ μκ°μ storeμ μ μ₯νκ² λλ€. - νμ΄μ§μ λ°λΌμ μλ μ¬λΆκ° λ¬λΌμ§κΈ° λλ¬Έμ
λ©μμ§λ₯Ό λ°μμ¬ λλ§λ€ pathname()μ κ²μ¬νκ² λλ€.
[κΈ°μ‘΄ μ½λ]
stompClient.current.connect({}, () => {
stompClient.current.subscribe(`/sub/user/${id}`, message => {
const newChatRooms = JSON.parse(message.body);
newChatRooms.sort((a, b) => {
return new Date(b.lastMessageTime) - new Date(a.lastMessageTime);
});
dispatch(setChatRooms(newChatRooms));
if(newChatRooms.length > 0){
const newLastMessage = newChatRooms[0];
if(lastMessageTime === "" || lastMessageTime < newLastMessage.lastMessageTime){
setName(newLastMessage.partnerName)
if(newLastMessage.lastMessage === ''){
setMessage('μλ‘μ΄ μ±ν
λ°©μ΄ μμ±λμμ΅λλ€.')
} else {
setMessage(newLastMessage.lastMessage)
}
dispatch(setLastMessageTime(newLastMessage.lastMessageTime))
if(!pathname.startsWith('/chat')){
setIsAlarmOpen(true);
}
}
}
});
});[λ¬Έμ μν©]
- stompClient.current.subscribeλ‘ μ λ¬λ μ½λ°± ν¨μλ
μ΄κΈ° λ λλ§ μμλ§ μ€μ - setLastmessageTime()μ ν΅ν΄ storeμ μ μ₯μ΄ λμ΄λ lastMessageTimeμ μ΄κΈ° κ°μΌλ‘ κ³ μ
- pathname λν κ°μ λ°©μμΌλ‘ μ΄κΈ° κ°μΌλ‘ κ³ μ
[ν΄κ²° λ°©λ²]
- μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ
useRef()μ μ¬μ© - useRef()μ μ¬μ©νλ©΄
리λ λλ§ μμ΄λ κ°μ μ μ§ν μ μμ ->μνκ΄λ¦¬
[μμ λ μ½λ]
stompClient.current.connect({}, () => {
stompClient.current.subscribe(`/sub/user/${id}`, message => {
const newChatRooms = JSON.parse(message.body);
newChatRooms.sort((a, b) => {
return new Date(b.lastMessageTime) - new Date(a.lastMessageTime);
});
dispatch(setChatRooms(newChatRooms));
if(newChatRooms.length > 0){
const newLastMessage = newChatRooms[0];
if(lastMessageTimeRef.current === "" || lastMessageTimeRef.current < newLastMessage.lastMessageTime){
setName(newLastMessage.partnerName)
if(newLastMessage.lastMessage === ''){
setMessage('μλ‘μ΄ μ±ν
λ°©μ΄ μμ±λμμ΅λλ€.')
} else {
setMessage(newLastMessage.lastMessage)
}
dispatch(setLastMessageTime(newLastMessage.lastMessageTime))
if(!pathnameRef.current.startsWith('/chat')){
setIsAlarmOpen(true);
}
}
}
});
});




