import React, { useState, useEffect } from 'react'; import messaging from '@react-native-firebase/messaging'; import { router } from 'expo-router'; import { createUserWithEmailAndPassword, updateProfile } from 'firebase/auth'; import { auth } from '@/contexts/firebase'; import { useAuth } from '@/contexts/AuthContext'; import { View, ScrollView, Text, TouchableOpacity, KeyboardAvoidingView, Platform } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { useFormik } from 'formik'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Ionicons } from '@expo/vector-icons'; import { providerMenu, PageHeader, StyledContainer, InnerContainer, StyledFormArea, Title, SubTitle, PageImage, StyledButton, ButtonText, MessageBox, LoginTextInput, RegisterDropdownInput, formatPhoneNumber } from '@/components/generalHelpers.jsx'; export default function Register() { const [providerDropdownOpen, setProviderDropdownOpen] = useState(false); const [hidePassword, setHidePassword] = useState(true); const [registerButtonDisabled, setRegisterButtonDisabled] = useState(true); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const { user } = useAuth(); const formik = useFormik({ initialValues: { firstName: '', lastName: '', number: '', provider: '', email: '', password: '', passwordConfirmation: '' }, onSubmit: async (values) => { setError(''); setLoading(true); try { const userCredential = await createUserWithEmailAndPassword(auth, values.email, values.password); await updateProfile(userCredential.user, { displayName: `${values.firstName} ${values.lastName}` }); const token = await messaging().getToken(); await postgresServices.createUser({ firstName: values.firstName, lastName: values.lastName, number: values.number, email: values.email, provider: values.provider, departments: [], token, uid: userCredential.user.uid }) router.replace('./incidents'); } catch (err) { setError(err.message); } finally { setLoading(false); } } }); const formValues = formik.values; useEffect(() => { if (formValues) { const regex = /^[^@]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+$/; if ((formValues.number.length === 14 || (formValues.number.length === 10 && !formValues.number.includes('('))) && regex.test(formValues.email) && formValues.firstName && formValues.lastName) { if (formValues.password.length !== 0 && (formValues.password === formValues.passwordConfirmation)) { setRegisterButtonDisabled(false); } else { setRegisterButtonDisabled(true); } } else { setRegisterButtonDisabled(true); } } else { setRegisterButtonDisabled(true); } }, [formValues]) useEffect(() => { if (user) { router.replace('./incidents'); } }, [user]); return ( Back to Login } /> {error ? {error} : null} Tones Account Register ... Register ) }