import {RouteProp} from '@react-navigation/native'; import {StackNavigationProp} from '@react-navigation/stack'; import React, {useState} from 'react'; import { Alert, KeyboardAvoidingView, Platform, StatusBar, StyleSheet, Text, TouchableOpacity, View, } from 'react-native'; import {trackPromise} from 'react-promise-tracker'; import { ArrowButton, Background, LoadingIndicator, TaggInput, } from '../../components'; import {emailRegex, usernameRegex} from '../../constants'; import {OnboardingStackParams} from '../../routes'; import {handlePasswordResetRequest} from '../../services'; import {BackgroundGradientType} from '../../types'; type PasswordResetRequestRouteProp = RouteProp< OnboardingStackParams, 'PasswordResetRequest' >; type PasswordResetRequestNavigationProp = StackNavigationProp< OnboardingStackParams, 'PasswordResetRequest' >; interface PasswordResetRequestProps { route: PasswordResetRequestRouteProp; navigation: PasswordResetRequestNavigationProp; } /** * Password reset request page for getting username / email * @param navigation react-navigation navigation object */ const PasswordResetRequest: React.FC = ({ navigation, }) => { const [form, setForm] = useState({ value: '', isValid: false, attemptedSubmit: false, }); const handleValueUpdate = (value: string) => { value = value.trim(); //Entered field should either be a valid username or a valid email let isValid: boolean = emailRegex.test(value) || usernameRegex.test(value); setForm({ ...form, value, isValid, }); }; const goToPasswordCodeVerification = async () => { if (!form.attemptedSubmit) { setForm({ ...form, attemptedSubmit: true, }); } try { if (form.isValid) { const success = await trackPromise( handlePasswordResetRequest(form.value), ); if (success) { navigation.navigate('PasswordVerification', { id: form.value, }); } } else { setForm({...form, attemptedSubmit: false}); setTimeout(() => setForm({...form, attemptedSubmit: true})); } } catch (error) { Alert.alert( 'Looks like our servers are down. 😓', "Try again in a couple minutes. We're sorry for the inconvenience.", ); return { name: 'Send OTP error', description: error, }; } }; const Footer = () => ( navigation.navigate('Login')} /> ); return ( Enter your registered username