import { useEffect, useState } from 'react' import { useRouter } from 'next/router' import firebase from 'firebase/app' import 'firebase/auth' import initFirebase from '../auth/initFirebase' import { removeUserCookie, setUserCookie, getUserFromCookie, } from './userCookies' import { mapUserData } from './mapUserData' initFirebase() const useUser = () => { const [user, setUser] = useState() const router = useRouter() const logout = async () => { return firebase .auth() .signOut() .then(() => { // Sign-out successful. router.push('/auth') }) .catch((e) => { console.error(e) }) } useEffect(() => { // Firebase updates the id token every hour, this // makes sure the react state and the cookie are // both kept up to date const cancelAuthListener = firebase.auth().onIdTokenChanged((user) => { if (user) { const userData = mapUserData(user) setUserCookie(userData) setUser(userData) } else { removeUserCookie() setUser() } }) const userFromCookie = getUserFromCookie() if (!userFromCookie) { router.push('/') return } setUser(userFromCookie) return () => { cancelAuthListener() } // eslint-disable-next-line react-hooks/exhaustive-deps }, []) return { user, logout } } export { useUser }