diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 78be9d7b6..ccbf4ca64 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -740,10 +740,14 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {Promise} */ async forgetDevice (deviceName, clearAccounts) { - const keyring = await this.getKeyringForDevice(deviceName) - keyring.forgetDevice(clearAccounts) - return true + const accountsToForget = await keyring.forgetDevice(clearAccounts) + for (const acc of accountsToForget) { + const accToLower = acc.toLowerCase() + await this.preferencesController.removeAddress(accToLower) + await this.accountTracker.removeAccount([accToLower]) + } + return accountsToForget } /** diff --git a/old-ui/app/app.js b/old-ui/app/app.js index 8a348c9a5..4201a35bd 100644 --- a/old-ui/app/app.js +++ b/old-ui/app/app.js @@ -32,7 +32,7 @@ const ConfirmAddTokenScreen = require('./components/confirm-add-token') const RemoveTokenScreen = require('./remove-token') const AddSuggestedTokenScreen = require('./add-suggested-token') const Import = require('./accounts/import') -const ForgetDevice = require('./components/connect-hardware/forget-screen') +const ForgetDeviceScreen = require('./components/connect-hardware/forget-screen') import ConnectHardwareForm from './components/connect-hardware/index' const InfoScreen = require('./info') const AppBar = require('./components/app-bar') @@ -287,7 +287,7 @@ App.prototype.renderPrimary = function () { case 'forget-device': log.debug('rendering forget device screen') - return h(ForgetDevice, {key: 'forget-device'}) + return h(ForgetDeviceScreen, {key: 'forget-device'}) case 'hardware-wallets-menu': log.debug('rendering hardware wallet menu screen') diff --git a/old-ui/app/components/confirm.js b/old-ui/app/components/confirm.js index e17607584..985a6e6c4 100644 --- a/old-ui/app/components/confirm.js +++ b/old-ui/app/components/confirm.js @@ -5,13 +5,13 @@ import { connect } from 'react-redux' class ConfirmScreen extends Component { static propTypes = { subtitle: PropTypes.string.isRequired, - additionalData: PropTypes.func, + renderAdditionalData: PropTypes.func, question: PropTypes.string.isRequired, withDescription: PropTypes.bool, description: PropTypes.string, onCancelClick: PropTypes.func.isRequired, - onNoClick: PropTypes.bool.isRequired, - onYesClick: PropTypes.bool.isRequired, + onNoClick: PropTypes.func.isRequired, + onYesClick: PropTypes.func.isRequired, } render () { @@ -40,7 +40,7 @@ class ConfirmScreen extends Component {
{this.props.description}
) : null} - {this.props.additionalData} + {this.props.renderAdditionalData()}

this.props.dispatch(actions.showConnectHWWalletPage())} - additionalData={() => { - // todo: checkbox + renderAdditionalData={() => { return ( - Remove imported associated accounts - ) +

+ { + const clearAccountsPrev = this.state.clearAccounts + const clearAccountsNew = !clearAccountsPrev + this.setState({clearAccounts: clearAccountsNew}) + }} + /> + Remove associated accounts from the list of imported accounts in the wallet +
+ ) }} onNoClick={() => this.props.dispatch(actions.showConnectHWWalletPage())} onYesClick={() => { - this.props.forgetDevice(this.props.device) + this.props.dispatch(actions.forgetDevice(this.props.device, this.state.clearAccounts)) .then(_ => { this.setState({ error: null, @@ -27,13 +47,23 @@ class ForgetDevice extends ConfirmScreen { accounts: [], unlocked: false, }) - }).catch(e => { + }) + .catch(e => { this.setState({ error: (e.message || e.toString()) }) }) + .finally(() => { + this.props.dispatch(actions.goHome()) + }) }} /> ) } } -module.exports = connect()(ForgetDevice) +const mapStateToProps = (state) => { + return { + device: state.appState.currentView.device, + } +} + +module.exports = connect(mapStateToProps)(ForgetDeviceScreen) diff --git a/package-lock.json b/package-lock.json index 3a6332de7..1a49298db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10514,7 +10514,7 @@ } }, "eth-ledger-bridge-keyring": { - "version": "github:vbaranov/eth-ledger-bridge-keyring#4de923c0559bebe4f2e92465a21e911ed9ec2ee8", + "version": "github:vbaranov/eth-ledger-bridge-keyring#c36b34d131a585274e8c7bb69ff985bba4816624", "from": "github:vbaranov/eth-ledger-bridge-keyring#0.1.0-clear-accounts-flag", "requires": { "eth-sig-util": "^1.4.2", @@ -10935,7 +10935,7 @@ } }, "eth-trezor-keyring": { - "version": "github:vbaranov/eth-trezor-keyring#3525a09d99a141afab0d298f3b5a8250e881bba1", + "version": "github:vbaranov/eth-trezor-keyring#ec3df8a71ff8733e525d5609faeb5b711678dd11", "from": "github:vbaranov/eth-trezor-keyring#0.2.0--clear-accounts-flag", "requires": { "eth-sig-util": "^1.4.2", diff --git a/ui/app/actions.js b/ui/app/actions.js index c2eca1111..3f229ee0f 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -749,12 +749,12 @@ function checkHardwareStatus (deviceName, hdPath) { } } -function forgetDevice (deviceName) { +function forgetDevice (deviceName, clearAccounts) { log.debug(`background.forgetDevice`, deviceName) return (dispatch, getState) => { dispatch(actions.showLoadingIndication()) return new Promise((resolve, reject) => { - background.forgetDevice(deviceName, (err, response) => { + background.forgetDevice(deviceName, clearAccounts, (err, accountsToForget) => { if (err) { log.error(err) dispatch(actions.displayWarning(err.message)) @@ -764,7 +764,7 @@ function forgetDevice (deviceName) { dispatch(actions.hideLoadingIndication()) forceUpdateMetamaskState(dispatch) - return resolve() + return resolve(accountsToForget) }) }) }