import { router } from "expo-router"; import { useState } from "react"; import { KeyboardAvoidingView, Platform, Pressable, ScrollView, StyleSheet, Text, View, } from "react-native"; import { FullScreen } from "@/components/Screen"; import { AuthBackground } from "@/components/AppBackground"; import { AuthServerPicker } from "@/components/AuthServerPicker"; import { HeadingText, Logo } from "@/components/Logo"; import { Button } from "@/components/ui/Button"; import { Card } from "@/components/ui/Card"; import { Input } from "@/components/ui/Input"; import { fonts, spacing } from "@/constants/theme"; import { useAppTheme } from "@/contexts/ThemeContext"; import { requestPasswordReset } from "@/lib/auth-api"; import { isValidEmail, useFieldVisibility } from "@/lib/form-validation"; export default function ForgotPasswordScreen() { const { colors } = useAppTheme(); const [email, setEmail] = useState(""); const [message, setMessage] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const [serverReady, setServerReady] = useState(true); const { touch, visible, markSubmitted } = useFieldVisibility(); const emailValidationError = !email.trim() ? "Email is required" : isValidEmail(email) ? undefined : "Enter a valid email"; const canSubmit = isValidEmail(email) && serverReady; async function handleSubmit() { markSubmitted(); if (!canSubmit) return; setError(null); setMessage(null); setLoading(true); try { const result = await requestPasswordReset(email.trim()); setMessage(result); } catch (err) { setError(err instanceof Error ? err.message : "Request failed"); } finally { setLoading(false); } } return ( router.back()}> ← Back Reset password Enter your email and we'll send reset instructions if an account exists. touch("email")} placeholder="you@example.com" required error={visible("email") ? emailValidationError : undefined} /> {error ? ( {error} ) : null} {message ? ( {message} ) : null}