import { Link } from 'expo-router'; import { useMemo, useState } from 'react'; import { ActivityIndicator, KeyboardAvoidingView, Platform, StyleSheet, Text, View, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Button } from '@/components/common/Button'; import { Catamaran, FunnelSans } from '@/constants/fonts'; import { Input } from '@/components/common/Input'; import { Palette } from '@/constants/palette'; import { Radius, Spacing } from '@/constants/styles'; import { mapFirebaseAuthError } from '@/lib/firebase-auth-errors'; import { loginWithEmail, registerWithEmail } from '@/services/auth'; type AuthMode = 'login' | 'register'; type AuthFormProps = { mode: AuthMode; }; const copyByMode = { login: { title: 'Connexion', submitLabel: 'Se connecter', switchLabel: "Pas encore de compte ? S'inscrire", switchHref: '/register' as const, }, register: { title: 'Inscription', submitLabel: "S'inscrire", switchLabel: 'Déjà un compte ? Se connecter', switchHref: '/login' as const, }, } as const; export function AuthForm({ mode }: AuthFormProps) { const copy = copyByMode[mode]; const [username, setUsername] = useState(''); const [email, setEmail] = useState('leon.morival@gmail.com'); const [password, setPassword] = useState('Furioza98*'); const [error, setError] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const isFormValid = useMemo(() => { if (!email.trim() || !password.trim()) { return false; } if (mode === 'register' && !username.trim()) { return false; } return true; }, [username, email, mode, password]); const handleSubmit = async () => { if (!isFormValid || isSubmitting) { return; } setError(null); setIsSubmitting(true); try { if (mode === 'login') { await loginWithEmail(email, password); } else { await registerWithEmail({ email, password, username, }); } } catch (submitError) { setError(mapFirebaseAuthError(submitError)); } finally { setIsSubmitting(false); } }; return ( {copy.title} {mode === 'register' ? ( ) : null} {error ? {error} : null}