11import { useForm } from 'react-hook-form' ;
22import { useState } from 'react' ;
33import { Avatar , AvatarFallback , AvatarImage } from '@/shared/ui/shadcn/avatar' ;
4- import { UserData } from '@/pages/Profile ' ;
5- import { Field } from '@/shared/types/sharedTypes ' ;
4+ import { UserData , useUserDataMutation } from '@/entities/user ' ;
5+ import { Field } from '@/shared/types' ;
66import { Button } from '@/shared/ui/shadcn/button' ;
7- import { axiosInstance } from '@/shared/api' ;
8- import { useToast } from '@/shared/lib' ;
7+ import { FormInput , transformFormToApiData } from '../lib' ;
98
109type EditUserInfoProps = Readonly < {
1110 userData : UserData | undefined ;
1211 toggleEditing : ( ) => void ;
1312} > ;
1413
15- export type FormInput = {
16- camperId : string | undefined ;
17- name : string | undefined ;
18- field : Field | undefined ;
19- email : string | undefined ;
20- github : string | undefined ;
21- blog : string | undefined ;
22- linkedIn : string | undefined ;
23- } ;
24-
2514export function EditUserInfo ( { userData, toggleEditing } : EditUserInfoProps ) {
2615 const [ selectedField , setSelectedField ] = useState < Field | undefined > ( userData ?. field ) ;
2716 const {
@@ -39,34 +28,18 @@ export function EditUserInfo({ userData, toggleEditing }: EditUserInfoProps) {
3928 linkedIn : userData ?. contacts . linkedIn ,
4029 } ,
4130 } ) ;
42- const { toast } = useToast ( ) ;
31+ const { mutateAsync } = useUserDataMutation ( toggleEditing ) ;
4332
4433 const handleSelectField = ( field : Field ) => {
4534 setSelectedField ( selectedField === field ? '' : field ) ;
4635 } ;
4736
4837 const handlePatchUserInfo = ( data : FormInput ) => {
49- const formData = {
50- name : data . name ,
51- camperId : data . camperId ,
52- field : selectedField ,
53- contacts : {
54- email : data . email ? data . email : '' ,
55- github : data . github ? data . github : '' ,
56- blog : data . blog ? data . blog : '' ,
57- linkedin : data . linkedIn ? data . linkedIn : '' ,
58- } ,
59- } ;
38+ const formData = transformFormToApiData ( data , selectedField ) ;
6039
6140 if ( ! formData . field ) return ;
6241
63- axiosInstance . patch ( '/v1/members/info' , formData ) . then ( response => {
64- if ( response . data . success ) {
65- toggleEditing ( ) ;
66- } else {
67- toast ( { variant : 'destructive' , title : '유저 정보 수정 실패' } ) ;
68- }
69- } ) ;
42+ mutateAsync ( formData ) ;
7043 } ;
7144
7245 return (
0 commit comments