UNPKG

@lskjs/uapp

Version:
112 lines (108 loc) 5.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.copyStaticProperties = copyStaticProperties; exports.inject = inject; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _mobxReact = require("mobx-react"); 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; } 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; } /* eslint-disable */ // @ts-ignore // @ts-ignore // import { observer } from "mobx-react/dist/observer" // import { copyStaticProperties } from "mobx-react/dist/utils/utils" // import { MobXProviderContext } from "mobx-react/dist/Provider" var isDebug = false; // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js var hoistBlackList = { $$typeof: 1, render: 1, compare: 1, type: 1, childContextTypes: 1, contextType: 1, contextTypes: 1, defaultProps: 1, getDefaultProps: 1, getDerivedStateFromError: 1, getDerivedStateFromProps: 1, mixins: 1, propTypes: 1 }; function copyStaticProperties(base, target) { var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base)); Object.getOwnPropertyNames(base).forEach(function (key) { if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)); } }); } /** * Store Injection */ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) { // Support forward refs var Injector = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) { var newProps = _objectSpread({}, props); var context = _react["default"].useContext(_mobxReact.MobXProviderContext); // @ts-ignore Object.assign(newProps, grabStoresFn(context || {}, newProps) || {}); if (ref) { newProps.ref = ref; } return /*#__PURE__*/_react["default"].createElement(component, newProps); }); if (makeReactive) Injector = (0, _mobxReact.observer)(Injector); Injector["isMobxInjector"] = true; // assigned late to suppress observer warning // Static fields from component should be visible on the generated Injector copyStaticProperties(component, Injector); Injector["wrappedComponent"] = component; Injector.displayName = getInjectName(component, injectNames); return Injector; } function getInjectName(component, injectNames) { var displayName; var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component"; if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")"; return displayName; } function grabStoresByName(storeNames) { return function (baseStores, nextProps) { storeNames.forEach(function (storeName) { if (storeName in nextProps // prefer props over stores ) return; if (!(storeName in baseStores)) { var err = new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider"); if (isDebug) console.error('Mobx @inject', err); nextProps[storeName] = null; return; } nextProps[storeName] = baseStores[storeName]; }); return nextProps; }; } /** * higher order component that injects stores to a child. * takes either a varargs list of strings, which are stores read from the context, * or a function that manually maps the available stores from the context to props: * storesToProps(mobxStores, props, context) => newProps */ function inject() { for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) { storeNames[_key] = arguments[_key]; } if (typeof arguments[0] === "function") { var grabStoresFn = arguments[0]; return function (componentClass) { return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true); }; } else { return function (componentClass) { return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false); }; } } //# sourceMappingURL=inject.js.map