diff --git a/src/actions/AccountsActions.js b/src/actions/AccountsActions.js index 267cdb41..9e11e333 100644 --- a/src/actions/AccountsActions.js +++ b/src/actions/AccountsActions.js @@ -102,7 +102,7 @@ export const importAddress = ( type: ACCOUNT.CREATE, payload, }); - dispatch(LocalStorageActions.setImportedAccount(payload)); + LocalStorageActions.setImportedAccount(payload); dispatch({ type: NOTIFICATION.ADD, payload: { diff --git a/src/actions/LocalStorageActions.js b/src/actions/LocalStorageActions.js index d4e92466..bdde6335 100644 --- a/src/actions/LocalStorageActions.js +++ b/src/actions/LocalStorageActions.js @@ -323,8 +323,8 @@ export const setLocalCurrency = (): ThunkAction => ( storageUtils.set(TYPE, KEY_LOCAL_CURRENCY, JSON.stringify(localCurrency)); }; -export const setImportedAccount = (account: Account): ThunkAction => (): void => { - const prevImportedAccounts: ?string = JSON.parse(storageUtils.get(TYPE, KEY_IMPORTED_ACCOUNTS)); +export const setImportedAccount = (account: Account): void => { + const prevImportedAccounts: ?Array = getImportedAccounts(); let importedAccounts = [account]; if (prevImportedAccounts) { importedAccounts = importedAccounts.concat(prevImportedAccounts); @@ -332,10 +332,23 @@ export const setImportedAccount = (account: Account): ThunkAction => (): void => storageUtils.set(TYPE, KEY_IMPORTED_ACCOUNTS, JSON.stringify(importedAccounts)); }; -export const getImportedAccounts = (): Array => { +export const getImportedAccounts = (): ?Array => { const importedAccounts: ?string = storageUtils.get(TYPE, KEY_IMPORTED_ACCOUNTS); if (importedAccounts) { return JSON.parse(importedAccounts); } return importedAccounts; }; + +export const removeImportedAccounts = (device: TrezorDevice): void => { + const importedAccounts: ?Array = getImportedAccounts(); + if (!importedAccounts) return; + + const filteredImportedAccounts = importedAccounts.filter( + account => account.deviceState !== device.state + ); + storageUtils.remove(TYPE, KEY_IMPORTED_ACCOUNTS); + filteredImportedAccounts.forEach(account => { + setImportedAccount(account); + }); +}; diff --git a/src/services/LocalStorageService.js b/src/services/LocalStorageService.js index c5d9daf6..09b7ac5f 100644 --- a/src/services/LocalStorageService.js +++ b/src/services/LocalStorageService.js @@ -58,6 +58,10 @@ const LocalStorageService: Middleware = (api: MiddlewareAPI) => (next: Middlewar case CONNECT.FORGET: case CONNECT.FORGET_SINGLE: case CONNECT.FORGET_SILENT: + api.dispatch(LocalStorageActions.save()); + LocalStorageActions.removeImportedAccounts(action.device); + break; + case CONNECT.RECEIVE_WALLET_TYPE: case DEVICE.CHANGED: case DEVICE.DISCONNECT: