import { useState } from 'react'; import { View, Text, TextInput, TouchableOpacity, StyleSheet, KeyboardAvoidingView, Platform, ScrollView } from 'react-native'; import { Link, useRouter } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { Colors } from '@/lib/colors'; const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; export default function ForgotPasswordScreen() { const router = useRouter(); const [email, setEmail] = useState(''); const [submitted, setSubmitted] = useState(false); const [error, setError] = useState(null); const handleSubmit = () => { setError(null); if (!email.trim()) { setError('Veuillez renseigner votre adresse email.'); return; } if (!EMAIL_REGEX.test(email)) { setError('Format d\'email invalide.'); return; } setSubmitted(true); }; if (submitted) { return ( Demande enregistrée Si l'adresse {email} est associée à un compte CESIZen, un email contenant les instructions de réinitialisation sera envoyé. Si vous ne recevez rien sous 24h, contactez votre administrateur. router.replace('/auth/login')}> Retour à la connexion ); } return ( Mot de passe oublié ? Entrez votre adresse email. Si elle est associée à un compte, vous recevrez les instructions pour réinitialiser votre mot de passe. Email { setEmail(v); setError(null); }} placeholder="votre@email.com" keyboardType="email-address" autoCapitalize="none" autoCorrect={false} /> {error && {error}} Envoyer les instructions Retour à la connexion ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: Colors.white }, scrollContent: { flexGrow: 1, justifyContent: 'center', padding: 24 }, header: { alignItems: 'center', marginBottom: 32 }, logo: { fontSize: 26, fontWeight: '800', color: Colors.black, textAlign: 'center' }, subtitle: { fontSize: 14, color: Colors.gray[500], marginTop: 10, textAlign: 'center', lineHeight: 20 }, form: { backgroundColor: Colors.gray[50], borderRadius: 24, padding: 24 }, inputGroup: { marginBottom: 16 }, label: { fontSize: 14, fontWeight: '600', color: Colors.gray[700], marginBottom: 6 }, input: { backgroundColor: Colors.white, borderWidth: 1, borderColor: Colors.gray[300], borderRadius: 12, paddingHorizontal: 16, paddingVertical: 14, fontSize: 16, color: Colors.black }, errorText: { color: '#DC2626', marginTop: 6, fontSize: 12 }, button: { backgroundColor: Colors.primary, borderRadius: 12, paddingVertical: 16, alignItems: 'center', marginTop: 8 }, buttonText: { fontSize: 16, fontWeight: '700', color: Colors.black }, footer: { alignItems: 'center', marginTop: 20 }, link: { color: Colors.secondary, fontSize: 14, fontWeight: '600' }, success: { padding: 24, alignItems: 'center', flex: 1, justifyContent: 'center' }, successIcon: { width: 72, height: 72, borderRadius: 999, backgroundColor: `${Colors.secondary}15`, justifyContent: 'center', alignItems: 'center', marginBottom: 20 }, successTitle: { fontSize: 22, fontWeight: '800', color: Colors.black, marginBottom: 12 }, successText: { fontSize: 14, color: Colors.gray[600], textAlign: 'center', lineHeight: 20, marginBottom: 12 }, bold: { fontWeight: '700', color: Colors.black }, });