import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import { styles } from './styles.scss'; import { registerTitleView, unregisterTitleView } from '/imports/utils/dom-utils'; const propTypes = { overlayClassName: PropTypes.string.isRequired, portalClassName: PropTypes.string.isRequired, contentLabel: PropTypes.string.isRequired, isOpen: PropTypes.bool.isRequired, }; const defaultProps = { className: styles.modal, overlayClassName: styles.overlay, portalClassName: styles.portal, contentLabel: 'Modal', isOpen: true, }; export default class ModalBase extends Component { componentDidMount() { registerTitleView(this.props.contentLabel); } componentWillUnmount() { unregisterTitleView(); } render() { if (!this.props.isOpen) return null; return ( { if (document.fullscreenElement && document.fullscreenElement.nodeName && document.fullscreenElement.nodeName.toLowerCase() === 'div') return document.fullscreenElement; else return document.body; }} > {this.props.children} ); } } ModalBase.propTypes = propTypes; ModalBase.defaultProps = defaultProps; export const withModalState = ComponentToWrap => class ModalStateWrapper extends Component { constructor(props) { super(props); this.state = { isOpen: true, }; this.hide = this.hide.bind(this); this.show = this.show.bind(this); } hide(cb = () => { }) { Promise.resolve(cb()) .then(() => this.setState({ isOpen: false })); } show(cb = () => { }) { Promise.resolve(cb()) .then(() => this.setState({ isOpen: true })); } render() { return (); } };