import { RecoverScreenLayout } from '@/assets/components/auth/RecoverScreenLayout'; import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; import { confirmRecoveryToken } from '@/assets/services/passwordRecovery'; import styles from '@/styles/screens/auth/recover.styles'; import { router, type Href, useLocalSearchParams } from 'expo-router'; import { useState } from 'react'; import { Image, Pressable, Text, TextInput } from 'react-native'; export default function RecoverConfirmScreen() { const { email, message } = useLocalSearchParams<{ email?: string; message?: string }>(); const [token, setToken] = useState(''); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const emailValue = typeof email === 'string' ? email : ''; const handleTokenChange = (text: string) => { setToken(text.replace(/\D/g, '').slice(0, 6)); }; const handleSubmit = async () => { if (!emailValue) { setError('Sessão inválida. Volta ao início do processo.'); return; } if (token.length !== 6) { setError('Introduz o código de 6 dígitos recebido por email.'); return; } setError(null); setIsLoading(true); try { const data = await confirmRecoveryToken(emailValue, token); if (data.status === 200) { router.push({ pathname: '/recover/reset', params: { email: emailValue, token }, } as Href); return; } setError(data.message || 'Código inválido ou expirado.'); } catch { setError('Falha ao contactar o servidor. Tenta novamente.'); } finally { setIsLoading(false); } }; if (!emailValue) { return ( Email em falta. router.replace('/recover' as Href)}> Voltar ); } return ( Código* {!!error && {error}} {isLoading ? ( ) : ( <> Validar código )} router.replace('/recover' as Href)} disabled={isLoading}> Voltar ); }