11import { postLogout } from '@/apis/auth' ;
2+ import { addBlockList } from '@/apis/blockList' ;
3+ import { deleteAccount , getUserInfo } from '@/apis/user' ;
24import { useAuthStore } from '@/store/authStore' ;
3- import { useLocation , useNavigate } from 'react-router' ;
5+ import { useModalStore } from '@/store/modalStore' ;
6+ import { useUserStore } from '@/store/userStore' ;
7+ import { useLocation , useNavigate , useParams } from 'react-router' ;
48
59// url에 따라서 헤더의 moreOptions 선택
610export const useMoreOptions = ( ) => {
711 const navigate = useNavigate ( ) ;
812 const location = useLocation ( ) ;
13+ const param = useParams ( ) ;
14+
915 const { logout } = useAuthStore ( ) ;
16+ const { openModal, closeModal } = useModalStore ( ) ;
17+ const { userData } = useUserStore ( ) ; // 차단할 유저 정보
1018
1119 const handleEditProfile = ( ) => navigate ( '/mypage/edit' ) ;
1220 const handleBlockList = ( ) => navigate ( '/mypage/blocklist' ) ;
1321 const handleLogout = async ( ) => {
1422 try {
1523 const { code } = await postLogout ( ) ;
1624 if ( code === 200 ) {
17- logout ( ) ;
25+ logout ( ) ; // 토큰 초기화
1826 useAuthStore . persist . clearStorage ( ) ; // 로컬스토리지에서 persist 데이터 삭제
1927 navigate ( '/' ) ;
2028 }
@@ -23,18 +31,86 @@ export const useMoreOptions = () => {
2331 }
2432 } ;
2533
34+ const handleBlockUser = async ( ) => {
35+ if ( ! param . userId ) {
36+ console . log ( '차단 실패' ) ;
37+ return ;
38+ }
39+
40+ openModal ( {
41+ title : `${ userData ?. nickname } 을 차단할까요?` ,
42+ message : '차단된 사용자는 더이상 피드에 나타나지 않습니다' ,
43+ onConfirm : async ( ) => {
44+ if ( param . userId ) {
45+ try {
46+ const data = await addBlockList ( param . userId ) ;
47+ closeModal ( ) ;
48+ console . log ( data ) ;
49+ } catch ( error ) {
50+ console . log ( error ) ;
51+ }
52+ }
53+ } ,
54+ onCancel : ( ) => {
55+ closeModal ( ) ;
56+ } ,
57+ } ) ;
58+ } ;
59+
60+ const handleDeleteAccount = async ( ) => {
61+ try {
62+ const { code, data } = await getUserInfo ( ) ;
63+ if ( code === 200 ) {
64+ openModal ( {
65+ title : [
66+ { text : data . nickName , className : 'text-primary-normal' } ,
67+ { text : '님 떠나시는 건가요?' } ,
68+ ] ,
69+ message : '탈퇴 버튼 선택 시, 모든 활동 정보가 삭제됩니다' ,
70+ confirmText : '탈퇴' ,
71+ onConfirm : async ( ) => {
72+ try {
73+ const { code } = await deleteAccount ( ) ;
74+ if ( code === 200 ) {
75+ logout ( ) ;
76+ useAuthStore . persist . clearStorage ( ) ; // 로컬스토리지에서 persist 데이터 삭제
77+ closeModal ( ) ;
78+ navigate ( '/' ) ;
79+ }
80+ } catch ( error ) {
81+ console . log ( error ) ;
82+ }
83+ } ,
84+ onCancel : ( ) => {
85+ closeModal ( ) ;
86+ } ,
87+ } ) ;
88+ } else {
89+ throw new Error ( '정보를 불러오는 중 오류가 생겼습니다.' ) ;
90+ }
91+ } catch ( error ) {
92+ console . error ( error ) ;
93+ }
94+ } ;
95+
2696 // url에 따라서 다른 items값 return
2797 const getMoreOptionsItems = ( ) => {
28- switch ( location . pathname ) {
29- case '/mypage' :
30- return [
31- { label : '프로필 수정' , onClick : handleEditProfile } ,
32- { label : '차단 목록' , onClick : handleBlockList } ,
33- { label : '로그아웃' , onClick : handleLogout } ,
34- ] ;
35- default :
36- return [ { label : '로그아웃' , onClick : handleLogout } ] ;
98+ if ( location . pathname . startsWith ( '/user/' ) ) {
99+ return [ { label : '차단' , onClick : handleBlockUser } ] ;
37100 }
101+
102+ if ( location . pathname === '/mypage/edit' ) {
103+ return [ { label : '탈퇴하기' , onClick : handleDeleteAccount } ] ;
104+ }
105+ if ( location . pathname === '/mypage' ) {
106+ return [
107+ { label : '프로필 수정' , onClick : handleEditProfile } ,
108+ { label : '차단 목록' , onClick : handleBlockList } ,
109+ { label : '로그아웃' , onClick : handleLogout } ,
110+ ] ;
111+ }
112+
113+ return [ { label : '로그아웃' , onClick : handleLogout } ] ;
38114 } ;
39115
40116 return getMoreOptionsItems ( ) ;
0 commit comments