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("/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 && user.isVerified) || // If redirectTo is set, redirect if the user was not found. (redirectTo && !redirectIfFound && (!user || (user && !user.isVerified))) ) { Router.push(redirectTo); } }, [user, redirectIfFound, redirectTo, error]); return {user, mutateUser, isLoading}; }