Show Submit Errors
On Specific Fields
To show errors on specific fields when submit fails, throw/reject with a ZodError from your onSubmit handler.
Any issues on the ZodError will be distributed to your field components by issue path (just like errors thrown
by your form schema when parsing).
import { createZodForm } from '@jcoreio/zod-forms'
import z from 'zod'
const form = createZodForm({
schema: z.object({
email: z.string(),
}),
})
function SignUpForm() {
const { onSubmit } = form.useSubmit({
onSubmit: async (values) => {
try {
await createUser(values)
} catch (error) {
if (error.code === 'ALREADY_EXISTS') {
throw new z.ZodError([
{
code: z.ZodIssueCode.custom,
path: ['email'],
message: 'Email address already in use',
},
])
}
}
},
})
return (
<form onSubmit={onSubmit}>
<FormTextField
label="Email Address"
type="email"
field={form.get('email')}
/>
<button type="submit">Sign Up</button>
</form>
)
}
Getting the Overall Error
useFormStatus returns a submitError property that has the Error when submit failed:
import { useFormStatus } from '@jcoreio/zod-forms'
function SubmitStatusBanner() {
const { submitting, submitFailed, submitSucceeded, submitError } =
useFormStatus()
if (submitting) return <LoadingAlert>Submitting...</LoadingAlert>
if (submitFailed) {
return (
<ErrorAlert>
Submit failed:{' '}
{submitError instanceof Error ?
submitError.message
: String(submitError)}
</ErrorAlert>
)
}
if (submitSucceeded) {
return <SuccessAlert>Submit Succeeded!</SuccessAlert>
}
return null
}