import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import Navbar from '../components/Navbar'; import EmailVerificationModal from '../modals/EmailVerificationModal'; import { verifyEmail } from '../services/user.service'; import GitHubLoginButton from '../components/GitHubLoginButton'; export default function Register() { const [formData, setFormData] = useState({ email: '', username: '', password: '', confirmPassword: '', profile: null }); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const [previewImage, setPreviewImage] = useState(null); const [alerts, setAlerts] = useState([]); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const [isEmailVerificationModalOpen, setEmailVerificationModalOpen] = useState(false); const navigate = useNavigate(); const { register } = useAuth(); const handleChange = (e) => { if (e.target.name === 'profile') { const file = e.target.files[0]; setFormData({ ...formData, profile: file }); // Create preview if (file) { const reader = new FileReader(); reader.onload = (e) => setPreviewImage(e.target.result); reader.readAsDataURL(file); } else { setPreviewImage(null); } } else { setFormData({ ...formData, [e.target.name]: e.target.value }); } }; const handleSubmit = async (e) => { e.preventDefault(); // Validation if (formData.password !== formData.confirmPassword) { addAlert("error", "Les mots de passe ne correspondent pas"); return; } if (formData.password.length < 6) { addAlert("error", "Le mot de passe doit contenir au moins 6 caractères"); return; } setLoading(true); try { await register(formData.email, formData.username, formData.password, formData.profile); setEmailVerificationModalOpen(true); } catch (err) { addAlert('error', 'Erreur lors de la création du compte'); } finally { setLoading(false); } }; const onVerificationSubmit = async (token) => { const response = await verifyEmail(formData.email, token, addAlert); if (response) { // Email verified successfully setEmailVerificationModalOpen(false); navigate('/login'); } } const addAlert = (type, message) => { const newAlert = { type, message, id: Date.now() }; // Add unique ID setAlerts([...alerts, newAlert]); }; const onCloseAlert = (alertToRemove) => { setAlerts(alerts.filter(alert => alert !== alertToRemove)); }; return (
); }