import React, { useEffect } from "react"; import { SafeAreaView, View, Text, TouchableOpacity, StyleSheet, } from "react-native"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import Ionicons from "@expo/vector-icons/Ionicons"; import LoginSVG from "../assets/images/login.svg"; import GoogleSVG from "../assets/images/google.svg"; import FacebookSVG from "../assets/images/facebook.svg"; import TwitterSVG from "../assets/images/twitter.svg"; import CustomButton from "../components/Buttons/CustomButton"; import InputField from "../components/InputField"; import { globalStyles } from "../styles/global"; import Loader from "../components/Loader"; import { Formik } from "formik"; import { loginSchema } from "../schemas/loginSchema"; import { useDispatch, useSelector } from "react-redux"; import { selectLoginError } from "../store/selectors/loginSelectors"; import { clearLoginErrors, fetchUser, } from "../store/actions/login/loginActions"; import { selectIsLoadingByActionType } from "../store/selectors/loadingSelectors"; import { LOGIN_USER_SCOPE } from "../store/actions/login/loginActionConstants"; import { fetchAuthProvider } from "../store/actions/authProvider/authProviderActions"; import useAuthHook from "../hooks/useAuthHook"; import { storeData } from "../service/asyncStorage"; import { ACCESS_TOKEN } from "../constants/localStorage"; const LoginScreen = ({ navigation }) => { const { response, promptAsync } = useAuthHook(); const dispatch = useDispatch(); const error = useSelector(selectLoginError); const isLoading = useSelector(selectIsLoadingByActionType(LOGIN_USER_SCOPE)); const storeToken = async (token) => { await storeData(ACCESS_TOKEN, token); } useEffect(() => { if (response?.type === "success") { const accessToken = response.authentication.accessToken; if (accessToken) { storeToken(accessToken); dispatch(fetchAuthProvider({ accessToken })); } } }, [response]); const handleGoogleAuth = () => { promptAsync({ useProxy: true, showInRecents: true }); }; const handleLogin = (values) => { const { email, password } = values; dispatch(clearLoginErrors()); dispatch( fetchUser({ identifier: email, password, }) ); }; return ( {({ handleChange, handleBlur, handleSubmit, values, isValid, errors, }) => ( <> Sign In } /> {errors.email && ( {errors.email} )} {}} inputType="password" handleBlur={handleBlur("password")} text={values.password} onChangeText={handleChange("password")} icon={ } /> {errors.password && ( {errors.password} )} {error && {error}} )} Or login with ... {}} style={globalStyles.iconButton}> {}} style={globalStyles.iconButton}> Need account? navigation.navigate("Register")}> Sign Up ); }; const styles = StyleSheet.create({ providerText: { textAlign: "center", color: "#666", marginBottom: 30, fontFamily: "poppins-regular", }, providersContainer: { flexDirection: "row", justifyContent: "space-between", marginBottom: 30, }, registerContainer: { flexDirection: "row", justifyContent: "center", marginBottom: 30, }, registerButtonText: { color: "#AD40AF", fontWeight: "700", fontFamily: "poppins-semibold", }, errorMessage: { marginBottom: 30, color: "red", }, }); export default LoginScreen;