import React, { useEffect } from "react"; import { SafeAreaView, ScrollView, View, Text, TouchableOpacity, StyleSheet, Alert, } from "react-native"; // import DateTimePicker from "@react-native-community/datetimepicker"; import InputField from "../components/InputField"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import Ionicons from "@expo/vector-icons/Ionicons"; import RegistrationSVG from "../assets/images/registration.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 { globalStyles } from "../styles/global"; import Loader from "../components/Loader"; import { Formik } from "formik"; import { registerSchema } from "../schemas/registerSchema"; import { useDispatch, useSelector } from "react-redux"; import { selectRegisterError } from "../store/selectors/registerSelectors"; import { selectIsLoadingByActionType } from "../store/selectors/loadingSelectors"; import { REGISTER_USER_SCOPE } from "../store/actions/register/registerActionConstants"; import { clearRegisterErrors, registerUser, } from "../store/actions/register/registerActions"; import useAuthHook from "../utils/hooks/useAuthHook"; import { fetchAuthProvider } from "../store/actions/authProvider/authProviderActions"; import { ACCESS_TOKEN } from "../constants/localStorage"; import { storeData } from "../service/asyncStorage"; const RegisterScreen = ({ navigation }) => { const { response, promptAsync } = useAuthHook(); const dispatch = useDispatch(); const error = useSelector(selectRegisterError); const isLoading = useSelector( selectIsLoadingByActionType(REGISTER_USER_SCOPE) ); const storeToken = async (token) => { await storeData(ACCESS_TOKEN, token); } const handleApiResponseSuccess = () => { Alert.alert( "Success", "Successfully registered account, now you can log in", [ { text: "OK", onPress: () => navigation.navigate("Login"), }, ] ); }; const handleSignup = (values) => { const { username, email, password } = values; dispatch(clearRegisterErrors()); dispatch( registerUser({ username, email, password, handleApiResponseSuccess }) ); }; const handleGoogleAuth = () => { promptAsync({ useProxy: true, showInRecents: true }); }; useEffect(() => { if (response?.type === "success") { const accessToken = response.authentication.accessToken; if (accessToken) { storeToken(accessToken); dispatch(fetchAuthProvider({ accessToken })); } } }, [response]); return ( Sign Up {}} style={globalStyles.iconButton}> {}} style={globalStyles.iconButton}> Or, sign up with email... {({ handleChange, handleBlur, handleSubmit, values, isValid, errors, }) => ( <> } /> {errors.username && ( {errors.username} )} } keyboardType="email-address" /> {errors.email && ( {errors.email} )} } inputType="password" /> {errors.password && ( {errors.password} )} } inputType="password" /> {errors.confirmPassword && ( {errors.confirmPassword} )} {error && {error}} )} Already Registered? navigation.goBack()}> Sign In ); }; const styles = StyleSheet.create({ providersContainer: { flexDirection: "row", justifyContent: "space-between", marginBottom: 30, }, dateOfBirthContainer: { flexDirection: "row", borderBottomColor: "#ccc", borderBottomWidth: 1, paddingBottom: 8, marginBottom: 30, }, dateOfBirthLabel: { color: "#666", marginLeft: 5, marginTop: 5, }, alreadyRegistered: { flexDirection: "row", justifyContent: "center", marginBottom: 30, }, errorMessage: { marginBottom: 30, color: "red", }, }); export default RegisterScreen;