Files
automatisch/packages/web/src/components/Form/index.jsx
2024-02-29 09:38:32 +00:00

38 lines
913 B
JavaScript

import * as React from 'react';
import { FormProvider, useForm, useWatch } from 'react-hook-form';
const noop = () => null;
export default function Form(props) {
const {
children,
onSubmit = noop,
defaultValues,
resolver,
render,
mode = 'all',
...formProps
} = props;
const methods = useForm({
defaultValues,
reValidateMode: 'onBlur',
resolver,
mode,
});
const form = useWatch({ control: methods.control });
/**
* For fields having `dependsOn` fields, we need to re-validate the form.
*/
React.useEffect(() => {
methods.trigger();
}, [methods.trigger, form]);
React.useEffect(() => {
methods.reset(defaultValues);
}, [defaultValues]);
return (
<FormProvider {...methods}>
<form onSubmit={methods.handleSubmit(onSubmit)} {...formProps}>
{render ? render(methods) : children}
</form>
</FormProvider>
);
}