"use client" import * as React from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import * as z from "zod" import { Loader2 } from "lucide-react" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { RichTextEditor } from "@/components/ui/rich-text-editor" import { Checkbox } from "@/components/ui/checkbox" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { useSessionStore } from "@/entities/session/store" const registerSchema = z.object({ phone: z.string().min(10, "Номер телефона должен содержать минимум 10 цифр"), firstName: z.string() .min(2, "Имя должно содержать минимум 2 символа") .regex(/^[^0-9]*$/, "Имя не должно содержать цифры"), lastName: z.string() .min(2, "Фамилия должна содержать минимум 2 символа") .regex(/^[^0-9]*$/, "Фамилия не должна содержать цифры"), isCompany: z.boolean(), companyName: z.string().optional(), inn: z.string().optional(), description: z.string() .max(2048, "Описание не может превышать 2048 символов") .optional(), password: z.string().min(6, "Пароль должен быть не менее 6 символов"), confirmPassword: z.string().min(6), }).refine((data) => data.password === data.confirmPassword, { message: "Пароли не совпадают", path: ["confirmPassword"], }).refine((data) => !data.isCompany || (data.companyName && data.companyName.length >= 2), { message: "Название компании обязательно", path: ["companyName"], }).refine((data) => !data.isCompany || (data.inn && data.inn.length === 10), { message: "ИНН должен содержать 10 цифр", path: ["inn"], }) type RegisterValues = z.infer export function RegisterForm() { const router = useRouter() const { register, isLoading } = useSessionStore() const form = useForm({ resolver: zodResolver(registerSchema), defaultValues: { phone: "", firstName: "", lastName: "", isCompany: false, companyName: "", inn: "", description: "", password: "", confirmPassword: "", }, }) const isCompany = form.watch("isCompany") async function onSubmit(values: RegisterValues) { try { const submitData: any = { phone: values.phone, firstName: values.firstName, lastName: values.lastName, password: values.password, confirmPassword: values.confirmPassword, role: values.isCompany ? "Company" : "User" }; // Добавляем данные компании только если регистрируемся как компания if (values.isCompany) { if (values.companyName) { submitData.companyName = values.companyName; } if (values.inn) { submitData.inn = values.inn; } } // Добавляем описание if (values.description) { submitData.description = values.description; } await register(submitData) router.push("/auth/login") } catch (error) { console.error(error) form.setError("root", { message: "Ошибка при регистрации. Возможно, номер уже занят." }) } } return ( Регистрация Создайте аккаунт, чтобы начать пользоваться сервисом.
( Имя )} /> ( Фамилия )} />
( Телефон )} /> ( Я представитель компании )} /> {isCompany && ( <> ( Название компании )} /> ( ИНН )} /> )} ( Описание (необязательно) )} /> ( Пароль )} /> ( Подтвердите пароль )} /> {form.formState.errors.root && (

{form.formState.errors.root.message}

)}
) }