import React, { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { GraduationCap } from 'lucide-react'; import toast from 'react-hot-toast'; import { authApi } from '../api/client'; import { OAuthButtons } from '../components/OAuthButtons'; import { useAuthStore } from '../store/auth'; import type { TokenResponse } from '../types'; export function Register() { const navigate = useNavigate(); const { setAuth } = useAuthStore(); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const register = useMutation({ mutationFn: () => authApi.register({ name, email, password }), onSuccess: (response) => { const data: TokenResponse = response.data; setAuth(data.user, data.access_token); toast.success('Аккаунт создан! Проверьте email для подтверждения.'); navigate('/cabinet'); }, onError: (error: any) => { const msg = error.response?.data?.detail || 'Ошибка регистрации'; toast.error(msg); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); register.mutate(); }; return (

Регистрация

Создайте аккаунт, это бесплатно

setName(e.target.value)} required minLength={2} placeholder="Иван Иванов" className="w-full border border-gray-200 rounded-xl px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500" />
setEmail(e.target.value)} required placeholder="ivan@example.com" className="w-full border border-gray-200 rounded-xl px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500" />
setPassword(e.target.value)} required minLength={8} placeholder="Минимум 8 символов" className="w-full border border-gray-200 rounded-xl px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-500" />

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

); }