Skip to content

Commit 6ccdf3a

Browse files
committed
More examples
1 parent 432023b commit 6ccdf3a

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

example/src/OneOfObjectArrayForm.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ export default function OneOfObjectArrayForm() {
2929
style={{ margin: "0.5em" }}
3030
onReset={() => form.resetAll()}
3131
onSubmit={async (ev) => {
32+
// Prevent the submit button from reloading the page
3233
ev.preventDefault();
34+
// Disable inputs and fake submit...
3335
form.setState({ isSubmitting: true });
3436
await new Promise((res) => setTimeout(res, 500));
3537
form.setState({ isSubmitting: false });
@@ -44,8 +46,9 @@ export default function OneOfObjectArrayForm() {
4446
<>
4547
<ul>
4648
{values.map((_, i) => (
49+
// Use index as key
4750
<li key={i}>
48-
{/* Make sure to use the form from ArrayForm! */}
51+
{/* Make sure to use the form given by ArrayForm! */}
4952
<BreadOrAppleForm parent={form} index={i} remove={() => remove(i)} />
5053
</li>
5154
))}

example/src/OneOfObjectForm.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,32 @@ interface Bread {
1212
}
1313

1414
interface FormData {
15-
object: Apple | Bread;
15+
breadOrApple: Apple | Bread;
1616
}
1717

1818
export default function OneOfObjectArrayForm() {
1919
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 }
2121
});
2222
return (
2323
<form
2424
style={{ margin: "0.5em" }}
2525
onReset={() => form.resetAll()}
2626
onSubmit={async (ev) => {
27+
// Prevent the submit button from reloading the page
2728
ev.preventDefault();
29+
// Disable inputs and fake submit...
2830
form.setState({ isSubmitting: true });
2931
await new Promise((res) => setTimeout(res, 500));
3032
form.setState({ isSubmitting: false });
3133
console.log(form.values);
3234
form.setDefaultValues(form.values);
3335
}}
3436
>
37+
{/* Our custom form component */}
3538
<AppleOrBreadForm parent={form} />
39+
40+
{/* Shows a live representation of the form values */}
3641
<AnyListener
3742
form={form}
3843
render={({ values, dirty }) => (
@@ -43,14 +48,16 @@ export default function OneOfObjectArrayForm() {
4348
</pre>
4449
)}
4550
/>
51+
4652
<button>Submit!</button>
4753
<button type="reset">Reset</button>
4854
</form>
4955
);
5056
}
5157

5258
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");
5461
return (
5562
<div style={{ background: "#0001", padding: "1em", margin: "1em" }}>
5663
<label>Object type: </label>
@@ -60,6 +67,7 @@ function AppleOrBreadForm(props: { parent: FormState<FormData> }) {
6067
name="type"
6168
render={({ value }) => (
6269
<>
70+
{/* A select input that sets new form values when a new object type (apple or bread) was chosen */}
6371
<select
6472
value={value}
6573
onChange={(ev) => {

0 commit comments

Comments
 (0)