import { useLocalSearchParams, useRouter } from "expo-router"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { ActivityIndicator, KeyboardAvoidingView, Platform, Pressable, Text, TextInput, View, } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { authClient } from "@/src/lib/auth-client"; export default function ResetPasswordScreen() { const router = useRouter(); const insets = useSafeAreaInsets(); const { t } = useTranslation(); const { token } = useLocalSearchParams<{ token: string }>(); const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [isPending, setIsPending] = useState(false); const [done, setDone] = useState(false); const [error, setError] = useState(null); const mismatch = confirm.length > 0 && password !== confirm; const canSave = password.length >= 8 && password === confirm; async function handleSave() { if (!canSave || !token) return; setIsPending(true); setError(null); const result = await authClient.resetPassword({ newPassword: password, token }); setIsPending(false); if (result.error) { setError(result.error.message ?? t('common.error')); } else { setDone(true); setTimeout(() => router.replace("/(auth)/login"), 2000); } } return ( {t('resetPassword.title')} {t('resetPassword.subtitle')} {done ? ( {t('resetPassword.successMessage')} ) : ( <> {t('resetPassword.newPassword')} {t('resetPassword.confirmPassword')} {mismatch && {t('resetPassword.mismatch')}} {!mismatch && } {error && {error}} {isPending ? ( ) : ( {t('resetPassword.saveButton')} )} )} ); }