useZodForm.ts 678 B

1234567891011121314151617181920
  1. import { useForm } from 'react-hook-form';
  2. import type { FieldValues, Resolver, UseFormProps, UseFormReturn } from 'react-hook-form';
  3. import { zodResolver } from '@hookform/resolvers/zod';
  4. import type { z } from 'zod';
  5. export function useZodForm<TFieldValues extends FieldValues>(
  6. schema: z.ZodType<TFieldValues>,
  7. options?: Omit<UseFormProps<TFieldValues>, 'resolver'>,
  8. ): UseFormReturn<TFieldValues> {
  9. const resolver = zodResolver(
  10. schema as z.ZodType<TFieldValues, TFieldValues>,
  11. ) as Resolver<TFieldValues>;
  12. return useForm<TFieldValues>({
  13. mode: 'onSubmit',
  14. reValidateMode: 'onChange',
  15. shouldUnregister: false,
  16. ...options,
  17. resolver,
  18. });
  19. }