yqcloud-ui
Version:
An enterprise-class UI design language and React-based implementation
85 lines (59 loc) • 2.36 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 Portal = function (_React$Component) {
(0, _inherits3['default'])(Portal, _React$Component);
function Portal() {
(0, _classCallCheck3['default'])(this, Portal);
return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));
}
Portal.prototype.componentDidMount = function componentDidMount() {
this.createContainer();
};
Portal.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {
var didUpdate = this.props.didUpdate;
if (didUpdate) {
didUpdate(prevProps);
}
};
Portal.prototype.componentWillUnmount = function componentWillUnmount() {
this.removeContainer();
};
Portal.prototype.createContainer = function createContainer() {
this._container = this.props.getContainer();
this.forceUpdate();
};
Portal.prototype.removeContainer = function removeContainer() {
if (this._container) {
this._container.parentNode.removeChild(this._container);
}
};
Portal.prototype.render = function render() {
if (this._container) {
return _reactDom2['default'].createPortal(this.props.children, this._container);
}
return null;
};
return Portal;
}(_react2['default'].Component);
Portal.propTypes = {
getContainer: _propTypes2['default'].func.isRequired,
children: _propTypes2['default'].node.isRequired,
didUpdate: _propTypes2['default'].func
};
exports['default'] = Portal;
module.exports = exports['default'];