@clerk/clerk-react
Version:
Clerk.dev React library
72 lines • 3.52 kB
JavaScript
;
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