"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dynamic; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _promise = _interopRequireDefault(require("@babel/runtime/core-js/promise")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _react = _interopRequireWildcard(require("react")); var cached = {}; function registerModel(app, model) { model = model.default || model; if (!cached[model.namespace]) { app.model(model); cached[model.namespace] = 1; } } var defaultLoadingComponent = function defaultLoadingComponent() { return null; }; function asyncComponent(config) { var resolve = config.resolve; return ( /*#__PURE__*/ function (_Component) { function DynamicComponent() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, DynamicComponent); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(DynamicComponent)).call.apply(_getPrototypeOf2, [this].concat(args))); _this.LoadingComponent = config.LoadingComponent || defaultLoadingComponent; _this.state = { AsyncComponent: null }; _this.load(); return _this; } (0, _createClass2.default)(DynamicComponent, [{ key: "componentDidMount", value: function componentDidMount() { this.mounted = true; } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.mounted = false; } }, { key: "load", value: function load() { var _this2 = this; resolve().then(function (m) { var AsyncComponent = m.default || m; if (_this2.mounted) { _this2.setState({ AsyncComponent: AsyncComponent }); } else { _this2.state.AsyncComponent = AsyncComponent; // eslint-disable-line } }); } }, { key: "render", value: function render() { var AsyncComponent = this.state.AsyncComponent; var LoadingComponent = this.LoadingComponent; if (AsyncComponent) return _react.default.createElement(AsyncComponent, this.props); return _react.default.createElement(LoadingComponent, this.props); } }]); (0, _inherits2.default)(DynamicComponent, _Component); return DynamicComponent; }(_react.Component) ); } function dynamic(config) { var app = config.app, resolveModels = config.models, resolveComponent = config.component; return asyncComponent((0, _objectSpread2.default)({ resolve: config.resolve || function () { var models = typeof resolveModels === 'function' ? resolveModels() : []; var component = resolveComponent(); return new _promise.default(function (resolve) { _promise.default.all((0, _toConsumableArray2.default)(models).concat([component])).then(function (ret) { if (!models || !models.length) { return resolve(ret[0]); } else { var len = models.length; ret.slice(0, len).forEach(function (m) { m = m.default || m; if (!Array.isArray(m)) { m = [m]; } m.map(function (_) { return registerModel(app, _); }); }); resolve(ret[len]); } }); }); } }, config)); } dynamic.setDefaultLoadingComponent = function (LoadingComponent) { defaultLoadingComponent = LoadingComponent; };