1- import { useState } from 'react' ;
21import { useNavigate } from 'react-router-dom' ;
32
4- import { useRecoilState } from 'recoil' ;
53import { Pagination } from 'swiper/modules' ;
64import { Swiper , SwiperSlide } from 'swiper/react' ;
75import 'swiper/css' ;
86import 'swiper/css/pagination' ;
97
108import theme from '@styles/theme' ;
119
12- import { modifyMatchingStatusApi } from '@apis/matching' ;
13- import { handleError } from '@apis/util/handleError' ;
14- import { OtherUserAtom } from '@recoil/util/OtherUser' ;
15-
16- import acceptButton from '@assets/default/accept.svg' ;
1710import defaultProfile from '@assets/default/defaultProfile.svg' ;
18- import rejectButton from '@assets/default/reject.svg' ;
1911
20- import Modal from '@components/Modal' ;
2112import { StyledText } from '@components/Text/StyledText' ;
2213
23- import type { ModalProps } from '@components/Modal/dto' ;
24-
2514import type { CardProps } from './dto' ;
2615
27- import {
28- ArrowButton ,
29- Btn ,
30- CardLayout ,
31- OOTDImgBackground ,
32- OOTDImgBox ,
33- ProfileContainer ,
34- ProfileImgBox ,
35- ProfileInfo ,
36- Reaction ,
37- SeeMore ,
38- } from './styles' ;
16+ import { CardLayout , OOTDImgBackground , OOTDImgBox , ProfileContainer , ProfileImgBox , ProfileInfo } from './styles' ;
3917
40- const Card : React . FC < CardProps > = ( { id, chatRoomId, requester } ) => {
41- const [ isStatusModalOpen , setIsStatusModalOpen ] = useState ( false ) ;
42- const [ modalContent , setModalContent ] = useState ( '알 수 없는 오류가 발생했습니다.\n관리자에게 문의해 주세요.' ) ;
43- const [ , setOtherUser ] = useRecoilState ( OtherUserAtom ) ;
18+ const Card : React . FC < CardProps > = ( { requester } ) => {
4419 const nav = useNavigate ( ) ;
4520
4621 const handleUserClick = ( ) => {
4722 nav ( `/profile/${ requester . id } ` ) ;
4823 } ;
4924
50- const handleRejectButtonClick = ( ) => {
51- modifyMatchingStatus ( 'reject' ) ;
52- } ;
53-
54- const handleAcceptButtonClick = ( ) => {
55- modifyMatchingStatus ( 'accept' ) ;
56- } ;
57-
58- // 매칭 거절 및 수락 api
59- const modifyMatchingStatus = async ( status : 'accept' | 'reject' ) => {
60- try {
61- const response = await modifyMatchingStatusApi ( id , { requestStatus : status } ) ;
62-
63- if ( response . isSuccess ) {
64- if ( status === 'accept' ) {
65- setOtherUser ( {
66- id : requester . id ,
67- nickname : requester . nickname ,
68- profilePictureUrl : requester . profilePictureUrl ,
69- } ) ;
70- nav ( `/chats/${ chatRoomId } ` ) ;
71- }
72- }
73- } catch ( error ) {
74- const errorMessage = handleError ( error ) ;
75- setModalContent ( errorMessage ) ;
76- setIsStatusModalOpen ( true ) ;
77- }
78- } ;
79-
80- const statusModalProps : ModalProps = {
81- content : modalContent ,
82- onClose : ( ) => {
83- setIsStatusModalOpen ( false ) ;
84- } ,
85- } ;
86-
8725 return (
8826 < CardLayout >
8927 < ProfileContainer >
@@ -113,12 +51,6 @@ const Card: React.FC<CardProps> = ({ id, chatRoomId, requester }) => {
11351 ) ) }
11452 </ div >
11553 </ ProfileInfo >
116- < SeeMore onClick = { ( ) => nav ( `/profile/${ requester . id } ` ) } >
117- < StyledText $textTheme = { { style : 'caption2-regular' } } color = { theme . colors . text . caption } >
118- OOTD 더 보기
119- </ StyledText >
120- < ArrowButton />
121- </ SeeMore >
12254 </ ProfileContainer >
12355 < OOTDImgBox >
12456 < Swiper
@@ -139,16 +71,7 @@ const Card: React.FC<CardProps> = ({ id, chatRoomId, requester }) => {
13971 </ SwiperSlide >
14072 ) ) }
14173 </ Swiper >
142- < Reaction >
143- < Btn onClick = { handleRejectButtonClick } >
144- < img src = { rejectButton } alt = "reject" />
145- </ Btn >
146- < Btn onClick = { handleAcceptButtonClick } >
147- < img src = { acceptButton } alt = "accept" />
148- </ Btn >
149- </ Reaction >
15074 </ OOTDImgBox >
151- { isStatusModalOpen && < Modal { ...statusModalProps } /> }
15275 </ CardLayout >
15376 ) ;
15477} ;
0 commit comments