dora-ui
Version:
A React.js Mobile UI Library
57 lines (47 loc) • 1.77 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import React from 'react';
import ReactDOM from 'react-dom';
import { isBrowser } from '../utils';
var Portal =
/*#__PURE__*/
function (_React$Component) {
_inherits(Portal, _React$Component);
function Portal(props) {
var _this;
_classCallCheck(this, Portal);
_this = _possibleConstructorReturn(this, _getPrototypeOf(Portal).call(this, props));
_defineProperty(_assertThisInitialized(_this), "defaultNode", void 0);
if (!props.node && isBrowser) {
_this.defaultNode = document.createElement('div');
document.body.appendChild(_this.defaultNode);
}
return _this;
}
_createClass(Portal, [{
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.defaultNode) {
document.body.removeChild(this.defaultNode);
this.defaultNode = undefined;
}
}
}, {
key: "render",
value: function render() {
if (!isBrowser) return null;
var _this$props = this.props,
children = _this$props.children,
node = _this$props.node;
var container = node || this.defaultNode;
return ReactDOM.createPortal(children, container);
}
}]);
return Portal;
}(React.Component);
export default Portal;