UNPKG

3.84 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.WithUser = exports.withUser = exports.useUser = exports.useUserContext = exports.UserContext = void 0;
4const tslib_1 = require("tslib");
5const react_1 = (0, tslib_1.__importStar)(require("react"));
6const StructureContext_1 = require("../contexts/StructureContext");
7const errors_1 = require("../errors");
8const utils_1 = require("../utils");
9const assertHelpers_1 = require("./assertHelpers");
10exports.UserContext = react_1.default.createContext(undefined);
11exports.UserContext.displayName = 'UserContext';
12function useUserContext() {
13 const userCtx = (0, react_1.useContext)(exports.UserContext);
14 (0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
15 return userCtx;
16}
17exports.useUserContext = useUserContext;
18function useUser(options) {
19 const opts = Object.assign({}, options);
20 opts.withAssertions = opts.withAssertions || false;
21 const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
22 const userCtx = useUserContext();
23 if (opts.withAssertions) {
24 const assertions = {
25 isLoading: (user) => {
26 return user === undefined;
27 },
28 isSignedOut: (user) => {
29 return user === null;
30 },
31 isSignedIn: (user) => {
32 return !!user;
33 },
34 };
35 return Object.assign({ user: userCtx.value }, assertions);
36 }
37 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
38 (0, assertHelpers_1.assertUserGuarantee)(structureCtx.guaranteedUser, 'useUser()');
39 (0, assertHelpers_1.assertUserGuarantee)(userCtx.value, 'useUser()');
40 return userCtx.value;
41}
42exports.useUser = useUser;
43const withUser = (Component, displayName) => {
44 displayName =
45 displayName || Component.displayName || Component.name || 'Component';
46 Component.displayName = displayName;
47 const HOC = (props) => {
48 const structureCtx = (0, react_1.useContext)(StructureContext_1.StructureContext);
49 const userCtx = (0, react_1.useContext)(exports.UserContext);
50 if (!(0, utils_1.inBrowser)()) {
51 return null;
52 }
53 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
54 (0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
55 const user = userCtx.value;
56 if (structureCtx.guaranteedUser && user) {
57 return react_1.default.createElement(Component, Object.assign({}, props, { user: user }));
58 }
59 if (user) {
60 return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll },
61 react_1.default.createElement(Component, Object.assign({}, props, { user: user }))));
62 }
63 return null;
64 };
65 HOC.displayName = `withUser(${displayName})`;
66 return HOC;
67};
68exports.withUser = withUser;
69const WithUser = ({ children }) => (react_1.default.createElement(StructureContext_1.StructureContext.Consumer, null, structureCtx => (react_1.default.createElement(exports.UserContext.Consumer, null, userCtx => {
70 if (typeof children !== 'function') {
71 throw new Error(errors_1.hocChildrenNotAFunctionError);
72 }
73 (0, assertHelpers_1.assertWrappedByClerkProvider)(structureCtx);
74 (0, assertHelpers_1.assertWrappedByClerkProvider)(userCtx);
75 const user = userCtx.value;
76 if (structureCtx.guaranteedUser && user) {
77 return children(user);
78 }
79 if (user) {
80 return (react_1.default.createElement(StructureContext_1.StructureContext.Provider, { value: StructureContext_1.StructureContextStates.guaranteedAll }, children(user)));
81 }
82 return null;
83}))));
84exports.WithUser = WithUser;
85//# sourceMappingURL=UserContext.js.map
\No newline at end of file