1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

account removal is working

This commit is contained in:
brunobar79 2018-07-11 00:20:40 -04:00
parent b9c2994d24
commit 523cf9ad33
6 changed files with 79 additions and 15 deletions

View File

@ -85,6 +85,30 @@ class PreferencesController {
this.store.updateState({ identities })
}
/**
* Removes an address from state
*
* @param {string} address A hex address
* @returns {string} the address that was removed
*/
removeAddress (address) {
const identities = this.store.getState().identities
if (!identities[address]) {
throw new Error(`${address} can't be deleted cause it was not found`)
}
delete identities[address]
this.store.updateState({ identities })
// If the selected account is no longer valid,
// select an arbitrary other account:
if (address === this.getSelectedAddress()) {
const selected = Object.keys(identities)[0]
this.setSelectedAddress(selected)
}
return address
}
/**
* Adds addresses to the identities object without removing identities
*

View File

@ -354,6 +354,7 @@ module.exports = class MetamaskController extends EventEmitter {
verifySeedPhrase: nodeify(this.verifySeedPhrase, this),
clearSeedWordCache: this.clearSeedWordCache.bind(this),
resetAccount: nodeify(this.resetAccount, this),
removeAccount: nodeify(this.removeAccount, this),
importAccountWithStrategy: nodeify(this.importAccountWithStrategy, this),
// trezor
@ -587,7 +588,8 @@ module.exports = class MetamaskController extends EventEmitter {
}
})
this.preferencesController.setAccountLabel(trezorAccount, `TREZOR #${index + 1}`)
this.preferencesController.setAccountLabel(trezorAccount, `TREZOR #${parseInt(index, 10) + 1}`)
this.preferencesController.setSelectedAddress(trezorAccount)
const { identities } = this.preferencesController.store.getState()
return { ...keyState, identities }
}
@ -705,6 +707,18 @@ module.exports = class MetamaskController extends EventEmitter {
return selectedAddress
}
/**
* Removes a "Loose" account from state.
*
* @param {string[]} address A hex address
*
*/
async removeAccount (address) {
this.preferencesController.removeAddress(address)
return address
}
/**
* Imports an account with the specified import strategy.
* These are defined in app/scripts/account-import-strategies

View File

@ -83,6 +83,7 @@ var actions = {
NEW_ACCOUNT_SCREEN: 'NEW_ACCOUNT_SCREEN',
navigateToNewAccountScreen,
resetAccount,
removeAccount,
showNewVaultSeed: showNewVaultSeed,
showInfoPage: showInfoPage,
CLOSE_WELCOME_SCREEN: 'CLOSE_WELCOME_SCREEN',
@ -535,6 +536,26 @@ function resetAccount () {
}
}
function removeAccount (address) {
return dispatch => {
dispatch(actions.showLoadingIndication())
return new Promise((resolve, reject) => {
background.removeAccount(address, (err, account) => {
dispatch(actions.hideLoadingIndication())
if (err) {
dispatch(actions.displayWarning(err.message))
return reject(err)
}
log.info('Account removed: ' + account)
dispatch(actions.showAccountsPage())
resolve()
})
})
}
}
function addNewKeyring (type, opts) {
return (dispatch) => {
dispatch(actions.showLoadingIndication())

View File

@ -68,7 +68,7 @@ function mapDispatchToProps (dispatch) {
dispatch(actions.hideSidebar())
dispatch(actions.toggleAccountMenu())
},
showForgetAccountConfirmationModal: (address) => {
showRemoveAccountConfirmationModal: (address) => {
return dispatch(actions.showModal({ name: 'CONFIRM_FORGET_ACCOUNT', address }))
},
}
@ -156,7 +156,8 @@ AccountMenu.prototype.renderAccounts = function () {
} = this.props
const accountOrder = keyrings.reduce((list, keyring) => list.concat(keyring.accounts), [])
return accountOrder.map((address) => {
return accountOrder.filter(address => !!identities[address]).map((address) => {
const identity = identities[address]
const isSelected = identity.address === selectedAddress
@ -191,25 +192,24 @@ AccountMenu.prototype.renderAccounts = function () {
]),
this.renderKeyringType(keyring),
this.renderForgetAccount(keyring, identity.address),
this.renderRemoveAccount(keyring, identity.address),
],
)
})
}
AccountMenu.prototype.renderForgetAccount = function (keyring, address) {
AccountMenu.prototype.renderRemoveAccount = function (keyring, address) {
// Any account that's not form the HD wallet can be forgotten
const type = keyring.type
const isForgetable = type !== 'HD Key Tree'
return isForgetable ? h('a.forget-account-icon', { onClick: (e) => this.forgetAccount(e, address) }, '') : null
const isRemovable = type !== 'HD Key Tree'
return isRemovable ? h('a.forget-account-icon', { onClick: (e) => this.removeAccount(e, address) }, '') : null
}
AccountMenu.prototype.forgetAccount = function (e, address) {
AccountMenu.prototype.removeAccount = function (e, address) {
e.preventDefault()
e.stopPropagation()
const { showForgetAccountConfirmationModal } = this.props
console.log('should forget address: ', address)
showForgetAccountConfirmationModal(address)
const { showRemoveAccountConfirmationModal } = this.props
showRemoveAccountConfirmationModal(address)
}
AccountMenu.prototype.renderKeyringType = function (keyring) {

View File

@ -3,6 +3,12 @@ import ConfirmRemoveAccount from './confirm-remove-account.component'
const { hideModal, removeAccount } = require('../../../actions')
const mapStateToProps = state => {
return {
address: state.appState.modal.modalState.props.address,
}
}
const mapDispatchToProps = dispatch => {
return {
hideModal: () => dispatch(hideModal()),
@ -10,4 +16,4 @@ const mapDispatchToProps = dispatch => {
}
}
export default connect(null, mapDispatchToProps)(ConfirmRemoveAccount)
export default connect(mapStateToProps, mapDispatchToProps)(ConfirmRemoveAccount)

View File

@ -1,5 +1,4 @@
const React = require('react')
const Component = React.Component
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const connect = require('react-redux').connect
@ -385,7 +384,7 @@ Modal.prototype.render = function () {
backdropStyle: BACKDROPSTYLE,
closeOnClick: !disableBackdropClick,
},
React.cloneElement(children, {...this.props.modalState.props}, null),
children,
)
}