Skip to main content

HeadlessUI Elements

You can also add HeadlessUI form components to Formatomus, meaning the HeadlessUI components will also automatically register themselves to the useForm context.

For this to work you must install the following:

danger

From my testing this is currently not working

yarn add @formatomus/headlessui @headlessui/react

Here are all the available HeadlessUI form components that work:

Use within Formatomus

For the HeadlessUI components to work with Formatomus you must wrap the component with the <FormElement /> component like the regular native elements. It's that simple!

import { FormElement } from "@formatomus/core";
import { Switch } from "@formatomus/headlessui";

<FormElement name="switch">
<Switch />
</FormElement>;

Error Handling

Error handling with HeadlessUI components are still as simple as with the native elements in Formatomus

import { FormElement } from "@formatomus/core";
import { Switch } from "@formatomus/headlessui";

<FormElement name="switch">
<Switch />
<FormElement.Error>{({ message }) => <p>{message}</p>}</FormElement.Error>
</FormElement>;

and we recommend powering it with yup.

Full example

Here's a full example using the HeadlessUI Switch component.

import { Form, FormElement } from "@formatomus/core";
import { Switch } from "@formatomus/headlessui";
import { useForm } from "react-hook-form";

type FormData = { switch: boolean };

const Component = () => {
const methods = useForm<FormData>();

return (
<Form methods={methods}>
<FormElement name="switch">
<FormElement.Label>Switch</FormElement.Label>

<Switch />

<FormElement.Error>{({ message }) => <p>{message}</p>}</FormElement.Error>
</FormElement>
</Form>
);
};