Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

207 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WePB-Client

고객-PBκ°„ 일정 관리 및 μ±„νŒ… μ„œλΉ„μŠ€
μ‹ ν•œνˆ¬μžμ¦κΆŒ 인턴 곡톡 ν”„λ‘œμ νŠΈ

πŸ”— Link

https://github.com/shinhan-internship-project

πŸ“ κ°„λ‹¨ν•œ μ„€λͺ…

  1. 고객이 PB의 정보와 전문성을 ν™•μΈν•˜κ³ 
  2. λ©”μ‹ μ €λ₯Ό 톡해 κ°„νŽΈν•˜κ²Œ 상담을 μ˜ˆμ•½ν•˜λ©°
  3. 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>
  )
}

😑 Trouble Issues

Web Socket 연결을 ν†΅ν•œ μ•ŒλžŒ λ©”μ‹œμ§€ κ΅¬ν˜„

  • μ•ŒλžŒ κΈ°λŠ₯을 μœ„ν•΄μ„œ 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);
        }
      }
    }
  });
});

About

🫧 [μ‹ ν•œνˆ¬μžμ¦κΆŒ 곡톡 ν”„λ‘œμ νŠΈ] 고객-PBκ°„ 일정 관리 및 μ±„νŒ… μ„œλΉ„μŠ€

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages