import { useEffect } from 'react' import Router from 'next/router' import useSWR from 'swr' const fetcher = (url) => fetch(url) .then((r) => r.json()) .then((data) => { return { user: data?.user || null } }) export function useUser({ redirectTo, redirectIfFound } = {}) { const { data, error } = useSWR('/api/user', fetcher) const user = data?.user const finished = Boolean(data) const hasUser = Boolean(user) useEffect(() => { if (!redirectTo || !finished) return if ( // If redirectTo is set, redirect if the user was not found. (redirectTo && !redirectIfFound && !hasUser) || // If redirectIfFound is also set, redirect if the user was found (redirectIfFound && hasUser) ) { Router.push(redirectTo) } }, [redirectTo, redirectIfFound, finished, hasUser]) return error ? null : user }