/** * NotificationModal options: * * show: whether to show notification or not, * type: the type of the notification. valid values are: 'default', 'error', 'warning', 'success' * msg: the notification content. could be a string or node (React component) * title: the notification title * timeout: timeout for the notification to fade out. if timeout == 0 then the notification is rendered until the user closes it * */ import React, {Component, PropTypes} from 'react'; import {connect} from 'react-redux'; import Button from 'react-bootstrap/lib/Button.js'; import i18n from 'nfvo-utils/i18n/i18n.js'; import Modal from 'nfvo-components/modal/Modal.jsx'; import SubmitErrorResponse from 'nfvo-components/SubmitErrorResponse.jsx'; import NotificationConstants from './NotificationConstants.js'; let typeClass = { 'default': 'primary', error: 'danger', warning: 'warning', success: 'success' }; const mapActionsToProps = (dispatch) => { return {onCloseClick: () => dispatch({type: NotificationConstants.NOTIFY_CLOSE})}; }; const mapStateToProps = ({notification}) => { let show = notification !== null && notification.title !== 'Conflict'; let mapResult = {show}; if (show) { mapResult = {show, ...notification}; } return mapResult; }; export class NotificationModal extends Component { static propTypes = { show: PropTypes.bool, type: PropTypes.oneOf(['default', 'error', 'warning', 'success']), title: PropTypes.string, msg: PropTypes.node, validationResponse: PropTypes.object, timeout: PropTypes.number }; static defaultProps = { show: false, type: 'default', title: '', msg: '', timeout: 0 }; state = {type: undefined}; componentWillReceiveProps(nextProps) { if (this.props.show !== nextProps.show && nextProps.show === false) { this.setState({type: this.props.type}); } else { this.setState({type: undefined}); } } componentDidUpdate() { if (this.props.timeout) { setTimeout(this.props.onCloseClick, this.props.timeout); } } render() { let {title, type, msg, show, validationResponse, onCloseClick} = this.props; if (!show) { type = this.state.type; } if (validationResponse) { msg = (); } return ( {title} {msg} ); } } export default connect(mapStateToProps, mapActionsToProps)(NotificationModal);