mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-27 15:54:39 +00:00
37 lines
792 B
JavaScript
37 lines
792 B
JavaScript
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import PropTypes from 'prop-types';
|
|
import { canUseDOM } from '../../utils/dom';
|
|
|
|
class BodyPortal extends React.Component {
|
|
componentWillUnmount() {
|
|
if (this.defaultNode) {
|
|
document.body.removeChild(this.defaultNode);
|
|
}
|
|
this.defaultNode = null;
|
|
}
|
|
|
|
render() {
|
|
if (!canUseDOM) {
|
|
return null;
|
|
}
|
|
|
|
if (!this.props.node && !this.defaultNode) {
|
|
this.defaultNode = document.createElement('div');
|
|
document.body.appendChild(this.defaultNode);
|
|
}
|
|
|
|
return ReactDOM.createPortal(
|
|
this.props.children,
|
|
this.props.node || this.defaultNode,
|
|
);
|
|
}
|
|
}
|
|
|
|
BodyPortal.propTypes = {
|
|
children: PropTypes.node.isRequired,
|
|
node: PropTypes.any,
|
|
};
|
|
|
|
export default BodyPortal;
|