@@ -4,17 +4,39 @@ import { useState } from 'react';
44
55export default function Form ( ) {
66 const [ name , setName ] = useState ( '' ) ;
7+ const [ email , setEmail ] = useState ( '' ) ;
78 const [ message , setMessage ] = useState ( '' ) ;
9+ const [ loading , setLoading ] = useState ( false ) ;
10+ const [ error , setError ] = useState ( '' ) ;
811
912 const handleSubmit = async ( e : React . FormEvent ) => {
1013 e . preventDefault ( ) ;
11- const res = await fetch ( '/api/submit' , {
12- method : 'POST' ,
13- headers : { 'Content-Type' : 'application/json' } ,
14- body : JSON . stringify ( { name } ) ,
15- } ) ;
16- const data = await res . json ( ) ;
17- setMessage ( data . message ) ;
14+ setLoading ( true ) ;
15+ setMessage ( '' ) ;
16+ setError ( '' ) ;
17+
18+ try {
19+ const res = await fetch ( '/api/submit' , {
20+ method : 'POST' ,
21+ headers : { 'Content-Type' : 'application/json' } ,
22+ body : JSON . stringify ( { name, email } ) ,
23+ } ) ;
24+
25+ if ( ! res . ok ) throw new Error ( 'Failed to submit' ) ;
26+ const data = await res . json ( ) ;
27+ setMessage ( data . message ) ;
28+ } catch {
29+ setError ( 'Submission failed. Please try again.' ) ;
30+ } finally {
31+ setLoading ( false ) ;
32+ }
33+ } ;
34+
35+ const handleReset = ( ) => {
36+ setName ( '' ) ;
37+ setEmail ( '' ) ;
38+ setMessage ( '' ) ;
39+ setError ( '' ) ;
1840 } ;
1941
2042 return (
@@ -27,9 +49,19 @@ export default function Form() {
2749 value = { name }
2850 onChange = { ( e ) => setName ( e . target . value ) }
2951 />
30- < button type = "submit" > Submit</ button >
52+ < input
53+ type = "email"
54+ placeholder = "Enter your email"
55+ value = { email }
56+ onChange = { ( e ) => setEmail ( e . target . value ) }
57+ />
58+ < button type = "submit" disabled = { loading } >
59+ { loading ? 'Submitting...' : 'Submit' }
60+ </ button >
61+ < button type = "button" onClick = { handleReset } > Reset</ button >
3162 </ form >
32- { message && < p > { message } </ p > }
63+ { message && < p style = { { color : 'green' } } > { message } </ p > }
64+ { error && < p style = { { color : 'red' } } > { error } </ p > }
3365 </ div >
3466 ) ;
3567}
0 commit comments