yqcloud-ui
Version:
An enterprise-class UI design language and React-based implementation
116 lines (90 loc) • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var ContainerRender = function (_React$Component) {
(0, _inherits3['default'])(ContainerRender, _React$Component);
function ContainerRender() {
var _temp, _this, _ret;
(0, _classCallCheck3['default'])(this, ContainerRender);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.removeContainer = function () {
if (_this.container) {
_reactDom2['default'].unmountComponentAtNode(_this.container);
_this.container.parentNode.removeChild(_this.container);
_this.container = null;
}
}, _this.renderComponent = function (props, ready) {
var _this$props = _this.props,
visible = _this$props.visible,
getComponent = _this$props.getComponent,
forceRender = _this$props.forceRender,
getContainer = _this$props.getContainer,
parent = _this$props.parent;
if (visible || parent._component || forceRender) {
if (!_this.container) {
_this.container = getContainer();
}
_reactDom2['default'].unstable_renderSubtreeIntoContainer(parent, getComponent(props), _this.container, function callback() {
if (ready) {
ready.call(this);
}
});
}
}, _temp), (0, _possibleConstructorReturn3['default'])(_this, _ret);
}
ContainerRender.prototype.componentDidMount = function componentDidMount() {
if (this.props.autoMount) {
this.renderComponent();
}
};
ContainerRender.prototype.componentDidUpdate = function componentDidUpdate() {
if (this.props.autoMount) {
this.renderComponent();
}
};
ContainerRender.prototype.componentWillUnmount = function componentWillUnmount() {
if (this.props.autoDestroy) {
this.removeContainer();
}
};
ContainerRender.prototype.render = function render() {
return this.props.children({
renderComponent: this.renderComponent,
removeContainer: this.removeContainer
});
};
return ContainerRender;
}(_react2['default'].Component);
ContainerRender.propTypes = {
autoMount: _propTypes2['default'].bool,
autoDestroy: _propTypes2['default'].bool,
visible: _propTypes2['default'].bool,
forceRender: _propTypes2['default'].bool,
parent: _propTypes2['default'].any,
getComponent: _propTypes2['default'].func.isRequired,
getContainer: _propTypes2['default'].func.isRequired,
children: _propTypes2['default'].func.isRequired
};
ContainerRender.defaultProps = {
autoMount: true,
autoDestroy: true,
forceRender: false
};
exports['default'] = ContainerRender;
module.exports = exports['default'];