diff --git a/screens/login.tsx b/screens/login.tsx new file mode 100644 index 0000000..9821095 --- /dev/null +++ b/screens/login.tsx @@ -0,0 +1,94 @@ +import React, { useState, useEffect } from 'react'; +import { Alert, Button, View, Text, TextInput, TouchableWithoutFeedback, Keyboard } from "react-native"; +import auth, { FirebaseAuthTypes } from '@react-native-firebase/auth'; + +// This code is beginning of Auth Implementation - actual implementation will differ and involve more UI +// Does not have a restart or proper handling of code confirmation, should only be used for obtaining token/testing +// Currently working for Android builds, iOS has open issue #56 + +export default function Login() { + const [phoneNumber, setPhoneNumber] = useState(''); + const [code, setCode] = useState(''); + + const [user, setUser] = useState(null); + const [confirm, setConfirm] = useState(null); + + async function onAuthStateChanged(user: any) { + setUser(user); + if (user) { + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + const token = await auth().currentUser?.getIdToken(); + // To debug/check token & user return, use these logs + // console.log(token) // token log + // console.log(user) // user log + } + } + + async function signInWithPhoneNumber(phoneNumber: string) { + if (!phoneNumber) { + return Alert.alert('Please enter a valid phone number with a country code'); + } + try { + const confirmation = await auth().signInWithPhoneNumber(phoneNumber); + setConfirm(confirmation); + } catch (err) { + // TODO: implement more robust error handling by parsing err message + console.warn(err) + Alert.alert( + 'There was an error. Make sure you are using a country code (ex: +1 for US)' + ); + } + } + + async function confirmCode() { + try { + await confirm?.confirm(code); + } catch { + Alert.alert('Invalid code, please try again.'); + } + } + + useEffect(() => { + const subscriber = auth().onAuthStateChanged(onAuthStateChanged); + return subscriber; + }, []); + + + + return ( + Keyboard.dismiss()}> + + setPhoneNumber(value)} + /> + {confirm && ( + setCode(value)} + /> + )} +