@zeushq/nextjs-zidentity
Version:
Next.js SDK for signin in with Zeus Identity
89 lines • 3.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useUser = exports.UserContext = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importStar)(require("react"));
var use_config_1 = (0, tslib_1.__importDefault)(require("./use-config"));
/**
* @ignore
*/
var missingUserProvider = 'You forgot to wrap your app in <UserProvider>';
/**
* @ignore
*/
exports.UserContext = (0, react_1.createContext)({
get user() {
throw new Error(missingUserProvider);
},
get error() {
throw new Error(missingUserProvider);
},
get isLoading() {
throw new Error(missingUserProvider);
},
checkSession: function () {
throw new Error(missingUserProvider);
}
});
/**
* @ignore
*/
var useUser = function () { return (0, react_1.useContext)(exports.UserContext); };
exports.useUser = useUser;
/**
* @ignore
*/
var userFetcher = function (url) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var response;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fetch(url)];
case 1:
response = _a.sent();
return [2 /*return*/, response.ok ? response.json() : undefined];
}
});
}); };
exports.default = (function (_a) {
var children = _a.children, initialUser = _a.user, _b = _a.profileUrl, profileUrl = _b === void 0 ? process.env.NEXT_PUBLIC_ZIDENTITY_PROFILE || '/api/auth/me' : _b, loginUrl = _a.loginUrl, _c = _a.fetcher, fetcher = _c === void 0 ? userFetcher : _c;
var _d = (0, tslib_1.__read)((0, react_1.useState)({ user: initialUser, isLoading: !initialUser }), 2), state = _d[0], setState = _d[1];
var checkSession = (0, react_1.useCallback)(function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var user_1, _e_1, error_1;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, fetcher(profileUrl)];
case 1:
user_1 = _a.sent();
setState(function (previous) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, previous), { user: user_1, error: undefined })); });
return [3 /*break*/, 3];
case 2:
_e_1 = _a.sent();
error_1 = new Error("The request to " + profileUrl + " failed");
setState(function (previous) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, previous), { user: undefined, error: error_1 })); });
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); }, [profileUrl]);
(0, react_1.useEffect)(function () {
if (state.user)
return;
(function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, checkSession()];
case 1:
_a.sent();
setState(function (previous) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, previous), { isLoading: false })); });
return [2 /*return*/];
}
});
}); })();
}, [state.user]);
var user = state.user, error = state.error, isLoading = state.isLoading;
return (react_1.default.createElement(use_config_1.default, { loginUrl: loginUrl },
react_1.default.createElement(exports.UserContext.Provider, { value: { user: user, error: error, isLoading: isLoading, checkSession: checkSession } }, children)));
});
//# sourceMappingURL=use-user.js.map