import { zodResolver } from '@hookform/resolvers/zod' import { useMutation } from '@tanstack/react-query' import { Loader2 } from 'lucide-react' import { useForm } from 'react-hook-form' import { Link, useNavigate } from 'react-router-dom' import { z } from 'zod' import { Button } from '@/components/ui/button' import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { useToast } from '@/components/ui/use-toast' import { register } from '@/features/auth/api' import { HttpError } from '@/lib/api-client' import { authSelectors, useAuthStore } from '@/stores/auth-store' const registerSchema = z.object({ name: z.string().min(2, 'Введите имя владельца'), email: z.string().email('Введите корректный email'), password: z .string() .min(8, 'Минимальная длина пароля — 8 символов') .regex(/[A-Za-z]/, 'Добавьте буквы') .regex(/\d/, 'Добавьте цифры'), organization_name: z .string() .transform((value) => value.trim()) .refine((value) => value.length <= 120, 'Название слишком длинное'), }) type RegisterValues = z.infer const RegisterPage = () => { const form = useForm({ resolver: zodResolver(registerSchema), defaultValues: { name: '', email: '', password: '', organization_name: '' }, }) const setSession = useAuthStore((state) => state.setSession) const navigate = useNavigate() const { toast } = useToast() const { mutateAsync, isPending } = useMutation({ mutationFn: register, }) const handleSubmit = async (values: RegisterValues) => { form.clearErrors('root') try { const payload = { ...values, organization_name: values.organization_name?.trim() ? values.organization_name.trim() : null, } const tokenResponse = await mutateAsync(payload) const tokens = authSelectors.mapTokens(tokenResponse) setSession({ tokens, organizations: [], activeOrganizationId: null }) toast({ title: 'Организация создана', description: 'Вы владелец первой организации. Добавьте коллег на вкладке «Организации».', }) navigate('/dashboard') } catch (error) { const message = error instanceof HttpError ? error.message : 'Не удалось завершить регистрацию' form.setError('root', { message }) } } const rootError = form.formState.errors.root?.message return (

Создайте организацию

Владелец получит полный доступ и сможет пригласить команду.

( Имя и фамилия )} /> ( Корпоративный email )} /> ( Пароль Используйте минимум 8 символов, буквы и цифры. )} /> ( Организация Укажите, чтобы сразу создать компанию и стать владельцем. Можно пропустить и присоединиться позже. )} /> {rootError ?

{rootError}

: null}

Уже есть аккаунт?{' '} Войти

) } export default RegisterPage