UNPKG

@clerk/clerk-react

Version:

Clerk.dev React library

85 lines 3.84 kB
"use strict"; 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