@@ -12,27 +12,32 @@ interface Bread {
12
12
}
13
13
14
14
interface FormData {
15
- object : Apple | Bread ;
15
+ breadOrApple : Apple | Bread ;
16
16
}
17
17
18
18
export default function OneOfObjectArrayForm ( ) {
19
19
const form = useForm < FormData > ( {
20
- object : { type : "apple" , color : "#ff0000" } // or { type: "bread", size: 200 }
20
+ breadOrApple : { type : "apple" , color : "#ff0000" } // or { type: "bread", size: 200 }
21
21
} ) ;
22
22
return (
23
23
< form
24
24
style = { { margin : "0.5em" } }
25
25
onReset = { ( ) => form . resetAll ( ) }
26
26
onSubmit = { async ( ev ) => {
27
+ // Prevent the submit button from reloading the page
27
28
ev . preventDefault ( ) ;
29
+ // Disable inputs and fake submit...
28
30
form . setState ( { isSubmitting : true } ) ;
29
31
await new Promise ( ( res ) => setTimeout ( res , 500 ) ) ;
30
32
form . setState ( { isSubmitting : false } ) ;
31
33
console . log ( form . values ) ;
32
34
form . setDefaultValues ( form . values ) ;
33
35
} }
34
36
>
37
+ { /* Our custom form component */ }
35
38
< AppleOrBreadForm parent = { form } />
39
+
40
+ { /* Shows a live representation of the form values */ }
36
41
< AnyListener
37
42
form = { form }
38
43
render = { ( { values, dirty } ) => (
@@ -43,14 +48,16 @@ export default function OneOfObjectArrayForm() {
43
48
</ pre >
44
49
) }
45
50
/>
51
+
46
52
< button > Submit!</ button >
47
53
< button type = "reset" > Reset</ button >
48
54
</ form >
49
55
) ;
50
56
}
51
57
52
58
function AppleOrBreadForm ( props : { parent : FormState < FormData > } ) {
53
- const form = useChildForm ( props . parent , "object" ) ;
59
+ // Create a new form based on the 'breadOrApple' field
60
+ const form = useChildForm ( props . parent , "breadOrApple" ) ;
54
61
return (
55
62
< div style = { { background : "#0001" , padding : "1em" , margin : "1em" } } >
56
63
< label > Object type: </ label >
@@ -60,6 +67,7 @@ function AppleOrBreadForm(props: { parent: FormState<FormData> }) {
60
67
name = "type"
61
68
render = { ( { value } ) => (
62
69
< >
70
+ { /* A select input that sets new form values when a new object type (apple or bread) was chosen */ }
63
71
< select
64
72
value = { value }
65
73
onChange = { ( ev ) => {
0 commit comments