diff --git a/packages/fether-react/src/App/App.js b/packages/fether-react/src/App/App.js index 5eaac3ed1..b2db4ac93 100644 --- a/packages/fether-react/src/App/App.js +++ b/packages/fether-react/src/App/App.js @@ -19,6 +19,7 @@ import { version } from '../../package.json'; import i18n, { packageNS } from '../i18n'; import Accounts from '../Accounts'; import BackupAccount from '../BackupAccount'; +import DeleteAccount from '../DeleteAccount'; import Onboarding from '../Onboarding'; import * as postMessage from '../utils/postMessage'; import RequireParityVersion from '../RequireParityVersion'; @@ -178,6 +179,10 @@ class App extends Component { path='/backup/:accountAddress' component={BackupAccount} /> + { + const { + account: { address }, + parityStore: { api }, + history + } = this.props; + const { password } = this.state; + + event && event.preventDefault(); + + this.setState({ isLoading: true }); + + api.parity + .killAccount(address, password) + .then(() => { + history.push(`/accounts`); + }) + .catch(err => { + this.setState({ + message: err.text + ' Please check your password and try again.' + }); + this.setState({ isLoading: false }); + }); + }; + + deleteSignerAccount = () => { + const { + account: { address: currentAddress }, + history + } = this.props; + + localForage$(SIGNER_ACCOUNTS_LS_KEY).subscribe(async accounts => { + const removed = accounts.filter( + ({ address }) => address !== currentAddress + ); + + await localForage.setItem(SIGNER_ACCOUNTS_LS_KEY, removed); + + history.push(`/accounts`); + }); + }; + + handlePasswordChange = ({ target: { value } }) => { + this.setState({ password: value }); + }; + + render () { + const { + account: { name, address, type } + } = this.props; + + return ( + + + + {i18n.t(`${packageNS}:navigation.back`)} + + } + /> + + + {type === 'signer' + ? this.renderSignerAccount() + : this.renderParityAccount()} + + + + ); + } + + renderParityAccount () { + const { history } = this.props; + const { isLoading, message, password } = this.state; + + return ( + + + {i18n.t(`${packageNS}:account.delete.warning_parity_account`)} + + + + + + {i18n.t(`${packageNS}:account.delete.label_msg_password_unlock`)} + + + + + + {message} + + + + {i18n.t(`${packageNS}:navigation.back`)} + + + {i18n.t(`${packageNS}:account.delete.button_confirm`)} + + + + ); + } + + renderSignerAccount () { + const { history } = this.props; + + return ( + + + {i18n.t(`${packageNS}:account.delete.warning_signer_account`)} + + + + + + + {i18n.t(`${packageNS}:navigation.back`)} + + + {i18n.t(`${packageNS}:account.delete.button_confirm`)} + + + + ); + } +} + +export default DeleteAccount; diff --git a/packages/fether-react/src/DeleteAccount/index.js b/packages/fether-react/src/DeleteAccount/index.js new file mode 100644 index 000000000..4274cbfc9 --- /dev/null +++ b/packages/fether-react/src/DeleteAccount/index.js @@ -0,0 +1,8 @@ +// Copyright 2015-2019 Parity Technologies (UK) Ltd. +// This file is part of Parity. +// +// SPDX-License-Identifier: BSD-3-Clause + +import DeleteAccount from './DeleteAccount'; + +export default DeleteAccount; diff --git a/packages/fether-react/src/Tokens/Tokens.js b/packages/fether-react/src/Tokens/Tokens.js index c4c0cee38..bc6964a8e 100644 --- a/packages/fether-react/src/Tokens/Tokens.js +++ b/packages/fether-react/src/Tokens/Tokens.js @@ -50,6 +50,10 @@ class Tokens extends PureComponent { { name: i18n.t(`${packageNS}:tokens.tokens.menu_items.add_tokens`), onClick: () => history.push(`/whitelist/${address}`) + }, + { + name: i18n.t(`${packageNS}:tokens.tokens.menu_items.delete_account`), + onClick: () => history.push(`/delete/${address}`) } ]; diff --git a/packages/fether-react/src/i18n/locales/de.json b/packages/fether-react/src/i18n/locales/de.json index fd4aa3e22..7ed96f6b4 100644 --- a/packages/fether-react/src/i18n/locales/de.json +++ b/packages/fether-react/src/i18n/locales/de.json @@ -12,6 +12,13 @@ "msg4": "Wenn jemand Ihren geheimen Satz ergreift, kann er Ihr Konto belasten." } }, + "delete": { + "label_msg_password_unlock": "Entsperren Sie Ihr Konto, um es zu löschen:", + "label_password_unlock": "Passwort", + "button_confirm": "Löschen", + "warning_parity_account": "Beachten Sie, dass Ihr Konto und Ihr Cryptowährungen definitiv verloren gehen, wenn Sie kein Backup (über JSON oder über die Wiederherstellungssatz) erstellt haben!", + "warning_signer_account": "Das Konto wird aus Fether entfernt. Sie können es jedoch jederzeit wieder hinzufügen, indem Sie es erneut aus Parity Signer importieren." + }, "existing": { "no_name": "(kein Name}" }, @@ -198,7 +205,8 @@ "tokens": { "menu_items": { "backup_account": "Sicherungskonto", - "add_tokens": "Token hinzufügen" + "add_tokens": "Token hinzufügen", + "delete_account": "Konto löschen" } } }, diff --git a/packages/fether-react/src/i18n/locales/en.json b/packages/fether-react/src/i18n/locales/en.json index 91dd2f531..373b9bd13 100644 --- a/packages/fether-react/src/i18n/locales/en.json +++ b/packages/fether-react/src/i18n/locales/en.json @@ -20,6 +20,13 @@ "label_password_unlock": "Password", "button_confirm": "Confirm backup" }, + "delete": { + "label_msg_password_unlock": "Unlock your account to delete it:", + "label_password_unlock": "Password", + "button_confirm": "Delete", + "warning_parity_account": "Please note that if you haven't made any backup (via JSON or via recovery phrase), your account and its funds will be definitely lost!", + "warning_signer_account": "The account will be removed from Fether, but you can add it back anytime by importing it again from Parity Signer." + }, "import": { "error_msg_existing_address": "Account {{address}} already listed", "signer": { @@ -198,7 +205,8 @@ "tokens": { "menu_items": { "backup_account": "Backup Account", - "add_tokens": "Add Tokens" + "add_tokens": "Add Tokens", + "delete_account": "Delete Account" } } },
{i18n.t(`${packageNS}:account.delete.warning_parity_account`)}
+ {i18n.t(`${packageNS}:account.delete.label_msg_password_unlock`)} +
{message}
{i18n.t(`${packageNS}:account.delete.warning_signer_account`)}