From 7c8b1a7cee93e732db37645842da8b12e10a0bf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Aaberg?= Date: Thu, 1 Sep 2016 15:41:04 +0200 Subject: [PATCH] DIG-12309 Only trigger onBlur when leaving the whole component --- src/account-selector.js | 49 ++++++++++++++++++++++++++------------- src/account-suggestion.js | 4 ++-- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/account-selector.js b/src/account-selector.js index 32489a7cc8..c5483177ab 100644 --- a/src/account-selector.js +++ b/src/account-selector.js @@ -46,7 +46,8 @@ export default class AccountSelector extends Component { showResetButton: false, selectedAccount: null, value: '', - filteredAccounts: this.filterAccounts(accounts, '') + filteredAccounts: this.filterAccounts(accounts, ''), + accountSelectedFromDropdown: false, }; } @@ -89,7 +90,7 @@ export default class AccountSelector extends Component { break; case KeyCode.ENTER: evt.preventDefault(); - this.onAccountSelect(this.state.selectedAccount); + this.onAccountSelect(this.state.selectedAccount, false); break; case KeyCode.TAB: this.onInputTab(evt); @@ -107,7 +108,7 @@ export default class AccountSelector extends Component { showAccountSuggestions: false, }, () => { if (selectedAccount) { - this.onAccountSelect(selectedAccount); + this.onAccountSelect(selectedAccount, false); } }); } @@ -124,14 +125,14 @@ export default class AccountSelector extends Component { onBlur() { this.removeGlobalEventListeners(); - const {selectedAccount, value} = this.state; + const {selectedAccount, value, accountSelectedFromDropdown, resetField} = this.state; const {onBlur} = this.props; let blurReturn = value; if (selectedAccount) { const inputMatchesValidAccountName = value.toLowerCase() === selectedAccount.name.toLowerCase(); const inputMatchesValidAccountNumber = value === selectedAccount.accountNumber; if (inputMatchesValidAccountName || inputMatchesValidAccountNumber) { - this.onAccountSelect(selectedAccount); + this.onAccountSelect(selectedAccount, false); blurReturn = selectedAccount.accountNumber; } else { @@ -140,6 +141,22 @@ export default class AccountSelector extends Component { }); } } + + // Prevent blur if an account is selected from the dropdown or if the reset button is pressed + if (accountSelectedFromDropdown || resetField) { + this._accountInput.focus(); + this.setState({ + accountSelectedFromDropdown: false, + showAccountSuggestions: resetField, + resetField: false, + }); + return; + } + + this.setState({ + showAccountSuggestions: false, + }); + onBlur(blurReturn); } @@ -158,19 +175,18 @@ export default class AccountSelector extends Component { }, () => onChange(value)); } - onAccountSelect(account, focus) { + onAccountSelect(account, fromDropdown) { const {accounts, onChange, onAccountSelected} = this.props; const {accountNumber} = account; const filteredAccounts = this.filterAccounts(accounts, accountNumber); - if (focus) { - this._accountInput.focus(); - } + this.setState({ filteredAccounts, value: account.name, selectedAccount: account, showAccountSuggestions: false, showResetButton: true, + accountSelectedFromDropdown: fromDropdown, }, () => { onChange(accountNumber); onAccountSelected(accountNumber); @@ -200,13 +216,13 @@ export default class AccountSelector extends Component { } } - reset(focus) { + reset() { + // The inputfield looses focus when we click the reset button, so we need to give it back + this._accountInput.focus(); + const {onChange, onAccountSelected} = this.props; - const state = {...this.getBlankState(), showAccountSuggestions: focus}; + const state = {...this.getBlankState(), showAccountSuggestions: true, resetField: true }; this.setState(state, () => { - if (focus) { - this._accountInput.focus(); - } onChange(state.selectedAccount); onAccountSelected(state.selectedAccount); }); @@ -292,12 +308,13 @@ export default class AccountSelector extends Component { onBlur={this.onBlur} aria-autocomplete="inline" aria-invalid={ariaInvalid} + autoComplete="off" /> {showResetButton ?