@clerk/clerk-react
Version:
Clerk.dev React library
85 lines • 3.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WithUser = exports.withUser = exports.useUser = exports.useUserContext = exports.UserContext = void 0;
const tslib_1 = require("tslib");
const react_1 = (0, tslib_1.__importStar)(require("react"));
const StructureContext_1 = require("../contexts/StructureContext");
const errors_1 = require("../errors");
const utils_1 = require("../utils");
const assertHelpers_1 = require("./assertHelpers");
exports.UserContext = react_1.default.createContext(undefined);
exports.UserContext.displayName = 'UserContext';
function useUserContext() {
const userCtx = (0, react_1.useContext)(exports.UserContext);
(0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
return userCtx;
}
exports.useUserContext = useUserContext;
function useUser(options) {
const opts = Object.assign({}, options);
opts.withAssertions = opts.withAssertions || false;
const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
const userCtx = useUserContext();
if (opts.withAssertions) {
const assertions = {
isLoading: (user) => {
return user === undefined;
},
isSignedOut: (user) => {
return user === null;
},
isSignedIn: (user) => {
return !!user;
},
};
return Object.assign({ user: userCtx.value }, assertions);
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertUserGuarantee)(structureCtx.guaranteedUser, 'useUser()');
(0, assertHelpers_1.assertUserGuarantee)(userCtx.value, 'useUser()');
return userCtx.value;
}
exports.useUser = useUser;
const withUser = (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 userCtx = (0, react_1.useContext)(exports.UserContext);
if (!(0, utils_1.inBrowser)()) {
return null;
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
const user = userCtx.value;
if (structureCtx.guaranteedUser && user) {
return react_1.default.createElement(Component, Object.assign({}, props, { user: user }));
}
if (user) {
return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll },
react_1.default.createElement(Component, Object.assign({}, props, { user: user }))));
}
return null;
};
HOC.displayName = `withUser(${displayName})`;
return HOC;
};
exports.withUser = withUser;
const WithUser = ({ children }) => (react_1.default.createElement(StructureContext_1.StructureContext.Consumer, null, structureCtx => (react_1.default.createElement(exports.UserContext.Consumer, null, userCtx => {
if (typeof children !== 'function') {
throw new Error(errors_1.hocChildrenNotAFunctionError);
}
(0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
(0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
const user = userCtx.value;
if (structureCtx.guaranteedUser && user) {
return children(user);
}
if (user) {
return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll }, children(user)));
}
return null;
}))));
exports.WithUser = WithUser;
//# sourceMappingURL=UserContext.js.map