1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 | Object.defineProperty(exports, "__esModule", {
|
5 | value: true
|
6 | });
|
7 | exports.copyStaticProperties = copyStaticProperties;
|
8 | exports.inject = inject;
|
9 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
10 | var _react = _interopRequireDefault(require("react"));
|
11 | var _mobxReact = require("mobx-react");
|
12 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
13 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
14 | var isDebug = false;
|
15 |
|
16 |
|
17 | var hoistBlackList = {
|
18 | $$typeof: 1,
|
19 | render: 1,
|
20 | compare: 1,
|
21 | type: 1,
|
22 | childContextTypes: 1,
|
23 | contextType: 1,
|
24 | contextTypes: 1,
|
25 | defaultProps: 1,
|
26 | getDefaultProps: 1,
|
27 | getDerivedStateFromError: 1,
|
28 | getDerivedStateFromProps: 1,
|
29 | mixins: 1,
|
30 | propTypes: 1
|
31 | };
|
32 | function copyStaticProperties(base, target) {
|
33 | var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));
|
34 | Object.getOwnPropertyNames(base).forEach(function (key) {
|
35 | if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
|
36 | Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
|
37 | }
|
38 | });
|
39 | }
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {
|
45 |
|
46 | var Injector = _react["default"].forwardRef(function (props, ref) {
|
47 | var newProps = _objectSpread({}, props);
|
48 | var context = _react["default"].useContext(_mobxReact.MobXProviderContext);
|
49 |
|
50 | Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});
|
51 | if (ref) {
|
52 | newProps.ref = ref;
|
53 | }
|
54 | return _react["default"].createElement(component, newProps);
|
55 | });
|
56 | if (makeReactive) Injector = (0, _mobxReact.observer)(Injector);
|
57 | Injector["isMobxInjector"] = true;
|
58 |
|
59 |
|
60 | copyStaticProperties(component, Injector);
|
61 | Injector["wrappedComponent"] = component;
|
62 | Injector.displayName = getInjectName(component, injectNames);
|
63 | return Injector;
|
64 | }
|
65 | function getInjectName(component, injectNames) {
|
66 | var displayName;
|
67 | var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component";
|
68 | if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")";
|
69 | return displayName;
|
70 | }
|
71 | function grabStoresByName(storeNames) {
|
72 | return function (baseStores, nextProps) {
|
73 | storeNames.forEach(function (storeName) {
|
74 | if (storeName in nextProps
|
75 | ) return;
|
76 | if (!(storeName in baseStores)) {
|
77 | var err = new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider");
|
78 | if (isDebug) console.error('Mobx @inject', err);
|
79 | nextProps[storeName] = null;
|
80 | return;
|
81 | }
|
82 | nextProps[storeName] = baseStores[storeName];
|
83 | });
|
84 | return nextProps;
|
85 | };
|
86 | }
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | function inject() {
|
94 | for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {
|
95 | storeNames[_key] = arguments[_key];
|
96 | }
|
97 | if (typeof arguments[0] === "function") {
|
98 | var grabStoresFn = arguments[0];
|
99 | return function (componentClass) {
|
100 | return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);
|
101 | };
|
102 | } else {
|
103 | return function (componentClass) {
|
104 | return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false);
|
105 | };
|
106 | }
|
107 | }
|
108 |
|
\ | No newline at end of file |