@clerk/clerk-react
Version:
Clerk.dev React library
86 lines • 4.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WithSession = exports.withSession = exports.useSession = exports.useSessionContext = exports.SessionContext = void 0;
const tslib_1 = require("tslib");
const react_1 = (0, tslib_1.__importStar)(require("react"));
const assertHelpers_1 = require("./assertHelpers");
const utils_1 = require("../utils");
const errors_1 = require("../errors");
const StructureContext_1 = require("./StructureContext");
exports.SessionContext = react_1.default.createContext(undefined);
exports.SessionContext.displayName = 'SessionContext';
function useSessionContext() {
const sessionCtx = (0, react_1.useContext)(exports.SessionContext);
(0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
return sessionCtx;
}
exports.useSessionContext = useSessionContext;
function useSession(options) {
const opts = Object.assign({}, options);
opts.withAssertions = opts.withAssertions || false;
const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
const sessionCtx = useSessionContext();
if (opts.withAssertions) {
const assertions = {
isLoading: (session) => {
return session === undefined;
},
isSignedOut: (session) => {
return session === null;
},
isSignedIn: (session) => {
return session !== undefined && session !== null;
},
};
const session = sessionCtx.value;
return Object.assign({ session }, assertions);
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertUserGuarantee)(structureCtx.guaranteedUser, 'useSession()');
(0, assertHelpers_1.assertUserGuarantee)(sessionCtx.value, 'useSession()');
return sessionCtx.value;
}
exports.useSession = useSession;
const withSession = (Component, displayName) => {
displayName =
displayName || Component.displayName || Component.name || 'Component';
Component.displayName = displayName;
const HOC = (props) => {
const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
const sessionCtx = (0, react_1.useContext)(exports.SessionContext);
if (!(0, utils_1.inBrowser)()) {
return null;
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
const session = sessionCtx.value;
if (structureCtx.guaranteedUser && session) {
return react_1.default.createElement(Component, Object.assign({}, props, { session: session }));
}
if (session) {
return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll },
react_1.default.createElement(Component, Object.assign({}, props, { session: session }))));
}
return null;
};
HOC.displayName = `withSession(${displayName})`;
return HOC;
};
exports.withSession = withSession;
const WithSession = ({ children }) => (react_1.default.createElement(StructureContext_1.StructureContext.Consumer, null, structureCtx => (react_1.default.createElement(exports.SessionContext.Consumer, null, sessionCtx => {
if (typeof children !== 'function') {
throw new Error(errors_1.hocChildrenNotAFunctionError);
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertWrappedByClerkProvider)(sessionCtx);
const session = sessionCtx.value;
if (structureCtx.guaranteedUser && session) {
return children(session);
}
if (session) {
return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll }, children(session)));
}
return null;
}))));
exports.WithSession = WithSession;
//# sourceMappingURL=SessionContext.js.map