summaryrefslogtreecommitdiffstats
path: root/src/react/Portal.js
blob: 90e06751b4188ac6f8afa9e89d2050a73e6e1520 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import React from 'react';
import PropTypes from 'prop-types';
import ReactDOM from 'react-dom';

class Portal extends React.Component {        
	componentDidMount() {
		this.renderPortal();
	}
    
	componentDidUpdate() {
		this.renderPortal();
	}
    
	componentWillUnmount() {
		if (this.defaultNode) {
			document.body.removeChild(this.defaultNode);
		}
		this.defaultNode = null;
		this.portal = null;
	}
     
	renderPortal() {
		if (!this.defaultNode) {
			this.defaultNode = document.createElement('div');
			this.defaultNode.className = 'onap-sdc-portal';
			document.body.appendChild(this.defaultNode);
		}
    
		let children = this.props.children;        
		if (typeof this.props.children.type === 'function') {
			children = React.cloneElement(this.props.children);
		}
        /**
         * Change this to ReactDOM.CreatePortal after upgrading to React 16
         */
		this.portal = ReactDOM.unstable_renderSubtreeIntoContainer(
          this,
          children,
          this.defaultNode
        );
	}
	render() {
		return null;
	}
        
}

Portal.propTypes = {
	children: PropTypes.node.isRequired
};

export default Portal;