Skip to content

Commit de00fa6

Browse files
committed
FieldError component prop
1 parent bddd1f1 commit de00fa6

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

src/elements/FormError.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ export function FieldError<
1515
name: K;
1616
component?: C;
1717
transformer?: (error: Error) => React.ReactNode;
18-
} & Omit<ElementProps<C>, "transformer" | "component" | "name" | "form">
18+
} & Omit<ElementProps<C>, "transformer" | "component" | "name" | "form" | "children">
1919
) {
20-
const { form, component = React.Fragment, transformer } = props;
20+
const { form, component = React.Fragment, transformer, ...rest } = props;
2121
const { error } = useListener(form, props.name);
2222
if (!error || typeof error === "object") return null;
23-
return React.createElement(component, { children: String(transformer ? transformer(error as Error) : error) });
23+
return React.createElement(component, { ...rest, children: String(transformer ? transformer(error as Error) : error) });
2424
}

testing/src/Fieldform.tsx

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,42 @@ function Input(props: { value?: string; onChange?: (value: string) => void; styl
55
return <input value={props.value} onChange={(ev) => props.onChange?.(ev.target.value)} style={props.style} />;
66
}
77

8+
function validate(_: any) {
9+
return {
10+
email: "yikes"
11+
};
12+
}
13+
14+
function Error(props: { children: React.ReactNode }) {
15+
return (
16+
<p>
17+
not epic:
18+
<strong>{props.children}</strong>
19+
</p>
20+
);
21+
}
22+
823
export function FieldForm() {
9-
const form = useForm({ email: "", firstName: "", gender: "male" as "male" | "female" });
24+
const form = useForm({ email: "", firstName: "", gender: "male" as "male" | "female" }, validate);
25+
26+
function submit() {
27+
console.log("this is epic");
28+
}
1029

1130
return (
12-
<form>
31+
<form onSubmit={form.handleSubmit(submit)}>
1332
<Field form={form} name="email" component="textarea" />
1433
<Field form={form} name="email" component="input" />
15-
<Field form={form} name="email" component={Input} style={{ margin: "1em" }} />
16-
<FieldError form={form} name="email" />
34+
<Field form={form} name="email" component={Input} style={{ margin: "2em" }} />
35+
<FieldError form={form} name="email" component={Error} />
1736
<Field form={form} name="gender" component="select">
1837
<option value="male">male</option>
1938
<option value="female">female</option>
2039
</Field>
2140
<pre>
2241
<AnyListener form={form} render={() => JSON.stringify(form.values, null, 2)} />
2342
</pre>
43+
<button type="submit">Submit</button>
2444
</form>
2545
);
2646
}

0 commit comments

Comments
 (0)