mirror of
https://github.com/BradNut/weddingsite
synced 2025-09-08 17:40:36 +00:00
28 lines
866 B
JavaScript
28 lines
866 B
JavaScript
|
|
import { useEffect } from 'react';
|
||
|
|
import Router from 'next/router';
|
||
|
|
import useSWR from 'swr';
|
||
|
|
|
||
|
|
export default function useUser({
|
||
|
|
redirectTo = false,
|
||
|
|
redirectIfFound = false,
|
||
|
|
} = {}) {
|
||
|
|
const { data: user, mutate: mutateUser } = useSWR('/api/user');
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
// if no redirect needed, just return (example: already on /dashboard)
|
||
|
|
// if user data not yet there (fetch in progress, logged in or not) then don't do anything yet
|
||
|
|
if (!redirectTo || !user) return;
|
||
|
|
|
||
|
|
if (
|
||
|
|
// If redirectTo is set, redirect if the user was not found.
|
||
|
|
(redirectTo && !redirectIfFound && !user?.isLoggedIn) ||
|
||
|
|
// If redirectIfFound is also set, redirect if the user was found
|
||
|
|
(redirectIfFound && user?.isLoggedIn)
|
||
|
|
) {
|
||
|
|
Router.push(redirectTo);
|
||
|
|
}
|
||
|
|
}, [user, redirectIfFound, redirectTo]);
|
||
|
|
|
||
|
|
return { user, mutateUser };
|
||
|
|
}
|