import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; class Portal extends Component { static propTypes = { children: PropTypes.node, className: PropTypes.string, container: PropTypes.node, } static defaultProps = { className: '', } componentDidMount() { this._renderOverlay(); } componentWillReceiveProps(nextProps) { if (this._overlayTarget && nextProps.container !== this.props.container) { this._portalContainerNode.removeChild(this._overlayTarget); this._portalContainerNode = getContainer(nextProps.container); this._portalContainerNode.appendChild(this._overlayTarget); } } componentDidUpdate() { this._renderOverlay(); } componentWillUnmount() { this._unrenderOverlay(); this._unmountOverlayTarget(); } getMountNode() { return this._overlayTarget; } getOverlayDOMNode() { if (!this.isMounted()) { // eslint-disable-line throw new Error('getOverlayDOMNode(): A component must be mounted to have a DOM node.'); } if (this._overlayInstance) { if (this._overlayInstance.getWrappedDOMNode) { return this._overlayInstance.getWrappedDOMNode(); } return ReactDOM.findDOMNode(this._overlayInstance); } return null; } _getOverlay() { if (!this.props.children) return null; return