import { useState, useEffect } from 'react'; import { useAuth } from '../context/AuthContext'; import { Link } from 'react-router-dom'; import { User, Mail, Lock, ArrowRight, Loader, CheckCircle, Eye, EyeOff, XCircle, Check, Wallet } from 'lucide-react'; const Register = () => { const [formData, setFormData] = useState({ username: '', email: '', password: '', confirmPassword: '' }); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const [isPasswordFocused, setIsPasswordFocused] = useState(false); const { register } = useAuth(); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(''); const [passwordCriteria, setPasswordCriteria] = useState({ length: false, upper: false, lower: false, number: false, special: false }); const [passwordsMatch, setPasswordsMatch] = useState(true); const [allValid, setAllValid] = useState(false); useEffect(() => { const { password, confirmPassword } = formData; const criteria = { length: password.length >= 8, upper: /[A-Z]/.test(password), lower: /[a-z]/.test(password), number: /[0-9]/.test(password), special: /[^A-Za-z0-9]/.test(password), }; setPasswordCriteria(criteria); setPasswordsMatch(password === confirmPassword || confirmPassword === ''); setAllValid(Object.values(criteria).every(Boolean) && password === confirmPassword && password !== ''); }, [formData.password, formData.confirmPassword]); const handleSubmit = async (e) => { e.preventDefault(); if (isSubmitting) return; if (!allValid) { setError('Please ensure all requirements are met and passwords match.'); return; } setIsSubmitting(true); setError(''); try { await register(formData.username, formData.email, formData.password); } catch (err) { setError(err.response?.data?.username?.[0] || 'Registration failed. Please try again.'); setIsSubmitting(false); } }; const RequirementItem = ({ met, text }) => (
{met ? :
} {text}
); return (
{/* Decorative orb */}
{/* Header */}

Create Account

Join FinMK and take control of your wealth

{/* Error */} {error && (
{error}
)}
setFormData({ ...formData, username: e.target.value })} required />
setFormData({ ...formData, email: e.target.value })} required />
setFormData({ ...formData, password: e.target.value })} onFocus={() => setIsPasswordFocused(true)} onBlur={() => setIsPasswordFocused(false)} required style={{ paddingRight: '2.8rem' }} />
setFormData({ ...formData, confirmPassword: e.target.value })} required style={{ paddingRight: '2.8rem', borderColor: (!passwordsMatch && formData.confirmPassword) ? 'rgba(244,63,94,0.5)' : 'var(--glass-border)' }} />
{/* Password strength */} {(isPasswordFocused || formData.password.length > 0) && (

Requirements

)}

Already have an account?{' '} Sign in →

); }; export default Register;