@@ -14,64 +14,76 @@ export default function ExampleForm() {
14
14
const [ errors , setErrors ] = React . useState ( { } ) ;
15
15
const [ loading , setLoading ] = React . useState ( false ) ;
16
16
17
+ const [ results , setResults ] = React . useState < number | null > ( null ) ;
18
+
17
19
return (
18
- < Form
19
- className = { formStyles . Form }
20
- style = { { maxWidth : '18rem' } }
21
- errors = { errors }
22
- onClearErrors = { setErrors }
23
- onSubmit = { async ( event ) => {
24
- event . preventDefault ( ) ;
25
- const formData = new FormData ( event . currentTarget ) ;
26
- const formValues = Object . fromEntries ( formData as any ) as FormValues ;
27
- console . log ( formValues ) ;
20
+ < div style = { { width : '18rem' } } >
21
+ < Form
22
+ className = { formStyles . Form }
23
+ style = { { maxWidth : '18rem' } }
24
+ errors = { errors }
25
+ onClearErrors = { setErrors }
26
+ onSubmit = { async ( event ) => {
27
+ event . preventDefault ( ) ;
28
+ const formData = new FormData ( event . currentTarget ) ;
29
+ const formValues = Object . fromEntries ( formData as any ) as FormValues ;
28
30
29
- setLoading ( true ) ;
30
- const response = await submitForm ( formValues ) ;
31
- const serverErrors = {
32
- priceRange : response . errors ?. priceRange ,
33
- } ;
31
+ setLoading ( true ) ;
32
+ const response = await submitForm ( formValues ) ;
33
+ const serverErrors = {
34
+ priceRange : response . errors ?. priceRange ,
35
+ } ;
34
36
35
- setErrors ( serverErrors ) ;
36
- setLoading ( false ) ;
37
- console . log ( 'response' , response ) ;
38
- } }
39
- >
40
- < Field . Root name = "priceRange" className = { formStyles . Field } >
41
- < Slider . Root
42
- defaultValue = { [ 500 , 1200 ] }
43
- min = { 100 }
44
- max = { 2000 }
45
- step = { 1 }
46
- minStepsBetweenValues = { 1 }
47
- className = { styles . Root }
48
- format = { {
49
- style : 'currency' ,
50
- currency : 'EUR' ,
51
- } }
52
- locale = "nl-NL"
53
- style = { { width : '18rem' } }
54
- >
55
- < Field . Label className = { styles . Label } > Price range</ Field . Label >
56
- < Slider . Value className = { styles . Value } />
57
- < Slider . Control className = { styles . Control } >
58
- < Slider . Track className = { styles . Track } >
59
- < Slider . Indicator className = { styles . Indicator } />
60
- < Slider . Thumb className = { styles . Thumb } />
61
- < Slider . Thumb className = { styles . Thumb } />
62
- </ Slider . Track >
63
- </ Slider . Control >
64
- </ Slider . Root >
65
- < Field . Error className = { formStyles . Error } />
66
- </ Field . Root >
67
- < button disabled = { loading } type = "submit" className = { formStyles . Button } >
68
- Search
69
- </ button >
70
- </ Form >
37
+ setErrors ( serverErrors ) ;
38
+ setLoading ( false ) ;
39
+ if ( response ?. response ?. results ) {
40
+ setResults ( response . response . results ) ;
41
+ }
42
+ } }
43
+ >
44
+ < Field . Root name = "priceRange" className = { formStyles . Field } >
45
+ < Slider . Root
46
+ defaultValue = { [ 500 , 1200 ] }
47
+ min = { 100 }
48
+ max = { 2000 }
49
+ step = { 1 }
50
+ minStepsBetweenValues = { 1 }
51
+ className = { styles . Root }
52
+ format = { {
53
+ style : 'currency' ,
54
+ currency : 'EUR' ,
55
+ } }
56
+ locale = "nl-NL"
57
+ style = { { width : '18rem' } }
58
+ >
59
+ < Field . Label className = { styles . Label } > Price range</ Field . Label >
60
+ < Slider . Value className = { styles . Value } />
61
+ < Slider . Control className = { styles . Control } >
62
+ < Slider . Track className = { styles . Track } >
63
+ < Slider . Indicator className = { styles . Indicator } />
64
+ < Slider . Thumb className = { styles . Thumb } />
65
+ < Slider . Thumb className = { styles . Thumb } />
66
+ </ Slider . Track >
67
+ </ Slider . Control >
68
+ </ Slider . Root >
69
+ < Field . Error className = { formStyles . Error } />
70
+ </ Field . Root >
71
+ < button disabled = { loading } type = "submit" className = { formStyles . Button } >
72
+ Search
73
+ </ button >
74
+ < hr style = { { marginBlock : 24 } } />
75
+ { results !== null && < p > { `${ results } matching flights` } </ p > }
76
+ </ Form >
77
+ </ div >
71
78
) ;
72
79
}
73
80
74
- async function submitForm ( formValues : FormValues ) {
81
+ async function submitForm ( formValues : FormValues ) : Promise < {
82
+ errors ?: Record < string , string > ;
83
+ response ?: {
84
+ results : number ;
85
+ } ;
86
+ } > {
75
87
await new Promise ( ( resolve ) => {
76
88
setTimeout ( resolve , 600 ) ;
77
89
} ) ;
0 commit comments