diff --git a/src/components/html/Modal/ModalPortal.jsx b/src/components/html/Modal/ModalPortal.jsx new file mode 100644 index 0000000..0d93074 --- /dev/null +++ b/src/components/html/Modal/ModalPortal.jsx @@ -0,0 +1,35 @@ +import React from "react"; +import * as ReactDOM from "react-dom"; + +export default class ModalPortal extends React.Component { + constructor(props) { + super(props); + this.portalElement = null; + } + + componentDidMount() { + var p = document.createElement('div'); + p.id = this.props.portalId; + document.body.appendChild(p); + + this.portalElement = p; + + this.componentDidUpdate(); + } + + componentWillUnmount() { + document.body.removeChild(this.portalElement); + ReactDOM.unmountComponentAtNode(this.portalElement) + } + + componentDidUpdate() { + ReactDOM.render( + {this.props.children}, + this.portalElement + ); + } + + render() { + return null; + } +} diff --git a/src/components/html/Modal/MountedModal.jsx b/src/components/html/Modal/MountedModal.jsx new file mode 100644 index 0000000..6b5d489 --- /dev/null +++ b/src/components/html/Modal/MountedModal.jsx @@ -0,0 +1,19 @@ +import React from "react"; +import ModalPortal from "./ModalPortal"; +import Modal from "./Modal"; + +export default class MountedModal extends React.Component { + render() { + if (this.props.show === false) { + return null; + } + + return + + {this.props.children} + + +
+ + } +}