@topsoft4u/next-auth
Version:
Authentication helper for next.js using SWR
51 lines • 2.51 kB
JavaScript
;
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