@@ -5,9 +5,9 @@ import { useRecoilValue } from 'recoil';
55
66import theme from '@styles/theme' ;
77
8- import { createMatchingApi } from '@apis/matching' ;
98import { getUserPostListApi } from '@apis/post' ;
109import { getUserInfoApi } from '@apis/user' ;
10+ import { useSocket } from '@context/SocketProvider' ;
1111import { OtherUserAtom } from '@recoil/util/OtherUser' ;
1212import { getCurrentUserId } from '@utils/getCurrentUserId' ;
1313
@@ -56,6 +56,7 @@ const Profile: React.FC = () => {
5656 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
5757 const [ modalContent , setModalContent ] = useState ( '' ) ;
5858 const navigate = useNavigate ( ) ;
59+ const socket = useSocket ( 'matching' ) ;
5960
6061 const { userId } = useParams < { userId : string } > ( ) ;
6162 const profileUserId = Number ( userId ) ;
@@ -81,26 +82,22 @@ const Profile: React.FC = () => {
8182 fetchData ( ) ;
8283 } , [ profileUserId ] ) ;
8384
84- const createMatching = async ( message : string ) => {
85- const matchingRequestData = {
85+ const createMatching = ( comment : string ) => {
86+ socket . emit ( 'requestMatching' , {
8687 requesterId : currentUserId ,
8788 targetId : otherUser ?. id || profileUserId ,
88- message : message ,
89- } ;
89+ message : comment ,
90+ } ) ;
9091
91- try {
92- await createMatchingApi ( matchingRequestData ) ;
93- handleModalOpen ( `${ userInfo ?. nickname } 님에게 대표 OOTD와 \n한 줄 메세지를 보냈어요!` ) ;
94- } catch ( error ) {
95- console . error ( '매칭 신청 오류:' , error ) ;
96- handleModalOpen ( '매칭 신청에 실패했습니다.' ) ;
97- }
98- } ;
92+ socket . on ( 'error' , ( data ) => {
93+ setModalContent ( data ) ;
94+ setIsModalOpen ( true ) ;
95+
96+ // 리스너가 중복 등록되지 않도록 바로 정리
97+ socket . off ( 'error' ) ;
98+ } ) ;
9999
100- const handleModalOpen = ( message : string ) => {
101100 setIsBottomSheetOpen ( false ) ;
102- setModalContent ( message ) ;
103- setIsModalOpen ( true ) ;
104101 } ;
105102
106103 if ( isLoading ) return < Loading /> ;
0 commit comments