diff --git a/app/login.jsx b/app/login.jsx
index 390113a..7b124ec 100644
--- a/app/login.jsx
+++ b/app/login.jsx
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react';
-import { View, Text } from 'react-native';
+import { View, Text, ScrollView, KeyboardAvoidingView, Platform } from 'react-native';
import { StatusBar } from 'expo-status-bar';
import { useFormik } from 'formik';
import { SafeAreaView } from 'react-native-safe-area-context';
@@ -65,68 +65,78 @@ export default function Login() {
}, [formValues]);
return (
-
+
+
-
-
-
-
-
- Tones
- Account Login
-
- {error ? {error} : null}
-
-
- ...
-
- Login
-
+
+
+
+
+
+
+ Tones
+ Account Login
+
+ {error ? {error} : null}
+
+
+ ...
+
+ Login
+
+
+
+ Don't have an account already?
+
+ Register
+
+
+
-
- Don't have an account already?
-
- Register
+ Temporary Area:
+
+
+ Incidents
-
-
-
- Temporary Area:
-
-
- Incidents
-
-
- Landing
-
-
- View Token: {expoPushToken}
-
-
-
-
- );
- }
\ No newline at end of file
+
+ Landing
+
+
+ View Token: {expoPushToken}
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/app/register.jsx b/app/register.jsx
index b2ff8f2..f1f5462 100644
--- a/app/register.jsx
+++ b/app/register.jsx
@@ -1,9 +1,10 @@
import React, { useState, useEffect } from 'react';
import { router } from 'expo-router';
import { createUserWithEmailAndPassword, updateProfile } from 'firebase/auth';
+import { getDatabase, ref, set } from 'firebase/database';
import { auth } from '@/contexts/firebase';
import { useAuth } from '@/contexts/AuthContext';
-import { View, ScrollView, Text, TouchableOpacity } from 'react-native';
+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';
@@ -22,7 +23,8 @@ import {
MessageBox,
LoginTextInput,
RegisterDropdownInput,
-} from '../components/generalHelpers.jsx';
+ formatPhoneNumber
+} from '@/components/generalHelpers.jsx';
export default function Register() {
const [providerDropdownOpen, setProviderDropdownOpen] = useState(false);
@@ -50,6 +52,16 @@ export default function Register() {
await updateProfile(userCredential.user, {
displayName: `${values.firstName} ${values.lastName}`
});
+
+ const db = getDatabase();
+ await set(ref(db, 'users/' + userCredential.user.uid), {
+ firstName: values.firstName,
+ lastName: values.lastName,
+ number: values.number,
+ provider: values.provider,
+ email: values.email,
+ uid: userCredential.user.uid
+ });
router.replace('./incidents');
} catch (err) {
setError(err.message);
@@ -63,21 +75,20 @@ export default function Register() {
useEffect(() => {
if (formValues) {
- if (
- formValues.email &&
- formValues.firstName &&
- formValues.lastName &&
- formValues.password.length !== 0 &&
- formValues.password === formValues.passwordConfirmation
- ) {
- setRegisterButtonDisabled(false);
+ 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]);
+ }, [formValues])
useEffect(() => {
if (user) {
@@ -86,7 +97,8 @@ export default function Register() {
}, [user]);
return (
-
+
+
@@ -95,97 +107,105 @@ export default function Register() {
-
-
-
+
+
-
-
- {error ? {error} : null}
- Tones
- Account Register
-
-
-
-
-
-
-
-
- ...
-
- Register
-
-
-
-
-
+
+
+
+ {error ? {error} : null}
+ Tones
+ Account Register
+
+
+
+
+
+
+
+
+ ...
+
+ Register
+
+
+
+
+
+
)
}
\ No newline at end of file
diff --git a/components/generalHelpers.jsx b/components/generalHelpers.jsx
index 1e9f819..526b5e8 100644
--- a/components/generalHelpers.jsx
+++ b/components/generalHelpers.jsx
@@ -336,4 +336,28 @@ export const RegisterDropdownInput = ({
)
-}
\ No newline at end of file
+}
+
+export const formatPhoneNumber = (e) => {
+ let formattedNumber;
+ const length = e?.length;
+
+ const regex = () => e.replace(/[^0-9\.]+/g, "");
+ const areaCode = () => `(${regex().slice(0, 3)})`;
+ const firstSix = () => `${areaCode()} ${regex().slice(3, 6)}`;
+ const trailer = (start) => `${regex().slice(start, regex().length)}`;
+
+ if (length <= 3) {
+ formattedNumber = regex();
+ } else if (length === 4) {
+ formattedNumber = `${areaCode()} ${trailer(3)}`;
+ } else if (length === 5) {
+ formattedNumber = `${areaCode().replace(")", "")}`;
+ } else if (length >= 5 && length <= 9) {
+ formattedNumber = `${areaCode()} ${trailer(3)}`;
+ } else if (length >= 10) {
+ formattedNumber = `${firstSix()}-${trailer(6)}`;
+ }
+
+ return formattedNumber;
+};
\ No newline at end of file
diff --git a/contexts/firebase.js b/contexts/firebase.js
index 16b36bb..8a593f2 100644
--- a/contexts/firebase.js
+++ b/contexts/firebase.js
@@ -5,6 +5,7 @@ import ReactNativeAsyncStorage from '@react-native-async-storage/async-storage';
const firebaseConfig = {
apiKey: process.env.EXPO_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN,
+ databaseURL: process.env.EXPO_PUBLIC_FIREBASE_DATABASE_URL,
projectId: process.env.EXPO_PUBLIC_FIREBASE_PROJECT_ID,
storageBucket: process.env.EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,