@lyra/components
Version:
Basic UX components
54 lines (41 loc) • 1.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Portal = undefined;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactDom = require('react-dom');
var _Portal = require('./Portal.css');
var _Portal2 = _interopRequireDefault(_Portal);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
class Portal extends _react2.default.Component {
componentWillUnmount() {
if (this.node) {
document.body.removeChild(this.node);
}
this.node = null;
}
render() {
if (!canUseDOM) {
return null;
}
if (!this.node) {
this.node = document.createElement('div');
document.body.appendChild(this.node);
}
return (0, _reactDom.createPortal)(_react2.default.createElement(
_react2.default.Fragment,
null,
this.props.children,
_react2.default.createElement('span', { tabIndex: 0, className: _Portal2.default.captureTabFocus })
), this.node);
}
}
exports.Portal = Portal;
Portal.propTypes = {
children: _propTypes2.default.node.isRequired
};