Check out our talk at Remix Conf!

Global error

In this example, we return a global error if the password is incorrect.

const schema = z.object({
  email: z.string().nonempty().email(),
  password: z.string().nonempty(),
})

const mutation = makeDomainFunction(schema)(async (values) => {
  if (values.password !== 'supersafe') {
    throw 'Wrong email or password'
  }

  return values
})

export const action: ActionFunction = async ({ request }) =>
  formAction({ request, schema, mutation })

export default () => (
  <Form schema={schema}>
    {({ Field, Errors, Button }) => (
      <>
        <Field name="email" autoFocus />
        <Field name="password" type="password" />
        <Errors />
        <Button />
      </>
    )}
  </Form>
)