UNPKG

@topsoft4u/next-auth

Version:

Authentication helper for next.js using SWR

51 lines 2.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useUser = void 0; var router_1 = require("next/router"); var react_1 = require("react"); var swr_1 = __importDefault(require("swr")); 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 = swr_1.default(swrKey, swrFetcher), user = _e.data, setUser = _e.mutate; var _f = router_1.useRouter(), asPath = _f.asPath, query = _f.query, push = _f.push, isReady = _f.isReady; var isLoading = react_1.useMemo(function () { return user === undefined; }, [user]); var isLoggedInMemo = react_1.useMemo(function () { return isLoggedIn(user); }, [isLoggedIn, user]); // region Redirects var redirectNeeded = react_1.useMemo(function () { // Not ready yet if (!isReady || isLoading) return false; // Redirect not needed return redirectIf !== "NEVER"; }, [isLoading, isReady, redirectIf]); var redirectGuest = react_1.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 = react_1.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]); react_1.useEffect(function () { if (!redirectNeeded) return; redirectGuest(); redirectUser(); }, [redirectGuest, redirectNeeded, redirectUser]); // endregion return { user: user, isLoggedIn: isLoggedInMemo, setUser: setUser }; }; exports.useUser = useUser; //# sourceMappingURL=useUser.js.map