UNPKG

@clerk/clerk-react

Version:

Clerk.dev React library

86 lines 4.07 kB
"use strict"; 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