diff --git a/src/renderer/shared/components/Confirm/Confirm.js b/src/renderer/shared/components/Confirm/Confirm.js
index b749cf14f..244045c77 100644
--- a/src/renderer/shared/components/Confirm/Confirm.js
+++ b/src/renderer/shared/components/Confirm/Confirm.js
@@ -47,6 +47,7 @@ export default class Confirm extends React.PureComponent {
className={classNames(styles.confirm, className)}
renderHeader={this.renderTitle}
renderFooter={this.renderFooter}
+ handleClose={onCancel}
>
{children}
diff --git a/src/renderer/shared/components/Modal/Modal.js b/src/renderer/shared/components/Modal/Modal.js
index 30eb24f05..74ff342aa 100644
--- a/src/renderer/shared/components/Modal/Modal.js
+++ b/src/renderer/shared/components/Modal/Modal.js
@@ -4,6 +4,7 @@ import { string, func, node } from 'prop-types';
import { noop } from 'lodash';
import Portal from '../Portal';
+import OutSideClick from './OnClickOutside';
import styles from './Modal.scss';
export default class Modal extends React.PureComponent {
@@ -11,26 +12,44 @@ export default class Modal extends React.PureComponent {
className: string,
children: node,
renderHeader: func,
- renderFooter: func
+ renderFooter: func,
+ handleClose: func
};
static defaultProps = {
className: null,
children: null,
renderHeader: noop,
- renderFooter: noop
+ renderFooter: noop,
+ handleClose: noop
};
+ componentDidMount() {
+ document.addEventListener('keydown', this.escFunction);
+ }
+
+ componentWillUnmount() {
+ document.removeEventListener('keydown', this.escFunction);
+ }
+
render() {
return (
-
- {this.props.renderHeader()}
- {this.props.children}
- {this.props.renderFooter()}
-
+
+
+ {this.props.renderHeader()}
+ {this.props.children}
+ {this.props.renderFooter()}
+
+
);
}
+
+ escFunction = (event) => {
+ if (event.keyCode === 27) {
+ this.props.handleClose();
+ }
+ };
}
diff --git a/src/renderer/shared/components/Modal/OnClickOutside.js b/src/renderer/shared/components/Modal/OnClickOutside.js
new file mode 100644
index 000000000..d7b1b3037
--- /dev/null
+++ b/src/renderer/shared/components/Modal/OnClickOutside.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import { func, node } from 'prop-types';
+
+export default class OnClickOutside extends React.PureComponent {
+ static propTypes = {
+ onClickOutside: func,
+ children: node
+ };
+
+ static defaultProps = {
+ onClickOutside: null,
+ children: null
+ };
+
+ componentDidMount() {
+ document.addEventListener('mousedown', this.handleClickOutside);
+ }
+
+ componentWillUnmount() {
+ document.removeEventListener('mousedown', this.handleClickOutside);
+ }
+
+ render() {
+ return
{this.props.children}
;
+ }
+
+ handleClickOutside = (event) => {
+ if (
+ this.wrapperRef &&
+ !this.wrapperRef.contains(event.target) &&
+ !event.target.outerHTML.toLowerCase().includes('toast')
+ ) {
+ this.props.onClickOutside();
+ }
+ };
+
+ setWrapperRef = (el) => {
+ this.wrapperRef = el;
+ };
+}
diff --git a/src/renderer/shared/components/NewWallet/NewWallet/NewWallet.js b/src/renderer/shared/components/NewWallet/NewWallet/NewWallet.js
index bd43439a9..2f8f69688 100644
--- a/src/renderer/shared/components/NewWallet/NewWallet/NewWallet.js
+++ b/src/renderer/shared/components/NewWallet/NewWallet/NewWallet.js
@@ -38,6 +38,7 @@ export default class NewWallet extends React.PureComponent {
className={classNames(styles.confirm, className)}
renderHeader={this.renderTitle}
renderFooter={this.renderFooter}
+ handleClose={onCancel}
>