UNPKG

2.64 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13Object.defineProperty(exports, "__esModule", { value: true });
14exports.observer = void 0;
15var react_1 = require("react");
16var staticRendering_1 = require("./staticRendering");
17var useObserver_1 = require("./useObserver");
18// n.b. base case is not used for actual typings or exported in the typing files
19function observer(baseComponent, options) {
20 // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
21 if (staticRendering_1.isUsingStaticRendering()) {
22 return baseComponent;
23 }
24 var realOptions = __assign({ forwardRef: false }, options);
25 var baseComponentName = baseComponent.displayName || baseComponent.name;
26 var wrappedComponent = function (props, ref) {
27 return useObserver_1.useObserver(function () { return baseComponent(props, ref); }, baseComponentName);
28 };
29 wrappedComponent.displayName = baseComponentName;
30 // memo; we are not interested in deep updates
31 // in props; we assume that if deep objects are changed,
32 // this is in observables, which would have been tracked anyway
33 var memoComponent;
34 if (realOptions.forwardRef) {
35 // we have to use forwardRef here because:
36 // 1. it cannot go before memo, only after it
37 // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
38 // since it wouldn't be a callable function anymore
39 memoComponent = react_1.memo(react_1.forwardRef(wrappedComponent));
40 }
41 else {
42 memoComponent = react_1.memo(wrappedComponent);
43 }
44 copyStaticProperties(baseComponent, memoComponent);
45 memoComponent.displayName = baseComponentName;
46 return memoComponent;
47}
48exports.observer = observer;
49// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
50var hoistBlackList = {
51 $$typeof: true,
52 render: true,
53 compare: true,
54 type: true
55};
56function copyStaticProperties(base, target) {
57 Object.keys(base).forEach(function (key) {
58 if (!hoistBlackList[key]) {
59 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
60 }
61 });
62}
63//# sourceMappingURL=observer.js.map
\No newline at end of file