@topsoft4u/next-auth
Version:
Authentication helper for next.js using SWR
44 lines • 2.19 kB
JavaScript
import { useRouter } from "next/router";
import { useCallback, useEffect, useMemo } from "react";
import useSWR from "swr";
export var useUser = function (_a) {
var _b = _a.swrKey, swrKey = _b === void 0 ? "auth" : _b, swrFetcher = _a.swrFetcher, isLoggedIn = _a.isLoggedIn, loginUrl = _a.loginUrl, _c = _a.redirectQueryParam, redirectQueryParam = _c === void 0 ? "redirect" : _c, _d = _a.redirectIf, redirectIf = _d === void 0 ? "NEVER" : _d, redirectTo = _a.redirectTo;
var _e = useSWR(swrKey, swrFetcher), user = _e.data, setUser = _e.mutate;
var _f = useRouter(), asPath = _f.asPath, query = _f.query, push = _f.push, isReady = _f.isReady;
var isLoading = useMemo(function () { return user === undefined; }, [user]);
var isLoggedInMemo = useMemo(function () { return isLoggedIn(user); }, [isLoggedIn, user]);
// region Redirects
var redirectNeeded = useMemo(function () {
// Not ready yet
if (!isReady || isLoading)
return false;
// Redirect not needed
return redirectIf !== "NEVER";
}, [isLoading, isReady, redirectIf]);
var redirectGuest = useCallback(function () {
var _a;
if (isLoggedInMemo || redirectIf !== "GUEST")
return;
push({
pathname: loginUrl,
query: (_a = {},
_a[redirectQueryParam] = asPath,
_a)
}).then();
}, [asPath, isLoggedInMemo, loginUrl, push, redirectIf, redirectQueryParam]);
var redirectUser = useCallback(function () {
var _a;
if (!isLoggedInMemo || redirectIf !== "USER")
return;
push(((_a = query === null || query === void 0 ? void 0 : query[redirectQueryParam]) === null || _a === void 0 ? void 0 : _a.toString()) || redirectTo || "/").then();
}, [isLoggedInMemo, push, query, redirectIf, redirectQueryParam, redirectTo]);
useEffect(function () {
if (!redirectNeeded)
return;
redirectGuest();
redirectUser();
}, [redirectGuest, redirectNeeded, redirectUser]);
// endregion
return { user: user, isLoggedIn: isLoggedInMemo, setUser: setUser };
};
//# sourceMappingURL=useUser.js.map