@nomios/web-uikit
Version:
Nomios' living web UIKit
82 lines (69 loc) • 2 kB
JavaScript
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;