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.
This commit is contained in:
Dan Finlay 2016-05-13 01:13:14 -07:00
parent f2676d1241
commit 041b5493dc
6 changed files with 52 additions and 17 deletions

View File

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

View File

@ -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() {

View File

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

View File

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

View File

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

View File

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