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!
This commit is contained in:
Dan Finlay 2016-04-25 14:14:34 -07:00
parent 88ed546a9a
commit 1025eb3b4f
5 changed files with 32 additions and 24 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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,
})
}
}

View File

@ -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'),
]),
])

View File

@ -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