diff options
author | Dan Finlay <dan@danfinlay.com> | 2016-05-13 16:13:14 +0800 |
---|---|---|
committer | Dan Finlay <dan@danfinlay.com> | 2016-05-13 16:24:05 +0800 |
commit | 041b5493dc43c9f8b69dc5a1dde4b319638618a7 (patch) | |
tree | d74812d939398896cc275bbf4080faa26aa35e95 | |
parent | f2676d12413e379f3876e8e36b73478c66ed6ad0 (diff) | |
download | tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar.gz tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar.bz2 tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar.lz tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar.xz tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.tar.zst tangerine-wallet-browser-041b5493dc43c9f8b69dc5a1dde4b319638618a7.zip |
Streamlined some transition logic
Fixes #122
Had used multiple actions for some transitions, which would lead to brief intermediary states.
Now making a few actions much more explicit about what they route to, so there is less intermediary logic, and we can transition confidently to the correct view.
-rw-r--r-- | app/scripts/lib/idStore.js | 4 | ||||
-rw-r--r-- | test/unit/actions/restore_vault_test.js | 8 | ||||
-rw-r--r-- | test/unit/actions/set_selected_account_test.js | 21 | ||||
-rw-r--r-- | ui/app/account-detail.js | 4 | ||||
-rw-r--r-- | ui/app/actions.js | 24 | ||||
-rw-r--r-- | ui/app/reducers/metamask.js | 8 |
6 files changed, 52 insertions, 17 deletions
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js index b8d825d8b..6d3d0c0aa 100644 --- a/app/scripts/lib/idStore.js +++ b/app/scripts/lib/idStore.js @@ -105,14 +105,14 @@ IdentityStore.prototype.getSelectedAddress = function(){ return configManager.getSelectedAccount() } -IdentityStore.prototype.setSelectedAddress = function(address){ +IdentityStore.prototype.setSelectedAddress = function(address, cb){ if (!address) { var addresses = this._getAddresses() address = addresses[0] } configManager.setSelectedAccount(address) - this._didUpdate() + if (cb) return cb(null, address) } IdentityStore.prototype.getNetwork = function(tries) { diff --git a/test/unit/actions/restore_vault_test.js b/test/unit/actions/restore_vault_test.js index 5675028b1..609f5429e 100644 --- a/test/unit/actions/restore_vault_test.js +++ b/test/unit/actions/restore_vault_test.js @@ -21,7 +21,13 @@ describe('#recoverFromSeed(password, seed)', function() { // stub out account manager actions._setAccountManager({ - recoverFromSeed(pw, seed, cb) { cb(null, [{}, {}]) }, + recoverFromSeed(pw, seed, cb) { + cb(null, { + identities: { + foo: 'bar' + } + }) + }, }) it('sets metamask.isUnlocked to true', function() { diff --git a/test/unit/actions/set_selected_account_test.js b/test/unit/actions/set_selected_account_test.js index 0487bc5f0..69eb11e47 100644 --- a/test/unit/actions/set_selected_account_test.js +++ b/test/unit/actions/set_selected_account_test.js @@ -26,3 +26,24 @@ describe('SET_SELECTED_ACCOUNT', function() { assert.equal(resultingState.appState.activeAddress, action.value) }); }); + +describe('SHOW_ACCOUNT_DETAIL', function() { + it('updates metamask state', function() { + var initialState = { + metamask: { + selectedAccount: 'foo' + } + } + freeze(initialState) + + const action = { + type: actions.SHOW_ACCOUNT_DETAIL, + value: 'bar', + } + freeze(action) + + var resultingState = reducers(initialState, action) + assert.equal(resultingState.metamask.selectedAccount, action.value) + assert.equal(resultingState.metamask.selectedAddress, action.value) + }) +}) diff --git a/ui/app/account-detail.js b/ui/app/account-detail.js index a71e85da8..5c33c3421 100644 --- a/ui/app/account-detail.js +++ b/ui/app/account-detail.js @@ -62,7 +62,7 @@ AccountDetailScreen.prototype.render = function() { h('.identicon-wrapper.flex-column.flex-center.select-none', [ h(Identicon, { diameter: 62, - address: account.address + address: selected, }), ]), @@ -90,7 +90,7 @@ AccountDetailScreen.prototype.render = function() { style: { 'line-height': 16, }, - }, addressSummary(account.address)), + }, addressSummary(selected)), h('i.fa.fa-download.fa-md.cursor-pointer.color-orange', { onClick: () => this.requestAccountExport(account.address), diff --git a/ui/app/actions.js b/ui/app/actions.js index 45af35e67..f489eede7 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -114,7 +114,7 @@ function tryUnlockMetamask(password) { if (err) { dispatch(this.unlockFailed()) } else { - dispatch(this.unlockMetamask()) + dispatch(this.unlockMetamask(selectedAccount)) } }) } @@ -133,12 +133,12 @@ function recoverFromSeed(password, seed) { return (dispatch) => { // dispatch(this.createNewVaultInProgress()) dispatch(this.showLoadingIndication()) - _accountManager.recoverFromSeed(password, seed, (err, selectedAccount) => { + _accountManager.recoverFromSeed(password, seed, (err, metamaskState) => { dispatch(this.hideLoadingIndication()) if (err) return dispatch(this.displayWarning(err.message)) - dispatch(this.goHome()) - dispatch(this.unlockMetamask()) + var account = Object.keys(metamaskState.identities)[0] + dispatch(this.unlockMetamask(account)) }) } } @@ -271,9 +271,10 @@ function unlockFailed() { } } -function unlockMetamask() { +function unlockMetamask(account) { return { type: this.UNLOCK_METAMASK, + value: account, } } @@ -297,11 +298,13 @@ function lockMetamask() { function showAccountDetail(address) { return (dispatch) => { - _accountManager.setSelectedAddress(address) - - dispatch({ - type: this.SHOW_ACCOUNT_DETAIL, - value: address, + dispatch(this.showLoadingIndication()) + _accountManager.setSelectedAddress(address, (err, address) => { + dispatch(this.hideLoadingIndication()) + dispatch({ + type: this.SHOW_ACCOUNT_DETAIL, + value: address, + }) }) } } @@ -323,7 +326,6 @@ function confirmSeedWords() { return (dispatch) => { dispatch(this.showLoadingIndication()) _accountManager.clearSeedWordCache((err, account) => { - dispatch(this.clearSeedWordCache(account)) console.log('Seed word cache cleared. ' + account) dispatch(this.showAccountDetail(account)) }) diff --git a/ui/app/reducers/metamask.js b/ui/app/reducers/metamask.js index 8bf5c8aae..8628e84d2 100644 --- a/ui/app/reducers/metamask.js +++ b/ui/app/reducers/metamask.js @@ -29,6 +29,7 @@ function reduceMetamask(state, action) { return extend(metamaskState, { isUnlocked: true, isInitialized: true, + selectedAccount: action.value, }) case actions.LOCK_METAMASK: @@ -85,9 +86,14 @@ function reduceMetamask(state, action) { return newState case actions.SHOW_ACCOUNT_DETAIL: - return extend(metamaskState, { + const newState = extend(metamaskState, { + isUnlocked: true, + isInitialized: true, selectedAccount: action.value, + selectedAddress: action.value, }) + delete newState.seedWords + return newState default: return metamaskState |