mutants-appfx
Version:
appfx module
461 lines (366 loc) • 14.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _set = require('babel-runtime/core-js/set');
var _set2 = _interopRequireDefault(_set);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _temp, _class2, _class3, _temp2;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _Alert = require('mutants-microfx/dist/components/Alert');
var _Alert2 = _interopRequireDefault(_Alert);
var _AppManager = require('../AppManager');
var _AppManager2 = _interopRequireDefault(_AppManager);
var _UILoading = require('../components/UILoading');
var _UILoading2 = _interopRequireDefault(_UILoading);
require('./style.less');
var _eventPath = require('../controllers/eventPath');
var _mutantsMicrofx = require('mutants-microfx');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TemplateView = (_temp = _class = function (_React$Component) {
(0, _inherits3.default)(TemplateView, _React$Component);
function TemplateView() {
(0, _classCallCheck3.default)(this, TemplateView);
return (0, _possibleConstructorReturn3.default)(this, (TemplateView.__proto__ || (0, _getPrototypeOf2.default)(TemplateView)).apply(this, arguments));
}
(0, _createClass3.default)(TemplateView, [{
key: 'getChildContext',
value: function getChildContext() {
return {
pid: this.props.pid,
sysid: this.props.sysid,
mid: this.props.mid,
id: this.props.id,
viewModel: this.props.viewModel,
onEvent: this.props.handleEvent,
appState: this.props.app.state,
display: this.props.pid === this.props.app.pid
};
}
}, {
key: 'render',
value: function render() {
var props = {
pid: this.props.pid,
sysid: this.props.sysid,
mid: this.props.mid,
id: this.props.id,
viewModel: this.props.viewModel,
onEvent: this.props.handleEvent,
appState: this.props.app.state,
display: this.props.pid === this.props.app.pid
};
return _react2.default.createElement(this.props.view, props);
}
}]);
return TemplateView;
}(_react2.default.Component), _class.propTypes = {
pid: _propTypes2.default.string.isRequired,
sysid: _propTypes2.default.string.isRequired,
mid: _propTypes2.default.string.isRequired,
id: _propTypes2.default.string,
view: _propTypes2.default.func.isRequired,
viewModel: _propTypes2.default.object.isRequired,
app: _propTypes2.default.object.isRequired,
handleEvent: _propTypes2.default.func.isRequired
}, _class.childContextTypes = {
pid: _propTypes2.default.string,
sysid: _propTypes2.default.string,
mid: _propTypes2.default.string,
id: _propTypes2.default.string,
onEvent: _propTypes2.default.func,
viewModel: _propTypes2.default.object,
appState: _propTypes2.default.object,
display: _propTypes2.default.bool
}, _temp);
var TemplateProvider = (0, _mutantsMicrofx.observer)(_class2 = (_temp2 = _class3 = function (_React$Component2) {
(0, _inherits3.default)(TemplateProvider, _React$Component2);
(0, _createClass3.default)(TemplateProvider, [{
key: 'openApp',
value: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var state, app;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(this.state.sysid === this.sysid && this.state.mid === this.mid && this.state.pid === this.pid)) {
_context.next = 2;
break;
}
return _context.abrupt('return');
case 2:
this.sysid = this.state.sysid;
this.mid = this.state.mid;
this.pid = this.state.pid;
state = void 0;
_UILoading2.default.show();
_context.prev = 7;
_context.next = 10;
return _AppManager2.default.open(this.props);
case 10:
app = _context.sent;
state = {
loading: false,
app: app
};
_UILoading2.default.destroy();
_context.next = 20;
break;
case 15:
_context.prev = 15;
_context.t0 = _context['catch'](7);
console.error(_context.t0);
state = {
error: _context.t0.message,
loading: false
};
_UILoading2.default.destroy();
case 20:
this.setState(state);
case 21:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[7, 15]]);
}));
function openApp() {
return _ref.apply(this, arguments);
}
return openApp;
}()
// static getDerivedStateFromProps(nextProps, prevState) {
// if (prevState.sysid != nextProps.sysid ||
// prevState.mid != nextProps.mid ||
// (prevState.pid != nextProps.pid)) {
// return {
// sysid: nextProps.sysid,
// mid: nextProps.mid,
// pid: nextProps.pid,
// loading: true,
// error: null,
// }
// }
// return null;
// }
}]);
function TemplateProvider(props) {
var _this3 = this;
(0, _classCallCheck3.default)(this, TemplateProvider);
var _this2 = (0, _possibleConstructorReturn3.default)(this, (TemplateProvider.__proto__ || (0, _getPrototypeOf2.default)(TemplateProvider)).call(this));
_this2.state = {
loading: true
};
_this2.handleEvent = function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(viewitem, name, args) {
var app, eid, action, actions, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, it;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
app = _this2.state.app;
if (app) {
_context2.next = 3;
break;
}
return _context2.abrupt('return');
case 3:
_context2.next = 5;
return app.pushEvent(name);
case 5:
eid = _context2.sent;
_context2.prev = 6;
// 执行元数据配置的行为
action = viewitem && viewitem[name];
if (!action) {
_context2.next = 11;
break;
}
_context2.next = 11;
return app.executeAction(action.name, (0, _extends3.default)({}, action.toJS().args, args));
case 11:
// 支持controller的eventPath
actions = new _set2.default((0, _eventPath.findActions)(app.viewController, name).concat((0, _eventPath.findActions)(app.controller, name)));
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context2.prev = 15;
_iterator = (0, _getIterator3.default)(actions);
case 17:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context2.next = 24;
break;
}
it = _step.value;
_context2.next = 21;
return app.executeAction(it, (0, _extends3.default)({}, args));
case 21:
_iteratorNormalCompletion = true;
_context2.next = 17;
break;
case 24:
_context2.next = 30;
break;
case 26:
_context2.prev = 26;
_context2.t0 = _context2['catch'](15);
_didIteratorError = true;
_iteratorError = _context2.t0;
case 30:
_context2.prev = 30;
_context2.prev = 31;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 33:
_context2.prev = 33;
if (!_didIteratorError) {
_context2.next = 36;
break;
}
throw _iteratorError;
case 36:
return _context2.finish(33);
case 37:
return _context2.finish(30);
case 38:
if (!viewitem) {
_context2.next = 41;
break;
}
_context2.next = 41;
return app.triggerEvent(viewitem.name + '.' + name, (0, _extends3.default)({}, args));
case 41:
_context2.next = 43;
return app.popEvent(eid);
case 43:
_context2.next = 50;
break;
case 45:
_context2.prev = 45;
_context2.t1 = _context2['catch'](6);
_context2.next = 49;
return app.popEvent(eid);
case 49:
throw _context2.t1;
case 50:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this3, [[6, 45], [15, 26, 30, 38], [31,, 33, 37]]);
}));
return function (_x, _x2, _x3) {
return _ref2.apply(this, arguments);
};
}();
_this2.state.sysid = props.sysid;
_this2.state.mid = props.mid;
_this2.state.pid = props.pid;
return _this2;
}
(0, _createClass3.default)(TemplateProvider, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.state.sysid != nextProps.sysid || this.state.mid != nextProps.mid || this.state.pid != nextProps.pid) {
this.setState({
sysid: nextProps.sysid,
mid: nextProps.mid,
pid: nextProps.pid,
loading: true,
error: null
});
}
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
this.openApp().catch(function (err) {
return console.error(err);
});
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate() {
this.openApp().catch(function (err) {
return console.error(err);
});
}
}, {
key: 'render',
value: function render() {
var _this4 = this;
// 加载中保持界面不变,减少闪烁
var app = this.state.app;
if (!app) {
if (this.state.error) {
return _react2.default.createElement(_Alert2.default, { message: this.state.error });
}
return null;
}
// const views = appManager.apps.values().reduce((views, app) => views.concat(app.views.slice().map((it, i) => ({
// ...it,
// sysid: app.module.sysid,
// mid: app.module.mid,
// viewModel: app.viewModels[i].viewModel,
// state: app.state.toJS(),
// app,
// }))), []);
// return (<div className='app'>
// {this.state.error?<Alert message={this.state.error}/>:null}
// {views.map((it)=>{
// return <div key={it.iid} id={it.mid+'_'+it.pid+'_'+it.iid} className='view' style={{display:it.iid===app.iid?'block':'none'}}>
// <TemplateView {...it.state} mid={it.mid} sysid={it.sysid} pid={it.pid} app={it.app} id={it.app.loadedId}
// viewModel={it.viewModel} view={it.view}
// handleEvent={this.handleEvent} />
// </div>
// })}
// </div>)
var views = app.views;
return _react2.default.createElement(
'div',
{ className: 'app' },
this.state.error ? _react2.default.createElement(_Alert2.default, { message: this.state.error }) : null,
views.map(function (it, i) {
return _react2.default.createElement(
'div',
{ key: it.pid + '_' + it.iid, id: it.pid + '_' + it.iid, className: 'view', style: { display: it.iid === app.iid ? 'block' : 'none' } },
_react2.default.createElement(TemplateView, (0, _extends3.default)({}, _this4.props, { pid: it.pid, app: app,
viewModel: app.viewModels[i].viewModel, view: it.view,
handleEvent: _this4.handleEvent }))
);
})
);
}
}]);
return TemplateProvider;
}(_react2.default.Component), _class3.propTypes = {
pid: _propTypes2.default.string,
sysid: _propTypes2.default.string,
mid: _propTypes2.default.string.isRequired,
id: _propTypes2.default.string
}, _temp2)) || _class2;
exports.default = TemplateProvider;
//# sourceMappingURL=TemplateProvider.js.map