UNPKG

@clerk/clerk-react

Version:

Clerk.dev React library

72 lines 3.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WithClerk = exports.withClerk = exports.useClerk = exports.IsomorphicClerkContext = void 0; const tslib_1 = require("tslib"); const react_1 = (0, tslib_1.__importStar)(require("react")); const assertHelpers_1 = require("./assertHelpers"); const StructureContext_1 = require("../contexts/StructureContext"); const utils_1 = require("../utils"); const errors_1 = require("../errors"); exports.IsomorphicClerkContext = react_1.default.createContext(undefined); exports.IsomorphicClerkContext.displayName = 'IsomorphicClerkContext'; const useClerk = () => { const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext); const clerkCtx = (0, react_1.useContext)(exports.IsomorphicClerkContext); (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx); (0, assertHelpers_1.assertWrappedByClerkProvider)(clerkCtx); (0, assertHelpers_1.assertClerkLoadedGuarantee)(structureCtx.guaranteedLoaded, 'useClerk()'); (0, assertHelpers_1.assertClerkLoadedGuarantee)(clerkCtx.value, 'useClerk()'); // The value is an instance of IsomorphicClerk, not Clerk // TODO: Remove type cast return clerkCtx.value; }; exports.useClerk = useClerk; const withClerk = (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 clerkCtx = (0, react_1.useContext)(exports.IsomorphicClerkContext); if (!(0, utils_1.inBrowser)()) { return null; } (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx); (0, assertHelpers_1.assertWrappedByClerkProvider)(clerkCtx); const clerk = clerkCtx.value; if (!clerk) { return null; } if (structureCtx.guaranteedLoaded) { return react_1.default.createElement(Component, Object.assign({}, props, { clerk: clerk })); } if (clerk.client) { return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedLoaded }, react_1.default.createElement(Component, Object.assign({}, props, { clerk: clerk })))); } return null; }; HOC.displayName = `withClerk(${displayName})`; return HOC; }; exports.withClerk = withClerk; const WithClerk = ({ children }) => (react_1.default.createElement(StructureContext_1.StructureContext.Consumer, null, structureCtx => (react_1.default.createElement(exports.IsomorphicClerkContext.Consumer, null, clerkCtx => { if (typeof children !== 'function') { throw new Error(errors_1.hocChildrenNotAFunctionError); } (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx); (0, assertHelpers_1.assertWrappedByClerkProvider)(clerkCtx); const clerk = clerkCtx.value; if (!clerk) { return null; } if (structureCtx.guaranteedLoaded) { return children(clerk); } if (clerk.client) { return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedLoaded }, children(clerk))); } return null; })))); exports.WithClerk = WithClerk; //# sourceMappingURL=IsomorphicClerkContext.js.map