From a577ea26dc7181944fa30047cc9b49051cb444f3 Mon Sep 17 00:00:00 2001 From: Jon Kuperman Date: Fri, 16 Dec 2016 00:31:50 -0600 Subject: [PATCH] Escape key not closing add funds dialog --- js/about/preferences.js | 51 ++++++++++++++++++++++++++--------- js/components/modalOverlay.js | 31 +++++++++++++++++++-- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/js/about/preferences.js b/js/about/preferences.js index 15d9d7d074b..a3010695bae 100644 --- a/js/about/preferences.js +++ b/js/about/preferences.js @@ -474,12 +474,23 @@ class BitcoinDashboard extends ImmutableComponent { return
{ this.props.bitcoinOverlayVisible - ? + ? : null } { this.props.qrcodeOverlayVisible - ? + ? : null }
@@ -1297,27 +1308,47 @@ class PaymentsTab extends ImmutableComponent { return
{ this.enabled && this.props.addFundsOverlayVisible - ? + ? : null } { this.enabled && this.props.paymentHistoryOverlayVisible - ? + ? : null } { this.enabled && this.props.advancedSettingsOverlayVisible - ? + ? : null } { this.enabled && this.props.ledgerBackupOverlayVisible - ? + ? : null } { this.enabled && this.props.ledgerRecoveryOverlayVisible - ? + ? : null }
@@ -1889,11 +1920,7 @@ class AboutPreferences extends React.Component { setOverlayVisible (isVisible, overlayName) { let stateDiff = {} stateDiff[`${overlayName}OverlayVisible`] = isVisible - if (overlayName === 'addFunds' && isVisible === false) { - // Hide the child overlays when the parent is closed - stateDiff['bitcoinOverlayVisible'] = false - stateDiff['qrcodeOverlayVisible'] = false - } + this.setState(stateDiff) // Tell ledger when Add Funds overlay is closed if (isVisible === false && overlayName === 'addFunds') { diff --git a/js/components/modalOverlay.js b/js/components/modalOverlay.js index 0c810e86006..523fb4d394d 100644 --- a/js/components/modalOverlay.js +++ b/js/components/modalOverlay.js @@ -4,6 +4,7 @@ const React = require('react') const ImmutableComponent = require('./immutableComponent') +const KeyCodes = require('../../app/common/constants/keyCodes') /** * Represents a modal overlay @@ -13,6 +14,13 @@ var globalInstanceCounter = 0 var mountedInstances = [] class ModalOverlay extends ImmutableComponent { + constructor () { + super() + this.state = { + previousElement: null + } + this.onKeyDown = this.onKeyDown.bind(this) + } componentWillMount () { this.instanceId = globalInstanceCounter++ @@ -28,9 +36,18 @@ class ModalOverlay extends ImmutableComponent { mountedInstances.push(this) } + componentDidMount () { + this.setState({previousElement: document.activeElement}) + this.closeButton.focus() + } + componentWillUnmount () { let instId = this.instanceId + if (this.state.previousElement) { + this.state.previousElement.focus() + } + mountedInstances = mountedInstances.filter(function (inst) { return inst.instanceId !== instId }) @@ -42,12 +59,22 @@ class ModalOverlay extends ImmutableComponent { } } + onKeyDown (e) { + switch (e.keyCode) { + case KeyCodes.ESC: + // Stop propagation to make sure only the top modal closes + e.stopPropagation() + this.props.onEscape() + break + } + } + get dialogContent () { var close = null var button = null var title = null if (!this.props.emptyDialog) { - close = (this.props.onHide ?