Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / observable-utils / deps / multiContainerFactory.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.multiContainerFactory = multiContainerFactory;
exports.default = void 0;

var _mobxReact = require("xmobx/mobx-react");

var _exotic = require("../../exotic");

var _decorateComponentStatics = _interopRequireDefault(require("./decorateComponentStatics"));

var _injectContextWith = _interopRequireDefault(require("./injectContextWith"));

var _registryWeakMap = require("./registryWeakMap");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * @type {ClassDecorator}
 *
 * @param {Class} Klass klass to build
 * @param {React.ClassComponent} [Target=undefined] ComponentClass if undefined, returns curried factoruy
 * @return {React.ClassComponent}
 */
function multiContainerFactory(Klass, Target) {
  /**
   * @description if only 1 arg, returns @curried factoruy
   */
  if (arguments.length === 1) {
    return function curriedMultiContainerFactory(CurriedTarget) {
      return multiContainerFactory(Klass, CurriedTarget);
    };
  }
  /**
   * @description check if Target already has a container
   * @note we do not want to call the function, so we check if it has a property
   */
  // if (hasOwnProp(Target.prototype, 'container')) {
  //   console.warn('already has a container!', {Klass, Target})
  //   return Target
  // }


  let _ViewInsideContainer = class _ViewInsideContainer extends Target {
    /**
     * @private
     * @description a container instance unique for each container with no garbage collector impact
     * @example constructor(props) { super(props); this.container = getInstance(this); }
     * @return {DropdownStore}
     */
    get container() {
      return (0, _registryWeakMap.getInstance)(Klass, this);
    }

  };

  let ViewInsideContainer = _ViewInsideContainer; // use the mapper

  if ((0, _exotic.isFunction)(ViewInsideContainer.injectionMap)) {
    const injectMap = (0, _injectContextWith.default)(ViewInsideContainer.injectionMap);
    ViewInsideContainer = injectMap(_ViewInsideContainer);
  }
  /**
   * @description inject static props
   */


  (0, _decorateComponentStatics.default)(ViewInsideContainer, Target);
  /**
   * @description check if it's already observable
   */

  const ObservableView = ViewInsideContainer.isMobXReactObserver === true ? ViewInsideContainer : (0, _mobxReact.observer)(ViewInsideContainer);
  return ObservableView;
}

var _default = multiContainerFactory;
exports.default = _default;