UNPKG

4.07 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.WithSession = exports.withSession = exports.useSession = exports.useSessionContext = exports.SessionContext = void 0;
4const tslib_1 = require("tslib");
5const react_1 = (0, tslib_1.__importStar)(require("react"));
6const assertHelpers_1 = require("./assertHelpers");
7const utils_1 = require("../utils");
8const errors_1 = require("../errors");
9const StructureContext_1 = require("./StructureContext");
10exports.SessionContext = react_1.default.createContext(undefined);
11exports.SessionContext.displayName = 'SessionContext';
12function useSessionContext() {
13 const sessionCtx = (0, react_1.useContext)(exports.SessionContext);
14 (0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
15 return sessionCtx;
16}
17exports.useSessionContext = useSessionContext;
18function useSession(options) {
19 const opts = Object.assign({}, options);
20 opts.withAssertions = opts.withAssertions || false;
21 const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
22 const sessionCtx = useSessionContext();
23 if (opts.withAssertions) {
24 const assertions = {
25 isLoading: (session) => {
26 return session === undefined;
27 },
28 isSignedOut: (session) => {
29 return session === null;
30 },
31 isSignedIn: (session) => {
32 return session !== undefined && session !== null;
33 },
34 };
35 const session = sessionCtx.value;
36 return Object.assign({ session }, assertions);
37 }
38 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
39 (0, assertHelpers_1.assertUserGuarantee)(structureCtx.guaranteedUser, 'useSession()');
40 (0, assertHelpers_1.assertUserGuarantee)(sessionCtx.value, 'useSession()');
41 return sessionCtx.value;
42}
43exports.useSession = useSession;
44const withSession = (Component, displayName) => {
45 displayName =
46 displayName || Component.displayName || Component.name || 'Component';
47 Component.displayName = displayName;
48 const HOC = (props) => {
49 const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
50 const sessionCtx = (0, react_1.useContext)(exports.SessionContext);
51 if (!(0, utils_1.inBrowser)()) {
52 return null;
53 }
54 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
55 (0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
56 const session = sessionCtx.value;
57 if (structureCtx.guaranteedUser && session) {
58 return react_1.default.createElement(Component, Object.assign({}, props, { session: session }));
59 }
60 if (session) {
61 return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll },
62 react_1.default.createElement(Component, Object.assign({}, props, { session: session }))));
63 }
64 return null;
65 };
66 HOC.displayName = `withSession(${displayName})`;
67 return HOC;
68};
69exports.withSession = withSession;
70const WithSession = ({ children }) => (react_1.default.createElement(StructureContext_1.StructureContext.Consumer, null, structureCtx => (react_1.default.createElement(exports.SessionContext.Consumer, null, sessionCtx => {
71 if (typeof children !== 'function') {
72 throw new Error(errors_1.hocChildrenNotAFunctionError);
73 }
74 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
75 (0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
76 const session = sessionCtx.value;
77 if (structureCtx.guaranteedUser && session) {
78 return children(session);
79 }
80 if (session) {
81 return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll }, children(session)));
82 }
83 return null;
84}))));
85exports.WithSession = WithSession;
86//# sourceMappingURL=SessionContext.js.map
\No newline at end of file