// Copyright 2015-2017 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import keycode from 'keycode'; import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import Button from '../Button'; import styles from './modal.css'; import CloseImage from '@parity/shared/assets/images/dapps/close.svg'; export default class Modal extends Component { static propTypes = { actions: PropTypes.array, children: PropTypes.node, header: PropTypes.node, secondary: PropTypes.bool, onClose: PropTypes.func.isRequired, onConfirm: PropTypes.func }; static defaultProps = { actions: null, secondary: false }; render () { const { children, actions, header, secondary } = this.props; const modalClasses = [ styles.modal ]; if (secondary) { modalClasses.push(styles.secondary); } return (
{ header }
{ children }
{ actions ? this.renderActions(actions) : null }
); } renderActions (actions) { return (
{ actions.map((action) => { let onClick = () => {}; switch (action.type) { case 'confirm': onClick = this.handleConfirm; break; case 'close': onClick = this.handleClose; break; } return (
); } stopEvent = (event) => { event.stopPropagation(); event.preventDefault(); return false; } handleKeyPress = (event) => { const codeName = keycode(event); if (codeName === 'esc') { return this.handleClose(); } return event; } handleCloseKeyPress = (event) => { const codeName = keycode(event); if (codeName === 'enter') { return this.handleClose(); } return event; } handleSetRef = (containerRef) => { // Focus after the modal is open setTimeout(() => { const element = ReactDOM.findDOMNode(containerRef); element && element.focus(); }, 100); } handleConfirm = () => { this.props.onConfirm && this.props.onConfirm(); } handleClose = () => { this.props.onClose(); } }