@@ -10,48 +10,61 @@ import back from '../../assets/arrow/left.svg';
1010
1111import BottomButton from '../../components/BottomButton' ;
1212import { patchUserWithdrawApi } from '../../apis/user' ;
13-
13+ import Modal from '../../components/Modal' ;
1414
1515const AccountCancel : React . FC = ( ) => {
1616 const [ isChecked , setIsChecked ] = useState ( false ) ;
17+ const [ modalContent , setModalContent ] = useState < string | null > ( null ) ;
18+ const [ isModalVisible , setIsModalVisible ] = useState < boolean > ( false ) ;
1719 const navigate = useNavigate ( ) ;
1820
1921 const handleCheckboxChange = ( ) => {
2022 setIsChecked ( ! isChecked ) ;
2123 } ;
2224
25+ const handleModalClose = ( ) => {
26+ setIsModalVisible ( false ) ;
27+ setModalContent ( null ) ;
28+ } ;
29+
2330 const handleDeleteAccount = async ( ) => {
2431 try {
2532 if ( ! isChecked ) {
26- alert ( '탈퇴 안내사항에 동의해야 합니다.' ) ;
33+ setModalContent ( '탈퇴 안내사항에 동의해야 합니다.' ) ;
34+ setIsModalVisible ( true ) ;
2735 return ;
2836 }
2937
3038 const storedUserId = Number ( localStorage . getItem ( 'my_id' ) ) ;
3139 const token = localStorage . getItem ( 'new_jwt_token' ) ;
3240
3341 if ( ! storedUserId || ! token ) {
42+ setModalContent ( '사용자 정보를 찾을 수 없습니다.' ) ;
43+ setIsModalVisible ( true ) ;
3444 return ;
3545 }
3646
3747 // API 요청
3848 const response = await patchUserWithdrawApi ( storedUserId ) ;
3949
40- // 요청이 성공했는지 확인
4150 if ( response . isSuccess ) {
42- // 성공 메시지 출력
43- alert ( '계정이 성공적으로 삭제되었습니다.' ) ;
51+ setModalContent ( '계정이 성공적으로 삭제되었습니다.' ) ;
52+ setIsModalVisible ( true ) ;
4453
4554 // 계정 삭제 시 localStorage에서 사용자 정보 제거
4655 localStorage . clear ( ) ;
56+
57+ setTimeout ( ( ) => {
58+ navigate ( '/login' ) ;
59+ } , 2000 ) ;
4760 } else {
48- // 요청 실패 시 오류 메시지 출력
49- console . error ( 'API Error:' , response . code || '알 수 없는 오류가 발생했습니다.' ) ;
50- alert ( response . code || 'Failed to delete account' ) ;
61+ setModalContent ( response . code || '알 수 없는 오류가 발생했습니다.' ) ;
62+ setIsModalVisible ( true ) ;
5163 }
5264 } catch ( error ) {
5365 console . error ( '계정 삭제하는데 오류남:' , error ) ;
54- alert ( '계정을 삭제하는 동안 오류가 발생했습니다. 다시 시도해 주세요.' ) ;
66+ setModalContent ( '계정을 삭제하는 동안 오류가 발생했습니다. 다시 시도해 주세요.' ) ;
67+ setIsModalVisible ( true ) ;
5568 }
5669 } ;
5770
@@ -77,16 +90,29 @@ const AccountCancel: React.FC = () => {
7790 </ Text >
7891 < InfoBox >
7992 < InfoItem as = "div" >
80- < StyledText as = "div" $textTheme = { { style : 'body1-medium' , lineHeight : 2 } } color = { theme . colors . black } >
81- 지금까지 OODD를 이용해주셔서 감사합니다!
82- </ StyledText >
93+ < StyledText
94+ as = "div"
95+ $textTheme = { { style : 'body1-medium' , lineHeight : 2 } }
96+ color = { theme . colors . black }
97+ style = { { whiteSpace : 'nowrap' } } // 줄 바꿈 방지
98+ >
99+ 지금까지 OODD를 이용해주셔서 감사합니다!
100+ </ StyledText >
101+
83102 </ InfoItem >
84103 </ InfoBox >
85104 < CheckboxWrapper as = "div" >
86- < input type = "checkbox" checked = { isChecked } onChange = { handleCheckboxChange } />
105+ < label style = { { display : 'flex' , alignItems : 'center' , cursor : 'pointer' } } >
106+ < input
107+ type = "checkbox"
108+ checked = { isChecked }
109+ onChange = { handleCheckboxChange }
110+ style = { { marginRight : '8px' } } // 텍스트와 체크박스 간격 조절
111+ />
87112 < StyledText as = "span" $textTheme = { { style : 'body4-light' , lineHeight : 1 } } color = { theme . colors . gray3 } >
88113 안내사항을 모두 확인하였으며, 이에 동의합니다.
89114 </ StyledText >
115+ </ label >
90116 </ CheckboxWrapper >
91117 </ CancelContainer >
92118 < div
@@ -98,6 +124,15 @@ const AccountCancel: React.FC = () => {
98124 >
99125 < BottomButton content = "탈퇴하기" onClick = { handleDeleteAccount } disabled = { ! isChecked } />
100126 </ div >
127+ { isModalVisible && (
128+ < Modal
129+ content = { modalContent || '' } // null일 경우 빈 문자열로 처리
130+ onClose = { handleModalClose }
131+ isCloseButtonVisible = { true }
132+ button = { { content : '확인' , onClick : handleModalClose } }
133+ />
134+ ) }
135+
101136 </ OODDFrame >
102137 ) ;
103138} ;
0 commit comments