import { useSignUp } from "@clerk/clerk-expo"; import { Link, router } from "expo-router"; import { useState } from "react"; import { Alert, Image, ScrollView, Text, View } from "react-native"; import ReactNativeModal from "react-native-modal"; import { CustomButton } from "@/components/custom-button"; import { InputField } from "@/components/input-field"; import { OAuth } from "@/components/oauth"; import { icons, images } from "@/constants"; const SignUp = () => { const { isLoaded, signUp, setActive } = useSignUp(); const [form, setForm] = useState({ name: "", email: "", password: "", }); const [verification, setVerification] = useState({ state: "default", error: "", code: "", }); const onSignUpPress = async () => { if (!isLoaded) return; try { await signUp.create({ emailAddress: form.email, password: form.password, }); await signUp.prepareEmailAddressVerification({ strategy: "email_code" }); setVerification((prevVerification) => ({ ...prevVerification, state: "pending", })); setForm((prevForm) => ({ ...prevForm, password: "", })); } catch (err: any) { setForm((prevForm) => ({ ...prevForm, password: "", })); Alert.alert("Error", err?.errors[0]?.longMessage); } }; const onPressVerify = async () => { if (!isLoaded) return; try { const completeSignUp = await signUp.attemptEmailAddressVerification({ code: verification.code, }); if (completeSignUp.status === "complete") { // TODO: Create a database user await setActive({ session: completeSignUp.createdSessionId }); setVerification((prevVerification) => ({ ...prevVerification, state: "success", })); } else { setVerification((prevVerification) => ({ ...prevVerification, error: "Verification failed.", state: "failed", })); } } catch (err: any) { setVerification((prevVerification) => ({ ...prevVerification, error: err?.errors[0]?.longMessage, state: "failed", })); } }; return ( Car Create Your Account setForm((prevForm) => ({ ...prevForm, name: value, })) } /> setForm((prevForm) => ({ ...prevForm, email: value, })) } /> setForm((prevForm) => ({ ...prevForm, password: value, })) } /> Already have an account? Sign in setVerification((prevVerification) => ({ ...prevVerification, state: "success", })) } isVisible={verification.state === "pending"} > Verification We've sent a verification code to {form.email} setVerification((prevVerification) => ({ ...prevVerification, code, })) } /> {verification.error && ( {verification.error} )} Verified You've succesfully verified your accound. router.replace("/(root)/(tabs)/home")} className="mt-5" /> ); }; export default SignUp;