From 1025eb3b4f90c2b909fe9d238cebba878c8ce2db Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 25 Apr 2016 14:14:34 -0700 Subject: [PATCH] Persist selected account When selecting an account, we now persist the selection to the `configManager`, so the selection can be restored when re-unlocking Metamask. Also found the bug where `rawtestrpc` was still being used as a default, and fixed it! --- app/scripts/lib/config-manager.js | 11 +++++++++++ app/scripts/lib/idStore.js | 17 +++++++---------- ui/app/actions.js | 18 +++++++++++------- ui/app/components/account-panel.js | 6 ++---- ui/app/reducers/app.js | 4 +--- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js index c79dc7a8f..102327c2d 100644 --- a/app/scripts/lib/config-manager.js +++ b/app/scripts/lib/config-manager.js @@ -102,6 +102,17 @@ ConfigManager.prototype.setWallet = function(wallet) { this.setData(data) } +ConfigManager.prototype.getSelectedAccount = function() { + var config = this.getConfig() + return config.selectedAccount +} + +ConfigManager.prototype.setSelectedAccount = function(address) { + var config = this.getConfig() + config.selectedAccount = address + this.setConfig(config) +} + ConfigManager.prototype.getWallet = function() { return this.migrator.getData().wallet } diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js index 525fdae30..92d0f9668 100644 --- a/app/scripts/lib/idStore.js +++ b/app/scripts/lib/idStore.js @@ -9,7 +9,7 @@ const extend = require('xtend') const createId = require('web3-provider-engine/util/random-id') const autoFaucet = require('./auto-faucet') const configManager = require('./config-manager-singleton') -const DEFAULT_RPC = 'https://rawtestrpc.metamask.io/' +const DEFAULT_RPC = 'https://testrpc.metamask.io/' module.exports = IdentityStore @@ -72,8 +72,7 @@ IdentityStore.prototype.setStore = function(store){ IdentityStore.prototype.clearSeedWordCache = function(cb) { configManager.setShowSeedWords(false) - var accounts = this._loadIdentities() - cb(null, accounts) + cb(null, configManager.getSelectedAccount()) } IdentityStore.prototype.getState = function(){ @@ -85,6 +84,7 @@ IdentityStore.prototype.getState = function(){ seedWords: seedWords, unconfTxs: configManager.unconfirmedTxs(), transactions: configManager.getTxList(), + selectedAddress: configManager.getSelectedAccount(), })) } @@ -97,7 +97,7 @@ IdentityStore.prototype.getSeedIfUnlocked = function() { } IdentityStore.prototype.getSelectedAddress = function(){ - return this._currentState.selectedAddress + return configManager.getSelectedAccount() } IdentityStore.prototype.setSelectedAddress = function(address){ @@ -106,7 +106,7 @@ IdentityStore.prototype.setSelectedAddress = function(address){ address = addresses[0] } - this._currentState.selectedAddress = address + configManager.setSelectedAccount(address) this._didUpdate() } @@ -120,8 +120,8 @@ IdentityStore.prototype.submitPassword = function(password, cb){ this._tryPassword(password, (err) => { if (err) return cb(err) // load identities before returning... - var accounts = this._loadIdentities() - cb(null, accounts) + this._loadIdentities() + cb(null, configManager.getSelectedAccount()) }) } @@ -213,7 +213,6 @@ IdentityStore.prototype._loadIdentities = function(){ if (!this._isUnlocked()) throw new Error('not unlocked') var addresses = this._getAddresses() - var accountArray = [] addresses.forEach((address, i) => { // // add to ethStore this._ethStore.addAccount(address) @@ -225,10 +224,8 @@ IdentityStore.prototype._loadIdentities = function(){ mayBeFauceting: this._mayBeFauceting(i), } this._currentState.identities[address] = identity - accountArray.push(identity) }) this._didUpdate() - return accountArray } // mayBeFauceting diff --git a/ui/app/actions.js b/ui/app/actions.js index e2d81883f..a2106ea85 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -105,13 +105,13 @@ function goHome() { function tryUnlockMetamask(password) { return (dispatch) => { dispatch(this.unlockInProgress()) - _accountManager.submitPassword(password, (err, accounts) => { + _accountManager.submitPassword(password, (err, selectedAccount) => { dispatch(this.hideLoadingIndication()) if (err) { dispatch(this.unlockFailed()) } else { dispatch(this.unlockMetamask()) - dispatch(this.showAccountDetail(accounts[0].address)) + dispatch(this.showAccountDetail(selectedAccount)) } }) } @@ -130,7 +130,7 @@ function recoverFromSeed(password, seed) { return (dispatch) => { // dispatch(this.createNewVaultInProgress()) dispatch(this.showLoadingIndication()) - _accountManager.recoverFromSeed(password, seed, (err, accounts) => { + _accountManager.recoverFromSeed(password, seed, (err, selectedAccount) => { if (err) { dispatch(this.hideLoadingIndication()) var message = err.message @@ -138,7 +138,7 @@ function recoverFromSeed(password, seed) { } dispatch(this.unlockMetamask()) - dispatch(this.showAccountDetail(accounts[0].address)) + dispatch(this.showAccountDetail(selectedAccount)) dispatch(this.hideLoadingIndication()) }) } @@ -281,9 +281,13 @@ function lockMetamask() { } function showAccountDetail(address) { - return { - type: this.SHOW_ACCOUNT_DETAIL, - value: address, + return (dispatch) => { + _accountManager.setSelectedAddress(address) + + dispatch({ + type: this.SHOW_ACCOUNT_DETAIL, + value: address, + }) } } diff --git a/ui/app/components/account-panel.js b/ui/app/components/account-panel.js index 9de29cd91..9fda2ebfc 100644 --- a/ui/app/components/account-panel.js +++ b/ui/app/components/account-panel.js @@ -25,7 +25,7 @@ AccountPanel.prototype.render = function() { style: { flex: '1 0 auto', }, - onClick: state.onShowDetail && state.onShowDetail.bind(null, identity.address), + onClick: (event) => state.onShowDetail(identity.address, event), }, [ // account identicon @@ -53,9 +53,7 @@ AccountPanel.prototype.render = function() { // navigate to account detail !state.onShowDetail ? null : - h('.arrow-right.cursor-pointer', { - onClick: state.onShowDetail && state.onShowDetail.bind(null, identity.address), - }, [ + h('.arrow-right.cursor-pointer', [ h('i.fa.fa-chevron-right.fa-lg'), ]), ]) diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js index 131b434e9..f522e6042 100644 --- a/ui/app/reducers/app.js +++ b/ui/app/reducers/app.js @@ -7,12 +7,10 @@ module.exports = reduceApp function reduceApp(state, action) { // clone and defaults - var accounts = valuesFor(state.metamask.accounts) - var account = accounts.length ? valuesFor(state.metamask.accounts)[0].address : null var defaultView = { name: 'accountDetail', detailView: null, - context: account, + context: state.metamask.selectedAccount, } // confirm seed words