@@ -3,7 +3,7 @@ import Modal from "@/views/components/modal";
33import test from "@/assets/imgs/common/user.svg" ;
44
55// api
6- import { getProfile , Withdraw } from "@/api/main/profile" ;
6+ import { getProfile , Withdraw , patchProfile } from "@/api/main/profile" ;
77import { logout } from "@/api/splash/login" ;
88
99// import
@@ -19,52 +19,88 @@ interface UserModalProps {
1919 onCloseModal : ( ) => void ;
2020}
2121
22- const UserModal = ( {
23- onCloseModal,
24- } : UserModalProps ) => {
25-
22+ const UserModal = ( { onCloseModal } : UserModalProps ) => {
2623 const [ profile , setProfile ] = useState < profileData > ( ) ;
27-
24+ const [ isEdit , setIsEdit ] = useState ( false ) ;
25+ const [ editName , setEditName ] = useState ( "" ) ;
26+ const clickEdit = ( ) => {
27+ setEditName ( profile ?. name ?? "" ) ;
28+ setIsEdit ( true ) ;
29+ } ;
2830 const clickLogout = ( ) => {
29- logout ( ) . then ( ( ) => {
30- alert ( ' 로그아웃 되었습니다.' )
31+ logout ( ) . then ( ( ) => {
32+ alert ( " 로그아웃 되었습니다." ) ;
3133 clearTokens ( ) ;
32- window . location . href = '/'
34+ window . location . href = "/" ;
3335 } ) ;
34- }
36+ } ;
3537
3638 const clickWithdraw = ( ) => {
37- if ( confirm ( "정말 계정을 삭제하시겠습니까?" ) ) {
39+ if ( confirm ( "정말 계정을 삭제하시겠습니까?" ) ) {
3840 Withdraw ( ) . then ( ( ) => {
39- alert ( ' 계정이 정상적으로 삭제되었습니다.' )
41+ alert ( " 계정이 정상적으로 삭제되었습니다." ) ;
4042 clearTokens ( ) ;
41- window . location . href = '/'
42- } )
43+ window . location . href = "/" ;
44+ } ) ;
4345 }
44- }
46+ } ;
4547
4648 useEffect ( ( ) => {
4749 getProfile ( ) . then ( ( res : any ) => {
4850 setProfile ( res . data . data ) ;
4951 } ) ;
50- } , [ ] ) ;
52+ } , [ ] ) ;
53+
54+ useEffect ( ( ) => {
55+ if ( profile ?. name ) setEditName ( profile . name ) ;
56+ } , [ profile ] ) ;
5157
5258 return (
5359 < Modal onCloseModal = { onCloseModal } >
5460 < div className = "modal-wrap" >
5561 < div className = "info-wrap" >
5662 < div className = "user-img" >
5763 < img src = { profile ?. imageUrl ?? test } alt = "" />
64+ < div className = "edit-div" onClick = { clickEdit } > </ div >
5865 </ div >
59- < div className = "user-name" > { profile ?. name } </ div >
66+ { isEdit ? (
67+ < input
68+ type = "text"
69+ value = { editName }
70+ className = "title-rename-input"
71+ onChange = { ( e ) => setEditName ( e . target . value ) }
72+ onBlur = { ( ) => setIsEdit ( false ) }
73+ onKeyDown = { ( e ) => {
74+ if ( e . key === "Enter" ) {
75+ const newName = e . currentTarget . value ;
76+ setIsEdit ( false ) ;
77+ setEditName ( newName ) ;
78+ patchProfile ( {
79+ name : newName ,
80+ imageUrl : profile ?. imageUrl ?? "" ,
81+ } as profileData ) . then ( ( ) => {
82+ console . log ( "프로필 변경 성공" ) ;
83+ setProfile ( ( prev ) => prev && { ...prev , name : newName } ) ;
84+ window . location . reload ( ) ;
85+ } ) ;
86+ }
87+ } }
88+ />
89+ ) : (
90+ < div className = "user-name" > { profile ?. name } </ div >
91+ ) }
6092 < div className = "user-email" > { profile ?. email } </ div >
6193 </ div >
6294 < ul className = "edit-wrap" >
6395 { /* <li className="mode-wrap"></li> */ }
64- < li className = "log-out" onClick = { clickLogout } > 로그아웃</ li >
96+ < li className = "log-out" onClick = { clickLogout } >
97+ 로그아웃
98+ </ li >
6599 < li className = "pwd-edit" > 비밀번호 변경</ li >
66100 </ ul >
67- < button className = "remove" onClick = { clickWithdraw } > 계정 삭제</ button >
101+ < button className = "remove" onClick = { clickWithdraw } >
102+ 계정 삭제
103+ </ button >
68104 < p > 개인 정보 처리 방침・이용약관</ p >
69105 </ div >
70106 </ Modal >
0 commit comments