import {useEffect, useState} from 'react'; import { Image, Keyboard, KeyboardAvoidingView, Platform, Pressable, SafeAreaView, Text, TextInput, TouchableWithoutFeedback, View, } from 'react-native'; import tw from 'twrnc'; import {EyeIcon} from 'react-native-heroicons/outline'; import {EyeSlashIcon} from 'react-native-heroicons/outline'; import auth from '@react-native-firebase/auth'; const SignIn = ({navigation}) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [isValidEmail, setIsValidEmail] = useState(false); const [isValidPassword, setIsValidPassword] = useState(false); const [isPasswordVisible, setIsPasswordVisible] = useState(true); useEffect(() => { debounce(emailValidation()); }, [email]); useEffect(() => { debounce(passwordValidation()); }, [password]); const emailValidation = () => { const emailRegex = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; if (!email || emailRegex.test(email) === false) { setIsValidEmail(false); return false; } setIsValidEmail(true); return true; }; const passwordValidation = () => { const passwordRegex = /^(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,}$/i; if (!password || passwordRegex.test(password) === false) { setIsValidPassword(false) return false } setIsValidPassword(true) return true } // Utility FN · Mover a carpeta utils/utils.js const debounce = fn => { let id = null; return (...args) => { if (id) { clearTimeout(id); } id = setTimeout(() => { fn(...args); id = null; }, 300); }; }; const loginUser = () => { if (isValidEmail && isValidPassword) { auth() .signInWithEmailAndPassword(email, password) .then(() => { console.log('User signed in successfully!'); // Navigate to the home screen or other desired screen }) .catch(error => { console.error(error); // Display an error message to the user }); } }; return ( { Keyboard.dismiss(); }} > ingresar { setEmail(textInput); }} autoCapitalize={'none'} keyboardType={'email-address'} /> email incorrecto. { setIsPasswordVisible(!isPasswordVisible) }} style={tw`absolute top-3 right-3 z-10`}> {!isPasswordVisible? ( ) : ( )} { setPassword(passwordInput) }} secureTextEntry={!isPasswordVisible} /> debe contener a-b-0-! ingresar navigation.navigate('PasswordRecovery')} style={tw`mb-16`} > ¿olvidaste tu contraseña? ¿no tienes una cuenta? navigation.navigate('SignUp')}> registrate ); }; export default SignIn;