react-garden
Version:
React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.
54 lines (44 loc) • 1.36 kB
JavaScript
import { useState, useEffect } from 'react'
import Firebase from '~/configs/firebase'
const formatAuthUser = user => {
return {
uid: user.uid,
email: user.email
}
}
const useFirebaseAuth = () => {
const [authUser, setAuthUser] = useState(null)
const [loading, setLoading] = useState(true)
const authStateChanged = async authState => {
if (!authState) {
setAuthUser(null)
setLoading(false)
} else {
setLoading(true)
const formattedUser = formatAuthUser(authState)
setAuthUser(formattedUser)
setLoading(false)
}
}
const resetUser = () => {
setAuthUser(null)
setLoading(true)
}
const signInWithEmailAndPassword = (email, password) => Firebase.auth().signInWithEmailAndPassword(email, password)
const createUserWithEmailAndPassword = (email, password) =>
Firebase.auth().createUserWithEmailAndPassword(email, password)
const signOut = () => Firebase.auth().signOut().then(resetUser)
// listen for Firebase state change
useEffect(() => {
const unsubscribe = Firebase.auth().onAuthStateChanged(authStateChanged)
return () => unsubscribe()
}, [])
return {
loading,
signOut,
authUser,
signInWithEmailAndPassword,
createUserWithEmailAndPassword
}
}
export default useFirebaseAuth