import React, { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { MainLayout } from '@/components/layout/MainLayout'; import PageHeader from '@/components/layout/PageHeader'; import Button from '@/components/ui/Button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'; import Input from '@/components/ui/Input'; import { FormField } from '@/components/ui/FormField'; import { RadioGroup } from '@/components/ui/RadioGroup'; import { Alert } from '@/components/ui/Alert'; import { Stack } from '@/components/ui/layout'; import { useAuth } from '@/contexts/AuthContext'; import { useTranslation } from '@/hooks/useI18n'; import { useNavigation } from '@/hooks/useNavigation'; import type { UserRole } from '@/contexts/AuthContext'; const SignupPage = () => { const { t } = useTranslation(); const { signup, isLoading } = useAuth(); const { handleFooterNavigate } = useNavigation(); const navigate = useNavigate(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [name, setName] = useState(''); const [role, setRole] = useState('user'); const [error, setError] = useState(''); const roleOptions = [ { value: 'user', label: t('signupPage.roleUser'), description: t('signupPage.roleUserDesc'), }, { value: 'admin', label: t('signupPage.roleAdmin'), description: t('signupPage.roleAdminDesc'), }, ]; const validateForm = (): string | null => { if (!email || !email.includes('@')) { return t('signupPage.errorInvalidEmail'); } if (!name || name.length < 2) { return t('signupPage.errorInvalidName'); } if (!password || password.length < 8) { return t('signupPage.errorPasswordLength'); } if (password !== confirmPassword) { return t('signupPage.errorPasswordMismatch'); } return null; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); const validationError = validateForm(); if (validationError) { setError(validationError); return; } try { await signup(email, password, name, role); // Navigate based on role if (role === 'admin') { navigate('/admin'); } else { navigate('/dashboard'); } } catch (err) { setError(err instanceof Error ? err.message : t('signupPage.errorSignupFailed')); } }; return (
{t('signupPage.subtitle')}
{error && ( )} setName(e.target.value)} required placeholder={t('signupPage.namePlaceholder')} disabled={isLoading} /> setEmail(e.target.value)} required placeholder={t('signupPage.emailPlaceholder')} disabled={isLoading} /> setPassword(e.target.value)} required placeholder={t('signupPage.passwordPlaceholder')} disabled={isLoading} /> setConfirmPassword(e.target.value)} required placeholder={t('signupPage.confirmPasswordPlaceholder')} disabled={isLoading} /> setRole(value as UserRole)} />
{t('signupPage.alreadyHaveAccount')}{' '} {t('signupPage.loginLink')}
); }; export default SignupPage;