mk-meta-engine
Version:
元数据化引擎,在mk-app-loader实现的应用隔离基础上,实现可以用json元数据描述界面模型,并提供了action、reducer的基础函数和monkeyKing组件.
155 lines (116 loc) • 4.75 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
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);
exports.default = wrapper;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _monkeyKing = require('./monkeyKing');
var _monkeyKing2 = _interopRequireDefault(_monkeyKing);
var _config = require('./config');
var _config2 = _interopRequireDefault(_config);
var _mkUtils = require('mk-utils');
var _mkUtils2 = _interopRequireDefault(_mkUtils);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function wrapper(option) {
return function (WrappedComponent) {
return function (_Component) {
(0, _inherits3.default)(internal, _Component);
function internal(props) {
(0, _classCallCheck3.default)(this, internal);
var _this = (0, _possibleConstructorReturn3.default)(this, (internal.__proto__ || (0, _getPrototypeOf2.default)(internal)).call(this, props));
_this.state = { hasError: false };
return _this;
}
(0, _createClass3.default)(internal, [{
key: 'componentWillMount',
value: function componentWillMount() {
this.props.componentWillMount && this.props.componentWillMount();
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
this.props.initView && this.props.initView(this); //兼容以前版本
this.props.componentDidMount && this.props.componentDidMount();
}
}, {
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps, nextState) {
if (this.props.shouldComponentUpdate && this.props.shouldComponentUpdate(nextProps, nextState) === true) return true;
if (nextState.hasError != this.state.hasError) {
return true;
}
for (var o in this.props) {
if (this.props[o] != nextProps[o]) {
return true;
}
}
return false;
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (this.state.hasError) {
this.setState({ hasError: false, error: undefined });
}
this.props.componentWillReceiveProps && this.props.componentWillReceiveProps(nextProps);
}
}, {
key: 'componentWillUpdate',
value: function componentWillUpdate(nextProps, nextState) {
this.props.componentWillUpdate && this.props.componentWillUpdate(nextProps, nextState);
}
}, {
key: 'componentDidCatch',
value: function componentDidCatch(error, info) {
_mkUtils2.default.exception.error(error);
this.setState({ hasError: true, error: error });
this.props.componentDidCatch && this.props.componentDidCatch(error, info);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.props.unmount && this.props.unmount(); //兼容以前版本
this.props.componentWillUnmount && this.props.componentWillUnmount();
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate() {
this.props.componentDidUpdate && this.props.componentDidUpdate();
}
}, {
key: 'render',
value: function render() {
if (this.state.hasError) {
return _react2.default.createElement(
'div',
{ style: { color: 'red' } },
this.state.error && this.state.error.message
);
}
if (this.props.notRender === true || this.props._notRender === true) return null;
if (!WrappedComponent) return null;
if (!this.props.payload || !this.props.payload.get('data')) return null;
if (this.props.payload.getIn(['data', '_notRender']) === true) return null;
return _react2.default.createElement(WrappedComponent, (0, _extends3.default)({}, this.props, { monkeyKing: _monkeyKing2.default }));
}
}]);
return internal;
}(_react.Component);
};
}
module.exports = exports['default'];