UNPKG

@nomios/web-uikit

Version:
82 lines (69 loc) 2 kB
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import ModalGlobalContext from './ModalGlobalContext'; class ModalGlobalProvider extends Component { constructor() { super(); _defineProperty(this, "state", { open: false, component: null, props: {}, providerValue: { openModal: undefined, closeModal: undefined } }); _defineProperty(this, "handleOpenModal", Modal => { this.setState({ open: true, props: Modal.props, component: Modal.type }); }); _defineProperty(this, "handleCloseModal", () => { this.setState({ open: false }); }); _defineProperty(this, "handleOnExited", () => { const { props: { onExited } } = this.state; onExited && onExited(); this.setState({ props: {}, component: null }); }); this.state.providerValue.openModal = this.handleOpenModal; this.state.providerValue.closeModal = this.handleCloseModal; } render() { return React.createElement(ModalGlobalContext.Provider, { value: this.state.providerValue }, React.createElement(Fragment, null, this.renderModal(), this.props.children)); } renderModal() { const { component: Modal, props, open } = this.state; const onRequestClose = props.onRequestClose || this.handleCloseModal; if (!Modal) { return null; } return React.createElement(Modal, Object.assign({}, props, { open: open, onRequestClose: onRequestClose, onExited: this.handleOnExited })); } } ModalGlobalProvider.propTypes = { children: PropTypes.node.isRequired }; export default ModalGlobalProvider;