@@ -42,18 +42,25 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
4242 handleSubmit,
4343 getValues,
4444 setValue,
45- formState : { errors } ,
45+ formState : { isDirty , errors } ,
4646 } = useForm ( {
4747 defaultValues : defaultValues ,
4848 reValidateMode : "onChange" ,
4949 resolver : zodResolver ( UpdateUserSchema ) ,
5050 } ) ;
51+
5152 async function submit ( data : User ) {
5253 await update ( data ) ;
54+ enqueueSnackbar ( {
55+ message : "保存しました" ,
56+ } ) ;
5357 }
5458 function afterPhotoUpload ( result : string ) {
5559 try {
5660 setValue ( "pictureUrl" , result ) ;
61+ enqueueSnackbar ( {
62+ message : "画像を更新しました" ,
63+ } ) ;
5764 } catch ( err ) {
5865 console . error ( err ) ;
5966 // probably a network error
@@ -66,7 +73,9 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
6673 const [ open , setOpen ] = useState < boolean > ( false ) ;
6774
6875 function handleBack ( ) {
69- if ( Math . random ( ) < 1 /* todo: has errors on unsaved */ ) {
76+ const hasError = Object . values ( errors ) . length >= 1 ;
77+ if ( hasError || isDirty ) {
78+ console . log ( `hasError: ${ hasError } ` , errors ) ;
7079 showAlert ( {
7180 AlertMessage : "編集中のフィールド、もしくはエラーがあります。" ,
7281 subAlertMessage : "本当にページを移動しますか?変更は破棄されます" ,
@@ -81,6 +90,10 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
8190 }
8291
8392 const values = getValues ( ) ;
93+
94+ const [ selectedFaculty , setSelectedFaculty ] = useState ( values . faculty ) ;
95+ const departments = facultiesAndDepartments [ selectedFaculty ] ?? null ;
96+
8497 return (
8598 < div className = "flex h-full flex-col" >
8699 < form onSubmit = { handleSubmit ( submit ) } >
@@ -94,6 +107,7 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
94107 id = "name"
95108 { ...register ( "name" ) }
96109 />
110+ < span className = "text-error text-sm" > { errors . name ?. message } </ span >
97111 </ div >
98112 < div >
99113 < label htmlFor = "gender" className = "text-md" >
@@ -137,6 +151,10 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
137151 className = "select select-bordered w-full"
138152 id = "faculty"
139153 { ...register ( "faculty" ) }
154+ onChange = { ( e ) => {
155+ setSelectedFaculty ( e . target . value ) ;
156+ setValue ( "department" , "" ) ;
157+ } }
140158 >
141159 { faculties . map ( ( fac ) => (
142160 < option key = { fac } > { fac } </ option >
@@ -155,12 +173,11 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
155173 id = "department"
156174 { ...register ( "department" ) }
157175 >
158- { values . faculty &&
159- facultiesAndDepartments [ values . faculty ] . map ( ( dep ) => (
160- < option key = { dep } value = { dep } >
161- { dep }
162- </ option >
163- ) ) }
176+ { departments . map ( ( dep ) => (
177+ < option key = { dep } value = { dep } >
178+ { dep }
179+ </ option >
180+ ) ) }
164181 </ select >
165182 < span className = "text-error text-sm" >
166183 { errors . department ?. message }
@@ -177,6 +194,7 @@ function EditProfile({ defaultValues }: { defaultValues: User }) {
177194 rows = { 3 }
178195 autoComplete = "off"
179196 />
197+ < span className = "text-error text-sm" > { errors . intro ?. message } </ span >
180198 </ div >
181199 < div className = "mt-4 flex flex-col items-center text-center" >
182200 < span className = "text-md" > プロフィール画像</ span >
0 commit comments