'use client'; import s from './styles.module.scss'; import { Button, Input, PhoneInput } from '@shared/ui'; import { Controller, useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import toast from 'react-hot-toast'; import { sendFormFn } from '@shared/api/api.service'; import { isValidPhoneNumber } from 'libphonenumber-js/min'; import Link from 'next/link'; const FormSchema = z.object({ name: z .string() .min(3, { message: 'Поле должно содержать не менее 3-х букв' }) .regex(/^[A-Za-zА-Яа-яЁё]+(?:[ '-][A-Za-zА-Яа-яЁё]+)*$/, { message: 'Поле содержит некорректные символы', }), phone: z.string().refine(isValidPhoneNumber, 'Некорректный номер телефона'), }); type TForm = z.infer; const defaultValues = { name: '', phone: '', }; export default function OfferForm() { const { handleSubmit, control, reset, clearErrors, formState: { errors }, } = useForm({ resolver: zodResolver(FormSchema), defaultValues, }); const onSubmit = async (data: TForm) => { const payload = { ...data, form: 'offer-form', }; try { await sendFormFn(payload); toast.success('Заявка на консультацию принята'); reset(defaultValues); } catch (e) { toast.error('Ошибка при отправке заявки...', { duration: 3000, }); } }; return (
( { clearErrors('name'); field.onChange(e); }} /> )} /> ( { clearErrors('phone'); field.onChange(e); }} /> )} /> ); }