29 lines
987 B
TypeScript
29 lines
987 B
TypeScript
import {useEffect} from "react";
|
|
import Router from "next/router";
|
|
import useSWR from "swr";
|
|
import {User} from "@/interfaces/user";
|
|
import axios from "axios";
|
|
|
|
const fetcher = (url: string) => axios.get(url).then((res) => res.data);
|
|
|
|
export default function useUser({redirectTo = "", redirectIfFound = false} = {}) {
|
|
const {data: user, mutate: mutateUser, isLoading, error} = useSWR<User>("/api/user", fetcher);
|
|
|
|
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 redirectIfFound is also set, redirect if the user was found
|
|
(redirectIfFound && user) ||
|
|
// If redirectTo is set, redirect if the user was not found.
|
|
(redirectTo && !redirectIfFound && !user)
|
|
) {
|
|
Router.push(redirectTo);
|
|
}
|
|
}, [user, redirectIfFound, redirectTo, error]);
|
|
|
|
return {user, mutateUser, isLoading};
|
|
}
|