2020-03-19 17:40:13 +01:00
|
|
|
import { useEffect } from "react";
|
|
|
|
import Router from "next/router";
|
|
|
|
import useSWR from "swr";
|
|
|
|
|
2020-05-18 21:24:37 +02:00
|
|
|
const fetcher = (url) =>
|
2020-03-19 17:40:13 +01:00
|
|
|
fetch(url)
|
2020-05-18 21:24:37 +02:00
|
|
|
.then((r) => r.json())
|
|
|
|
.then((data) => {
|
2020-03-19 17:40:13 +01:00
|
|
|
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;
|
|
|
|
}
|