import { RecoverScreenLayout } from '@/assets/components/auth/RecoverScreenLayout'; import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; import { resetPassword } from '@/assets/services/passwordRecovery'; import styles from '@/styles/screens/auth/recover.styles'; import { Ionicons } from '@expo/vector-icons'; import { router, type Href, useLocalSearchParams } from 'expo-router'; import { useState } from 'react'; import { Image, Modal, Pressable, Text, TextInput, View } from 'react-native'; export default function RecoverResetScreen() { const { email, token } = useLocalSearchParams<{ email?: string; token?: string }>(); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const [showSuccessModal, setShowSuccessModal] = useState(false); const [successMessage, setSuccessMessage] = useState(''); const emailValue = typeof email === 'string' ? email : ''; const tokenValue = typeof token === 'string' ? token : ''; const handleSubmit = async () => { if (!emailValue || !tokenValue) { setError('Sessão inválida. Volta ao início do processo.'); return; } if (password.length < 5) { setError('A palavra-passe deve ter pelo menos 5 caracteres.'); return; } if (password !== confirmPassword) { setError('As palavras-passe não coincidem.'); return; } setError(null); setIsLoading(true); try { const data = await resetPassword(emailValue, tokenValue, password, confirmPassword); if (data.status === 200) { setSuccessMessage(data.message || 'Password atualizada com sucesso.'); setShowSuccessModal(true); return; } setError(data.message || 'Não foi possível atualizar a palavra-passe.'); } catch { setError('Falha ao contactar o servidor. Tenta novamente.'); } finally { setIsLoading(false); } }; if (!emailValue || !tokenValue) { return ( Dados em falta. router.replace('/recover' as Href)}> Voltar ); } return ( <> Nova palavra-passe* setShowPassword((p) => !p)} hitSlop={8}> Confirmar palavra-passe* setShowConfirmPassword((p) => !p)} hitSlop={8}> {!!error && {error}} {isLoading ? ( ) : ( <> Guardar palavra-passe )} router.replace({ pathname: '/recover/confirm', params: { email: emailValue }, } as Href) } disabled={isLoading}> Voltar Palavra-passe atualizada {successMessage} { setShowSuccessModal(false); router.replace('/login' as Href); }}> Ir para o Login ); }