Repository URL to install this package:
|
Version:
1.2.9 ▾
|
"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;