From 9bb455e9a92c9c8945a8bfb0bfa2c455b016c679 Mon Sep 17 00:00:00 2001 From: Inokentii Mazhara Date: Tue, 24 Sep 2024 22:23:47 +0300 Subject: [PATCH] TW-1542: Apply design for settings menu (#1199) * TW-1555 Update some design and fix some bugs * TW-1555 Make some modals close after their backdrop is clicked * TW-1542 Resolve merge conflicts * TW-1542 Revert harmful changes * TW-1542 Remove unused components * TW-1542 Implement new Settings menu design * TW-1542 Remove some unused translations * TW-1542 Fix find-deadcode errors * TW-1542 Add changes from comments * TW-1542 Move localStorage clearing to frontend * TW-1542 Update a label * TW-1555 Some more bugfixes * TW-1555 Remove some commented out code * TW-1555 Refactor setting classes Co-authored-by: Alex * TW-1555 Fix prettier problem * TW-1555 Agree styles for app content wrapper and action modals * TW-1542 Change a label * TW-1542 Fix font size for page header --------- Co-authored-by: Alex --- e2e/src/page-objects/index.ts | 2 - .../page-objects/pages/reveal-secrets.page.ts | 16 - public/_locales/de/messages.json | 29 -- public/_locales/en/messages.json | 64 ++-- public/_locales/en_GB/messages.json | 26 -- public/_locales/fr/messages.json | 26 -- public/_locales/ja/messages.json | 26 -- public/_locales/ko/messages.json | 26 -- public/_locales/pt/messages.json | 29 -- public/_locales/ru/messages.json | 3 - public/_locales/tr/messages.json | 29 -- public/_locales/uk/messages.json | 28 +- public/_locales/zh_CN/messages.json | 23 -- public/_locales/zh_TW/messages.json | 26 -- .../SettingsCell.tsx} | 17 +- src/app/atoms/SettingsCellGroup.tsx | 20 ++ src/app/icons/additional.svg | 6 - src/app/icons/apps.svg | 15 - src/app/icons/base/additional.svg | 6 + src/app/icons/base/addressbook.svg | 6 + src/app/icons/base/browse.svg | 4 +- src/app/icons/base/exit.svg | 7 + src/app/icons/base/info.svg | 6 + src/app/icons/base/link.svg | 6 + src/app/icons/base/refresh.svg | 6 + src/app/icons/canny.svg | 19 - src/app/icons/helpcrunch.svg | 17 - src/app/icons/monochrome/extension.svg | 8 - src/app/icons/monochrome/help.svg | 10 - src/app/icons/monochrome/key.svg | 9 - src/app/icons/monochrome/people.svg | 8 - src/app/icons/monochrome/sticker.svg | 9 - src/app/icons/monochrome/sync.svg | 10 - src/app/layouts/PageLayout/DefaultHeader.tsx | 4 +- src/app/pages/AccountSettings/index.tsx | 72 ++-- src/app/pages/Settings/Settings.selectors.ts | 7 +- src/app/pages/Settings/Settings.tsx | 325 ++++++++---------- .../pages/Settings/reset-extension-modal.tsx | 88 +++++ .../templates/DAppSettings/DAppSettings.tsx | 2 +- .../HelpAndCommunity/ResourceLink.tsx | 32 -- src/app/templates/HelpAndCommunity/index.tsx | 99 ------ .../templates/HelpAndCommunity/selectors.ts | 5 - .../RevealSecrets/PasswordForRevealField.tsx | 73 ---- .../RevealSecrets/RevealPrivateKeys.tsx | 120 ------- .../RevealSecrets/RevealSecrets.selectors.ts | 6 - .../RevealSecrets/RevealSeedPhrase.tsx | 71 ---- .../templates/RevealSecrets/SecretField.tsx | 67 ---- src/app/templates/RevealSecrets/index.ts | 2 - src/lib/temple/back/actions.ts | 4 + src/lib/temple/back/main.ts | 6 + src/lib/temple/back/vault/index.ts | 6 + src/lib/temple/back/vault/vault.test.ts | 18 + src/lib/temple/front/client.ts | 14 +- src/lib/temple/types.ts | 19 +- src/lib/ui/utils.ts | 9 - src/temple/front/index.ts | 1 - src/temple/front/ready/index.ts | 2 - yarn.lock | 22 +- 58 files changed, 448 insertions(+), 1168 deletions(-) delete mode 100644 e2e/src/page-objects/pages/reveal-secrets.page.ts rename src/app/{pages/AccountSettings/settings-cell.tsx => atoms/SettingsCell.tsx} (71%) create mode 100644 src/app/atoms/SettingsCellGroup.tsx delete mode 100644 src/app/icons/additional.svg delete mode 100644 src/app/icons/apps.svg create mode 100644 src/app/icons/base/additional.svg create mode 100644 src/app/icons/base/addressbook.svg create mode 100644 src/app/icons/base/exit.svg create mode 100644 src/app/icons/base/info.svg create mode 100644 src/app/icons/base/link.svg create mode 100644 src/app/icons/base/refresh.svg delete mode 100644 src/app/icons/canny.svg delete mode 100644 src/app/icons/helpcrunch.svg delete mode 100644 src/app/icons/monochrome/extension.svg delete mode 100644 src/app/icons/monochrome/help.svg delete mode 100644 src/app/icons/monochrome/key.svg delete mode 100644 src/app/icons/monochrome/people.svg delete mode 100644 src/app/icons/monochrome/sticker.svg delete mode 100644 src/app/icons/monochrome/sync.svg create mode 100644 src/app/pages/Settings/reset-extension-modal.tsx delete mode 100644 src/app/templates/HelpAndCommunity/ResourceLink.tsx delete mode 100644 src/app/templates/HelpAndCommunity/index.tsx delete mode 100644 src/app/templates/HelpAndCommunity/selectors.ts delete mode 100644 src/app/templates/RevealSecrets/PasswordForRevealField.tsx delete mode 100644 src/app/templates/RevealSecrets/RevealPrivateKeys.tsx delete mode 100644 src/app/templates/RevealSecrets/RevealSecrets.selectors.ts delete mode 100644 src/app/templates/RevealSecrets/RevealSeedPhrase.tsx delete mode 100644 src/app/templates/RevealSecrets/SecretField.tsx delete mode 100644 src/app/templates/RevealSecrets/index.ts diff --git a/e2e/src/page-objects/index.ts b/e2e/src/page-objects/index.ts index 874df2410..17c6913b1 100644 --- a/e2e/src/page-objects/index.ts +++ b/e2e/src/page-objects/index.ts @@ -18,7 +18,6 @@ import { InternalConfirmationPage } from './pages/internal-confirmation.page'; import { ManualBackupModalPage } from './pages/modal/manual-backup-modal.page'; import { NewsletterModalPage } from './pages/modal/newsletter-modal.page'; import { OnRumModalPage } from './pages/modal/on-rum-modal.page'; -import { RevealSecretsPage } from './pages/reveal-secrets.page'; import { SendPage } from './pages/send.page'; import { SettingsPage } from './pages/settings.page'; import { setWalletPage } from './pages/setWalletPassword.page'; @@ -30,7 +29,6 @@ export const Pages = { ImportExistingWallet: new ImportExistingWalletPage(), SetWallet: new setWalletPage(), Settings: new SettingsPage(), - RevealSecrets: new RevealSecretsPage(), UnlockScreen: new UnlockScreenPage(), DelegateTab: new DelegateTab(), DelegateForm: new DelegateFormPage(), diff --git a/e2e/src/page-objects/pages/reveal-secrets.page.ts b/e2e/src/page-objects/pages/reveal-secrets.page.ts deleted file mode 100644 index addfabbe1..000000000 --- a/e2e/src/page-objects/pages/reveal-secrets.page.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { RevealSecretsSelectors } from 'src/app/templates/RevealSecrets/RevealSecrets.selectors'; - -import { Page } from '../../classes/page.class'; -import { createPageElement } from '../../utils/search.utils'; - -export class RevealSecretsPage extends Page { - revealButton = createPageElement(RevealSecretsSelectors.RevealButton); - revealPasswordField = createPageElement(RevealSecretsSelectors.RevealPasswordInput); - revealSecretsProtectedMask = createPageElement(RevealSecretsSelectors.RevealSecretsProtectedMask); - revealSecretsValue = createPageElement(RevealSecretsSelectors.RevealSecretsValue); - - async isVisible() { - await this.revealButton.waitForDisplayed(); - await this.revealPasswordField.waitForDisplayed(); - } -} diff --git a/public/_locales/de/messages.json b/public/_locales/de/messages.json index aa432b03d..8787f2f01 100644 --- a/public/_locales/de/messages.json +++ b/public/_locales/de/messages.json @@ -34,10 +34,6 @@ } } }, - "authorizedDApps": { - "message": "Autorisierte DApps", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "Klicken Sie auf das X-Symbol, um die Berechtigungen zurückzusetzen." }, @@ -647,38 +643,19 @@ "revealPrivateKey": { "message": "Privaten Schlüssel freigeben" }, - "revealPrivateKeyDescription": { - "message": "Auch bekannt als „Exportkonto“, zeigt den privaten Schlüssel für Ihr ausgewähltes Konto an." - }, "revealSeedPhrase": { "message": "Seed-Phrase freigeben" }, - "revealSeedPhraseDescription": { - "message": "Auch als \"Export-Wallet\" bekannt, Sie benötigen diese Seed-Phrase möglicherweise, um auf Ihre Wallet und Konten auf anderen Geräten zuzugreifen." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "In diesem Abschnitt können Sie die Möglichkeit zur Interaktion mit dezentralen Anwendungen aktivieren, die Temple Wallet unterstützen." - }, - "networksDescription": { - "message": "In diesem Abschnitt können Sie benutzerdefinierte Tezos-Netzwerke hinzufügen oder löschen.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Konto entfernen" }, "removeAccountDescription": { "message": "Verwenden Sie diesen Abschnitt, um Ihr ausgewähltes Konto zu entfernen. Nur importierte Konten können entfernt werden." }, - "about": { - "message": "Über" - }, - "aboutDescription": { - "message": "Verwenden Sie diesen Abschnitt, um Metainformationen zu Temple Wallet anzuzeigen." - }, "unlockWallet": { "message": "Die Wallet entsperren" }, @@ -1274,9 +1251,6 @@ "generalSettings": { "message": "Allgemein" }, - "generalSettingsDescription": { - "message": "Hier können Sie die Spracheinstellungen und den Anzeigemodus verwalten." - }, "swapNoun": { "message": "Wechseln" }, @@ -1895,9 +1869,6 @@ "addressBook": { "message": "Adressbuch" }, - "addressBookDescription": { - "message": "Fügen Sie Ihre Kontakte hinzu, entfernen und verwalten Sie sie." - }, "addNewContact": { "message": "Neuer Kontakt" }, diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json index 7c21e0c4b..e6d42f6e0 100644 --- a/public/_locales/en/messages.json +++ b/public/_locales/en/messages.json @@ -51,15 +51,9 @@ } } }, - "authorizedDApps": { - "message": "Authorized DApps", - "description": "DApps = Decentralized Applications" - }, - "advancedFeatures": { - "message": "Advanced Features" - }, - "advancedFeaturesDescription": { - "message": "In this section you can customize additional Temple extension features" + "connectedDApps": { + "message": "Connected Dapps", + "description": "Dapps = Decentralized Applications" }, "clickIconToResetPermissions": { "message": "Click on the X icon to reset permissions." @@ -703,6 +697,18 @@ "resetExtension": { "message": "Reset Extension" }, + "resetExtensionModalTitle": { + "message": "Reset Extension?" + }, + "resetExtensionModalDescription": { + "message": "Resetting will delete wallets, accounts and erase all data. Ensure your Seed Phrases and Private Keys are backed up to avoid permanent loss and recover access to assets later." + }, + "resetPasswordInputLabel": { + "message": "Enter the password to confirm reset" + }, + "reset": { + "message": "Reset" + }, "resetExtensionConfirmation": { "message": "Are you sure you want to reset the Temple Wallet?\nAs a result, all your data will be deleted." }, @@ -948,29 +954,16 @@ "revealPrivateKey": { "message": "Reveal Private Key" }, - "revealPrivateKeyDescription": { - "message": "Also known as \"Export Account\", reveals private key for your selected account." - }, "revealPrivateKeyPasswordLabel": { "message": "Enter your password to reveal private key" }, "revealSeedPhrase": { "message": "Reveal Seed Phrase" }, - "revealSeedPhraseDescription": { - "message": "Also known as \"Export Wallet\", you may need this seed phrase to access your wallet and accounts on other devices." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "In this section you can enable ability to interact with decentralized applications that support Temple Wallet." - }, - "networksDescription": { - "message": "In this section you can add or delete custom Tezos networks.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Remove Account" }, @@ -980,8 +973,8 @@ "accountsManagement": { "message": "Accounts management" }, - "accountsManagementDescription": { - "message": "Use this section to create, edit, and delete accounts." + "securityAndPrivacy": { + "message": "Security & Privacy" }, "editAccount": { "message": "Edit Account" @@ -1026,15 +1019,15 @@ "selectNetworkToReveal": { "message": "Select Network to reveal" }, - "about": { - "message": "About" + "advancedFeatures": { + "message": "Advanced Features" + }, + "aboutAndSupport": { + "message": "About & Support" }, "info": { "message": "Info" }, - "aboutDescription": { - "message": "Use this section to view meta info about Temple Wallet." - }, "unlockWallet": { "message": "Unlock the Wallet" }, @@ -1815,9 +1808,6 @@ "generalSettings": { "message": "General" }, - "generalSettingsDescription": { - "message": "Here you can manage languages preferences and display mode." - }, "swapNoun": { "message": "Swap" }, @@ -2588,9 +2578,6 @@ "addressBook": { "message": "Address Book" }, - "addressBookDescription": { - "message": "Add, remove and manage your contacts." - }, "addNewContact": { "message": "New contact" }, @@ -3206,11 +3193,8 @@ "sync": { "message": "Sync" }, - "synchronization": { - "message": "Synchronization" - }, - "synchronizationSettingsDescription": { - "message": "Sync with Mobile Temple Wallet." + "templeSync": { + "message": "Temple Sync" }, "syncSettingsTitle": { "message": "Sync with Mobile Temple Wallet" diff --git a/public/_locales/en_GB/messages.json b/public/_locales/en_GB/messages.json index 57a2fba8f..43e1d270b 100644 --- a/public/_locales/en_GB/messages.json +++ b/public/_locales/en_GB/messages.json @@ -34,10 +34,6 @@ } } }, - "authorizedDApps": { - "message": "Authorized DApps", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "Click on the X icon to reset permissions." }, @@ -642,38 +638,19 @@ "revealPrivateKey": { "message": "Reveal Private Key" }, - "revealPrivateKeyDescription": { - "message": "Also known as \"Export Account\", reveals private key for your selected account." - }, "revealSeedPhrase": { "message": "Reveal Seed Phrase" }, - "revealSeedPhraseDescription": { - "message": "Also known as \"Export Wallet\", you may need this seed phrase to access your wallet and accounts on other devices." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "In this section you can enable ability to interact with decentralized applications that support Temple Wallet." - }, - "networksDescription": { - "message": "In this section you can add or delete custom Tezos networks.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Remove Account" }, "removeAccountDescription": { "message": "Use this section to remove your selected account. Only imported accounts can be removed." }, - "about": { - "message": "About" - }, - "aboutDescription": { - "message": "Use this section to view meta info about Temple Wallet." - }, "unlockWallet": { "message": "Unlock the Wallet" }, @@ -1248,9 +1225,6 @@ "generalSettings": { "message": "General" }, - "generalSettingsDescription": { - "message": "Here you can manage languages preferences and display mode." - }, "swapNoun": { "message": "Swap" }, diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json index 628436c3e..d89713c56 100644 --- a/public/_locales/fr/messages.json +++ b/public/_locales/fr/messages.json @@ -31,10 +31,6 @@ } } }, - "authorizedDApps": { - "message": "Applications décentralisées autorisées", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "Cliquez sur l'icône X pour réinitialiser les permissions." }, @@ -611,38 +607,19 @@ "revealPrivateKey": { "message": "Révéler la clé privée" }, - "revealPrivateKeyDescription": { - "message": "Connu aussi comme « Exporter le compte », révèle la clé privée pour votre compte sélectionné." - }, "revealSeedPhrase": { "message": "Révéler la phrase mnémonique" }, - "revealSeedPhraseDescription": { - "message": "Connu aussi comme « Exporter le compte », vous pourriez avoir besoin de cette phrase mnémonique pour accéder à votre portefeuille et vos comptes sur d'autres appareils." - }, "dApps": { "message": "Applications décentralisées", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "Dans cette section, vous pouvez activer la possibilité d'interagir avec les applications décentralisées qui prennent en charge le portefeuille Temple." - }, - "networksDescription": { - "message": "Dans cette section, vous pouvez ajouter ou supprimer des réseaux Tezos personnalisés.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Retirer le compte" }, "removeAccountDescription": { "message": "Utilisez cette section pour retirer votre compte sélectionné. Seuls les comptes importés peuvent être retirés." }, - "about": { - "message": "À propos" - }, - "aboutDescription": { - "message": "Utilisez cette section pour afficher les méta-informations concernant le portefeuille Temple." - }, "unlockWallet": { "message": "Déverrouiller le portefeuille" }, @@ -1211,9 +1188,6 @@ "generalSettings": { "message": "Général" }, - "generalSettingsDescription": { - "message": "Vous pouvez gérer ici les préférences de langue et le mode d'affichage." - }, "swapNoun": { "message": "Échanger" }, diff --git a/public/_locales/ja/messages.json b/public/_locales/ja/messages.json index 284d8bc03..b0930a8a1 100644 --- a/public/_locales/ja/messages.json +++ b/public/_locales/ja/messages.json @@ -31,10 +31,6 @@ } } }, - "authorizedDApps": { - "message": "認証済みDApps", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "Xアイコンをクリックして権限をリセットします。" }, @@ -607,38 +603,19 @@ "revealPrivateKey": { "message": "秘密鍵を表示" }, - "revealPrivateKeyDescription": { - "message": "「アカウントのエクスポート」としても知られ、選択したアカウントの秘密鍵を表示します。" - }, "revealSeedPhrase": { "message": "シードフレーズを表示" }, - "revealSeedPhraseDescription": { - "message": "「ウォレットのエクスポート」としても知られ、他のデバイスでウォレットやアカウントにアクセスするには、このシードフレーズが必要な場合があります。" - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "このセクションでは、テンプルウォレットをサポートする分散型アプリケーションとのインタラクションを有効にすることができます。" - }, - "networksDescription": { - "message": "このセクションでは、カスタムテゾスネットワークの追加や削除を行うことができます。", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "アカウントを削除" }, "removeAccountDescription": { "message": "このセクションを使用して、選択したアカウントを削除します。インポートしたアカウントのみ削除することができます。" }, - "about": { - "message": "概要" - }, - "aboutDescription": { - "message": "テンプルウォレットのメタ情報を表示するには、このセクションを使用します。" - }, "unlockWallet": { "message": "ウォレットをアンロック" }, @@ -1198,9 +1175,6 @@ "generalSettings": { "message": "一般" }, - "generalSettingsDescription": { - "message": "ここでは、言語設定や表示モードを管理することができます。" - }, "swapNoun": { "message": "スワップ" }, diff --git a/public/_locales/ko/messages.json b/public/_locales/ko/messages.json index 73841bd05..8af374146 100644 --- a/public/_locales/ko/messages.json +++ b/public/_locales/ko/messages.json @@ -31,10 +31,6 @@ } } }, - "authorizedDApps": { - "message": "인증된 분산 앱", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "X 아이콘을 클릭하여 접근 권한을 초기화하세요." }, @@ -607,38 +603,19 @@ "revealPrivateKey": { "message": "비공개 키 공개" }, - "revealPrivateKeyDescription": { - "message": "\"계정 내보내기\"라고도 하는데, 선택한 계정의 비공개 키가 공개됩니다" - }, "revealSeedPhrase": { "message": "비밀 문구 공개" }, - "revealSeedPhraseDescription": { - "message": "\"지갑 내보내기\"라고도 하는데, 다른 기기에서 지갑 및 계정에 액세스 하려면 이 비밀 문구가 있어야 합니다." - }, "dApps": { "message": "분산 앱", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "이 섹션에서 타노스 지갑을 지원하는 분산 애플리케이션과 상호 소통하는 기능을 활성화할 수 있습니다." - }, - "networksDescription": { - "message": "이 섹션에서 맞춤형 테조스 네트워크를 추가하거나 삭제할 수 있습니다.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "계정 제거" }, "removeAccountDescription": { "message": "이 섹션을 활용하여 선택한 계정을 제거하세요. 불러온 계정만 제거할 수 있습니다." }, - "about": { - "message": "정보" - }, - "aboutDescription": { - "message": "이 섹션을 활용하여 타노스 지갑에 관한 메타 징보를 확인하세요." - }, "unlockWallet": { "message": "지갑 잠금 해제" }, @@ -1198,9 +1175,6 @@ "generalSettings": { "message": "일반" }, - "generalSettingsDescription": { - "message": "여기에서 선호하는 언어와 디스플레이 모드를 관리할 수 있습니다." - }, "swapNoun": { "message": "스왑" }, diff --git a/public/_locales/pt/messages.json b/public/_locales/pt/messages.json index 0e5622b01..0b017bd75 100644 --- a/public/_locales/pt/messages.json +++ b/public/_locales/pt/messages.json @@ -34,10 +34,6 @@ } } }, - "authorizedDApps": { - "message": "DApps autorizados", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "Clique no ícone X para repor as permissões." }, @@ -647,38 +643,19 @@ "revealPrivateKey": { "message": "Revelar chave privada" }, - "revealPrivateKeyDescription": { - "message": "Também conhecida como \"Exportar conta\", revela a chave privada da sua conta selecionada." - }, "revealSeedPhrase": { "message": "Revelar frase semente" }, - "revealSeedPhraseDescription": { - "message": "Também conhecida como \"Exportar carteira\", pode precisar desta frase semente para aceder à sua carteira e às suas contas noutros dispositivos." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "Nesta secção pode ativar a capacidade de interagir com aplicações descentralizadas que suportam a Carteira Temple." - }, - "networksDescription": { - "message": "Nesta secção pode adicionar ou apagar redes Tezos personalizadas.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Remover conta" }, "removeAccountDescription": { "message": "Utilize esta secção para remover a sua conta selecionada. Apenas as contas importadas podem ser removidas." }, - "about": { - "message": "Sobre" - }, - "aboutDescription": { - "message": "Utilize esta secção para ver meta informações sobre a Carteira Temple." - }, "unlockWallet": { "message": "Desbloquear a Carteira" }, @@ -1274,9 +1251,6 @@ "generalSettings": { "message": "Geral" }, - "generalSettingsDescription": { - "message": "Aqui pode gerir as preferências de idioma e o modo de visualização." - }, "swapNoun": { "message": "Trocar" }, @@ -1895,9 +1869,6 @@ "addressBook": { "message": "Livro de endereços" }, - "addressBookDescription": { - "message": "Adicione, remova e gira os seus contactos." - }, "addNewContact": { "message": "Novo contacto" }, diff --git a/public/_locales/ru/messages.json b/public/_locales/ru/messages.json index 95269de66..febb85009 100644 --- a/public/_locales/ru/messages.json +++ b/public/_locales/ru/messages.json @@ -17,9 +17,6 @@ "maximiseView": { "message": "Maximise view" }, - "authorizedDApps": { - "message": "Authorized DApps" - }, "clickIconToResetPermissions": { "message": "Click on the X icon to reset permissions." }, diff --git a/public/_locales/tr/messages.json b/public/_locales/tr/messages.json index 7412e29b0..0824c87dd 100644 --- a/public/_locales/tr/messages.json +++ b/public/_locales/tr/messages.json @@ -34,10 +34,6 @@ } } }, - "authorizedDApps": { - "message": "İzin Verilen DApps", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "İzinleri sıfırlamak için X simgesine tıklayın." }, @@ -647,38 +643,19 @@ "revealPrivateKey": { "message": "Özel Anahtarı Göster" }, - "revealPrivateKeyDescription": { - "message": "\"Hesabı Dışa Aktar\" olarak da bilinen bu özellik, seçtiğiniz hesap için özel anahtarı gösterir." - }, "revealSeedPhrase": { "message": "Kurtarma Sözcüğünü Göster" }, - "revealSeedPhraseDescription": { - "message": "\"Cüzdanı Dışa Aktar\" olarak da bilinir; başka cihazlarda hesaplarınıza ve cüzdanınıza erişmek için bu kurtarma sözcüğüne ihtiyacınız olabilir." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "Bu bölümde, Temple Wallet'i destekleyen merkezi olmayan uygulamalarla etkileşim kurabilmeyi etkinleştirebilirsiniz." - }, - "networksDescription": { - "message": "Bu bölümde, özel Tezos ağları ekleyebilir ya da silebilirsiniz.", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Hesabı Kaldır" }, "removeAccountDescription": { "message": "Seçtiğiniz hesabı kaldırmak için bu bölümü kullanın. Yalnızca içe aktarılmış olan hesaplar kaldırılabilir." }, - "about": { - "message": "Hakkında" - }, - "aboutDescription": { - "message": "Temple Wallet hakkında meta verileri görüntülemek için bu bölümü kullanın." - }, "unlockWallet": { "message": "Cüzdan Kilidini Aç" }, @@ -1274,9 +1251,6 @@ "generalSettings": { "message": "Genel" }, - "generalSettingsDescription": { - "message": "Dil tercihlerini ve ekran modunu buradan yönetebilirsiniz." - }, "swapNoun": { "message": "Takas" }, @@ -1895,9 +1869,6 @@ "addressBook": { "message": "Adres Defteri" }, - "addressBookDescription": { - "message": "Kişilerinizi ekleyin, çıkarın ve yönetin." - }, "addNewContact": { "message": "Yeni kişi" }, diff --git a/public/_locales/uk/messages.json b/public/_locales/uk/messages.json index 1bdf5a000..2513fe231 100644 --- a/public/_locales/uk/messages.json +++ b/public/_locales/uk/messages.json @@ -31,9 +31,9 @@ } } }, - "authorizedDApps": { - "message": "Авторизовані Dapp`ки", - "description": "DApps = децентралізовані додатки" + "connectedDApps": { + "message": "Підключені Dapp`ки", + "description": "Dapps = децентралізовані додатки" }, "clickIconToResetPermissions": { "message": "Натисни X іконку щоб скинути дозволи." @@ -634,38 +634,19 @@ "revealPrivateKey": { "message": "Розкрити приватний ключ" }, - "revealPrivateKeyDescription": { - "message": "Також відоме як \"Export Account\", відкриває приватний ключ для вибраного облікового запису." - }, "revealSeedPhrase": { "message": "Розкрийте Сід Фразу" }, - "revealSeedPhraseDescription": { - "message": "Також відоме як \"Export Wallet\", ця сід фраза може знадобитися для доступу до вашого гаманця та облікових записів на інших пристроях." - }, "dApps": { "message": "DApps", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "У цьому розділі ви можете включити можливість взаємодії з децентралізованими додатками, які підтримують Temple Wallet." - }, - "networksDescription": { - "message": "У цій секції ти можеш додати або видалити кастомні Tezos мережі", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "Видалити Аккаунт" }, "removeAccountDescription": { "message": "Використовуйте цей розділ, щоб видалити вибраний обліковий запис. Видалити можна лише імпортовані облікові записи." }, - "about": { - "message": "Додатково" - }, - "aboutDescription": { - "message": "Використовуйте цей розділ, щоб переглянути метаінформацію про Temple Wallet." - }, "unlockWallet": { "message": "Розблокувати гаманець" }, @@ -1255,9 +1236,6 @@ "generalSettings": { "message": "Загальне" }, - "generalSettingsDescription": { - "message": "Тут ви можете керувати налаштуваннями мови та режимом відображення." - }, "swapNoun": { "message": "Своп" }, diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json index 13ceef712..138c4251b 100644 --- a/public/_locales/zh_CN/messages.json +++ b/public/_locales/zh_CN/messages.json @@ -31,10 +31,6 @@ } } }, - "authorizedDApps": { - "message": "授权DApps", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "点击X图标来重置权限。" }, @@ -611,26 +607,13 @@ "revealPrivateKey": { "message": "显示私钥" }, - "revealPrivateKeyDescription": { - "message": "也称为“导出账户”,显示所选账户的私钥。" - }, "revealSeedPhrase": { "message": "显示助记词" }, - "revealSeedPhraseDescription": { - "message": "也称为“导出钱包”,您可能需要此助记词来在其他设备上访问您的钱包和账户。" - }, "dApps": { "message": "DApp", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "在此处,您可以获得与支持Temple钱包的去中心化应用互动的能力。" - }, - "networksDescription": { - "message": "在此处,您可以添加或删除自定义Tezos网络。", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "移除账户" }, @@ -640,9 +623,6 @@ "about": { "message": "关于" }, - "aboutDescription": { - "message": "使用此板块来查看关于Temple钱包的元信息。" - }, "unlockWallet": { "message": "解锁钱包" }, @@ -1202,9 +1182,6 @@ "generalSettings": { "message": "通用" }, - "generalSettingsDescription": { - "message": "在此处您可以管理语言偏好和显示模式。" - }, "swapNoun": { "message": "交换" }, diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json index 76d305f71..16c87d9c9 100644 --- a/public/_locales/zh_TW/messages.json +++ b/public/_locales/zh_TW/messages.json @@ -31,10 +31,6 @@ } } }, - "authorizedDApps": { - "message": "授權的分散式應用程式", - "description": "DApps = Decentralized Applications" - }, "clickIconToResetPermissions": { "message": "點擊 X 圖示重新設定權限。" }, @@ -611,38 +607,19 @@ "revealPrivateKey": { "message": "顯示私密金鑰" }, - "revealPrivateKeyDescription": { - "message": "也稱為「匯出帳戶」,這會顯示所選取帳戶的私密金鑰。" - }, "revealSeedPhrase": { "message": "顯示助記詞" }, - "revealSeedPhraseDescription": { - "message": "也稱為「匯出錢包」,您可能需要此助記詞,才能透過其他裝置存取您的錢包和帳戶。" - }, "dApps": { "message": "分散式應用程式", "description": "DApps = Decentralized Applications" }, - "dAppsDescription": { - "message": "在此區段,您可以啟用與支援 Temple 錢包的分散式應用程式互動的能力。" - }, - "networksDescription": { - "message": "在此區段,您可以新增或刪除自訂的 Tezos 網路。", - "description": "Tezos = blockchain name (https://tezos.com/)" - }, "removeAccount": { "message": "移除帳戶" }, "removeAccountDescription": { "message": "使用此區段移除您選取的帳戶。只能移除匯入的帳戶。" }, - "about": { - "message": "關於" - }, - "aboutDescription": { - "message": "使用此區段檢視 Temple 錢包的元資料。" - }, "unlockWallet": { "message": "解鎖錢包" }, @@ -1202,9 +1179,6 @@ "generalSettings": { "message": "一般" }, - "generalSettingsDescription": { - "message": "您可以在此管理語言偏好和顯示模式。" - }, "swapNoun": { "message": "交換" }, diff --git a/src/app/pages/AccountSettings/settings-cell.tsx b/src/app/atoms/SettingsCell.tsx similarity index 71% rename from src/app/pages/AccountSettings/settings-cell.tsx rename to src/app/atoms/SettingsCell.tsx index 45954933b..c0ebdaa01 100644 --- a/src/app/pages/AccountSettings/settings-cell.tsx +++ b/src/app/atoms/SettingsCell.tsx @@ -8,6 +8,8 @@ interface ComponentBase { } interface SettingsCellPropsBase

{ + isLast?: boolean; + cellIcon?: ReactNode; cellName: ReactNode; Component: 'div' | FC

; } @@ -24,20 +26,23 @@ type SettingsCellProps

= P extends { Component: 'div' } export const SettingsCell =

({ className, - cellName: name, + cellIcon, + cellName, + isLast = true, children, Component, ...restProps }: SettingsCellProps

) => { return ( - {name} +

+ {cellIcon} + + {cellName} +
{children} diff --git a/src/app/atoms/SettingsCellGroup.tsx b/src/app/atoms/SettingsCellGroup.tsx new file mode 100644 index 000000000..32df443b5 --- /dev/null +++ b/src/app/atoms/SettingsCellGroup.tsx @@ -0,0 +1,20 @@ +import React, { Children, FC, HTMLAttributes } from 'react'; + +import clsx from 'clsx'; + +export const SettingsCellGroup: FC>> = ({ + className, + children, + ...restProps +}) => ( +
+ {children} +
+); diff --git a/src/app/icons/additional.svg b/src/app/icons/additional.svg deleted file mode 100644 index 67e741ca8..000000000 --- a/src/app/icons/additional.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/src/app/icons/apps.svg b/src/app/icons/apps.svg deleted file mode 100644 index 8863f7bb5..000000000 --- a/src/app/icons/apps.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/app/icons/base/additional.svg b/src/app/icons/base/additional.svg new file mode 100644 index 000000000..8e30602ed --- /dev/null +++ b/src/app/icons/base/additional.svg @@ -0,0 +1,6 @@ + + + diff --git a/src/app/icons/base/addressbook.svg b/src/app/icons/base/addressbook.svg new file mode 100644 index 000000000..8a23b7660 --- /dev/null +++ b/src/app/icons/base/addressbook.svg @@ -0,0 +1,6 @@ + + + diff --git a/src/app/icons/base/browse.svg b/src/app/icons/base/browse.svg index 1c97721da..095ad60bc 100644 --- a/src/app/icons/base/browse.svg +++ b/src/app/icons/base/browse.svg @@ -1,6 +1,6 @@ - + diff --git a/src/app/icons/base/exit.svg b/src/app/icons/base/exit.svg new file mode 100644 index 000000000..8c18d7757 --- /dev/null +++ b/src/app/icons/base/exit.svg @@ -0,0 +1,7 @@ + + + + diff --git a/src/app/icons/base/info.svg b/src/app/icons/base/info.svg new file mode 100644 index 000000000..e4f31c622 --- /dev/null +++ b/src/app/icons/base/info.svg @@ -0,0 +1,6 @@ + + + diff --git a/src/app/icons/base/link.svg b/src/app/icons/base/link.svg new file mode 100644 index 000000000..2ea8c85af --- /dev/null +++ b/src/app/icons/base/link.svg @@ -0,0 +1,6 @@ + + + diff --git a/src/app/icons/base/refresh.svg b/src/app/icons/base/refresh.svg new file mode 100644 index 000000000..5ca74d40b --- /dev/null +++ b/src/app/icons/base/refresh.svg @@ -0,0 +1,6 @@ + + + diff --git a/src/app/icons/canny.svg b/src/app/icons/canny.svg deleted file mode 100644 index e6bb0370c..000000000 --- a/src/app/icons/canny.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/app/icons/helpcrunch.svg b/src/app/icons/helpcrunch.svg deleted file mode 100644 index 5d5b3e656..000000000 --- a/src/app/icons/helpcrunch.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/src/app/icons/monochrome/extension.svg b/src/app/icons/monochrome/extension.svg deleted file mode 100644 index 7ccbaa087..000000000 --- a/src/app/icons/monochrome/extension.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/src/app/icons/monochrome/help.svg b/src/app/icons/monochrome/help.svg deleted file mode 100644 index 1b4a9efe8..000000000 --- a/src/app/icons/monochrome/help.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/app/icons/monochrome/key.svg b/src/app/icons/monochrome/key.svg deleted file mode 100644 index ca17a9583..000000000 --- a/src/app/icons/monochrome/key.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/src/app/icons/monochrome/people.svg b/src/app/icons/monochrome/people.svg deleted file mode 100644 index b59d26f83..000000000 --- a/src/app/icons/monochrome/people.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/src/app/icons/monochrome/sticker.svg b/src/app/icons/monochrome/sticker.svg deleted file mode 100644 index c52b5d23e..000000000 --- a/src/app/icons/monochrome/sticker.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/app/icons/monochrome/sync.svg b/src/app/icons/monochrome/sync.svg deleted file mode 100644 index 9dd0aee25..000000000 --- a/src/app/icons/monochrome/sync.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/app/layouts/PageLayout/DefaultHeader.tsx b/src/app/layouts/PageLayout/DefaultHeader.tsx index 5ec03979c..949e12f3a 100644 --- a/src/app/layouts/PageLayout/DefaultHeader.tsx +++ b/src/app/layouts/PageLayout/DefaultHeader.tsx @@ -68,7 +68,9 @@ export const DefaultHeader = memo>( - {pageTitle &&
{pageTitle}
} + {pageTitle && ( +
{pageTitle}
+ )}
{headerRightElem}
diff --git a/src/app/pages/AccountSettings/index.tsx b/src/app/pages/AccountSettings/index.tsx index 61cb3e8bc..18178bf23 100644 --- a/src/app/pages/AccountSettings/index.tsx +++ b/src/app/pages/AccountSettings/index.tsx @@ -7,6 +7,8 @@ import { AccountName } from 'app/atoms/AccountName'; import { CopyButton } from 'app/atoms/CopyButton'; import { EvmNetworksLogos, TezNetworkLogo } from 'app/atoms/NetworksLogos'; import { ActionsButtonsBox } from 'app/atoms/PageModal/actions-buttons-box'; +import { SettingsCell } from 'app/atoms/SettingsCell'; +import { SettingsCellGroup } from 'app/atoms/SettingsCellGroup'; import { StyledButton } from 'app/atoms/StyledButton'; import { TotalEquity } from 'app/atoms/TotalEquity'; import { useAllAccountsReactiveOnRemoval } from 'app/hooks/use-all-accounts-reactive'; @@ -25,7 +27,6 @@ import { EditAccountNameModal } from './edit-account-name-modal'; import { RemoveAccountModal } from './remove-account-modal'; import { RevealPrivateKeyModal } from './reveal-private-key-modal'; import { AccountSettingsSelectors } from './selectors'; -import { SettingsCell } from './settings-cell'; import { PrivateKeyPayload } from './types'; interface AccountSettingsProps { @@ -158,33 +159,39 @@ export const AccountSettings = memo(({ id }) => {
- } Component="div"> - - - - } - Component={Button} - onClick={openEditNameModal} - testID={AccountSettingsSelectors.editName} - > - - + + } Component="div"> + + + - {(account.type === TempleAccountType.HD || account.type === TempleAccountType.Imported) && ( + } + cellName={} Component={Button} - onClick={openRevealPrivateKeyModal} - testID={AccountSettingsSelectors.revealPrivateKey} + onClick={openEditNameModal} + testID={AccountSettingsSelectors.editName} > + + + {(account.type === TempleAccountType.HD || account.type === TempleAccountType.Imported) && ( + + } + Component={Button} + onClick={openRevealPrivateKeyModal} + testID={AccountSettingsSelectors.revealPrivateKey} + > + + + )}
@@ -194,16 +201,17 @@ export const AccountSettings = memo(({ id }) => {

{derivationPaths.map(({ chainName, path }) => ( - - {chainName === 'tezos' ? : } - + + + {chainName === 'tezos' ? : } + + ))} )} diff --git a/src/app/pages/Settings/Settings.selectors.ts b/src/app/pages/Settings/Settings.selectors.ts index efd28540b..6ca5f22d4 100644 --- a/src/app/pages/Settings/Settings.selectors.ts +++ b/src/app/pages/Settings/Settings.selectors.ts @@ -9,5 +9,10 @@ export enum SettingsSelectors { removeAccountButton = 'Settings/Remove Account Button', aboutButton = 'Settings/About Button', accountsManagementButton = 'Settings/Accounts Management Button', - advancedFeaturesButton = 'Settings/Advanced Features Button' + advancedFeaturesButton = 'Settings/Advanced Features Button', + securityAndPrivacyButton = 'Settings/Security and Privacy Button', + passwordInput = 'Settings/Password Input', + cancelResetExtensionButton = 'Settings/Cancel Reset Extension Button', + confirmResetExtensionButton = 'Settings/Confirm Reset Extension Button', + resetExtensionButton = 'Settings/Reset Extension Button' } diff --git a/src/app/pages/Settings/Settings.tsx b/src/app/pages/Settings/Settings.tsx index 097fbd7fd..1159747af 100644 --- a/src/app/pages/Settings/Settings.tsx +++ b/src/app/pages/Settings/Settings.tsx @@ -1,33 +1,35 @@ -import React, { memo, ReactNode, useMemo, useState } from 'react'; - -import clsx from 'clsx'; +import React, { FC, ReactNode, SetStateAction, memo, useMemo, useState } from 'react'; import { IconBase } from 'app/atoms'; -import { ReactComponent as AdditionalIcon } from 'app/icons/additional.svg'; -import { ReactComponent as AppsIcon } from 'app/icons/apps.svg'; -import { ReactComponent as SettingsIcon } from 'app/icons/base/settings.svg'; -import { ReactComponent as ContactBookIcon } from 'app/icons/monochrome/contact-book.svg'; -import { ReactComponent as ExtensionIcon } from 'app/icons/monochrome/extension.svg'; -import { ReactComponent as HelpIcon } from 'app/icons/monochrome/help.svg'; -import { ReactComponent as KeyIcon } from 'app/icons/monochrome/key.svg'; -import { ReactComponent as PeopleIcon } from 'app/icons/monochrome/people.svg'; -import { ReactComponent as SignalAltIcon } from 'app/icons/monochrome/signal-alt.svg'; -import { ReactComponent as StickerIcon } from 'app/icons/monochrome/sticker.svg'; -import { ReactComponent as SyncIcon } from 'app/icons/monochrome/sync.svg'; +import { AccountAvatar } from 'app/atoms/AccountAvatar'; +import { SettingsCell } from 'app/atoms/SettingsCell'; +import { SettingsCellGroup } from 'app/atoms/SettingsCellGroup'; +import { StyledButton } from 'app/atoms/StyledButton'; +import { ReactComponent as AdditionalFeaturesIcon } from 'app/icons/base/additional.svg'; +import { ReactComponent as AddressBookIcon } from 'app/icons/base/addressbook.svg'; +import { ReactComponent as BrowseIcon } from 'app/icons/base/browse.svg'; +import { ReactComponent as ChevronRightIcon } from 'app/icons/base/chevron_right.svg'; +import { ReactComponent as ExitIcon } from 'app/icons/base/exit.svg'; +import { ReactComponent as InfoIcon } from 'app/icons/base/info.svg'; +import { ReactComponent as LinkIcon } from 'app/icons/base/link.svg'; +import { ReactComponent as LockIcon } from 'app/icons/base/lock.svg'; +import { ReactComponent as ManageIcon } from 'app/icons/base/manage.svg'; +import { ReactComponent as RefreshIcon } from 'app/icons/base/refresh.svg'; import PageLayout from 'app/layouts/PageLayout'; import About from 'app/templates/About/About'; import { AccountsManagement } from 'app/templates/AccountsManagement'; import AddressBook from 'app/templates/AddressBook/AddressBook'; import { AdvancedFeatures } from 'app/templates/AdvancedFeatures'; import DAppSettings from 'app/templates/DAppSettings/DAppSettings'; -import HelpAndCommunity from 'app/templates/HelpAndCommunity'; -import { RevealSeedPhrase, RevealPrivateKeys } from 'app/templates/RevealSecrets'; import GeneralSettings from 'app/templates/SettingsGeneral'; import SyncSettings from 'app/templates/Synchronization/SyncSettings'; import { TID, T } from 'lib/i18n'; +import { useBooleanState } from 'lib/ui/hooks'; import { Link } from 'lib/woozie'; +import { useAccount } from 'temple/front'; import NetworksSettings from './Networks'; +import { ResetExtensionModal } from './reset-extension-modal'; import { SettingsSelectors } from './Settings.selectors'; interface SettingsProps { @@ -37,190 +39,141 @@ interface SettingsProps { interface Tab { slug: string; titleI18nKey: TID; - Icon: React.FC>; - Component: React.FC<{ setHeaderChildren: (children: ReactNode) => void }>; - color: string; - descriptionI18nKey: TID; + Icon: FC; + Component: FC<{ setHeaderChildren: React.Dispatch> }>; testID?: SettingsSelectors; } -const TABS: Tab[] = [ - { - slug: 'general-settings', - titleI18nKey: 'generalSettings', - Icon: SettingsIcon, - Component: GeneralSettings, - color: '#667EEA', - descriptionI18nKey: 'generalSettingsDescription', - testID: SettingsSelectors.generalButton - }, - { - slug: 'synchronization', - titleI18nKey: 'synchronization', - Icon: SyncIcon, - Component: SyncSettings, - color: '#7ED9A7', - descriptionI18nKey: 'synchronizationSettingsDescription', - testID: SettingsSelectors.synchronizationButton - }, - { - slug: 'address-book', - titleI18nKey: 'addressBook', - Icon: ContactBookIcon, - Component: AddressBook, - color: '#d53f8c', - descriptionI18nKey: 'addressBookDescription', - testID: SettingsSelectors.addressBookButton - }, - { - slug: 'reveal-private-key', - titleI18nKey: 'revealPrivateKey', - Icon: KeyIcon, - Component: RevealPrivateKeys, - color: '#3182CE', - descriptionI18nKey: 'revealPrivateKeyDescription', - testID: SettingsSelectors.revealPrivateKeyButton - }, - { - slug: 'reveal-seed-phrase', - titleI18nKey: 'revealSeedPhrase', - Icon: StickerIcon, - Component: RevealSeedPhrase, - color: '#F6AD55', - descriptionI18nKey: 'revealSeedPhraseDescription', - testID: SettingsSelectors.revealSeedPhraseButton - }, - { - slug: 'dapps', - titleI18nKey: 'authorizedDApps', - Icon: AppsIcon, - Component: DAppSettings, - color: '#9F7AEA', - descriptionI18nKey: 'dAppsDescription', - testID: SettingsSelectors.dAppsButton - }, - { - slug: 'networks', - titleI18nKey: 'networks', - Icon: SignalAltIcon, - Component: NetworksSettings, - color: '#F6C90E', - descriptionI18nKey: 'networksDescription', - testID: SettingsSelectors.networksButton - }, - { - slug: 'advanced-features', - titleI18nKey: 'advancedFeatures', - Icon: AdditionalIcon, - Component: AdvancedFeatures, - color: '#88E0E6', - descriptionI18nKey: 'advancedFeaturesDescription', - testID: SettingsSelectors.advancedFeaturesButton - }, - { - slug: 'accounts-management', - titleI18nKey: 'accountsManagement', - Icon: PeopleIcon, - Component: AccountsManagement, - color: 'teal', - descriptionI18nKey: 'accountsManagementDescription', - testID: SettingsSelectors.accountsManagementButton - }, - { - slug: 'about', - titleI18nKey: 'about', - Icon: ExtensionIcon, - Component: About, - color: '#A0AEC0', - descriptionI18nKey: 'aboutDescription', - testID: SettingsSelectors.aboutButton - }, - { - slug: 'help-and-community', - titleI18nKey: 'helpAndCommunity', - Icon: HelpIcon, - Component: HelpAndCommunity, - color: '#38B2AC', - descriptionI18nKey: 'helpAndCommunityDescription' - } +const DefaultSettingsIconHOC = (Icon: React.FC>) => + memo(() => ); + +const TABS_GROUPS: Tab[][] = [ + [ + { + slug: 'accounts-management', + titleI18nKey: 'accountsManagement', + Icon: memo(() => { + const { id } = useAccount(); + + return ; + }), + Component: AccountsManagement, + testID: SettingsSelectors.accountsManagementButton + } + ], + [ + { + slug: 'general-settings', + titleI18nKey: 'generalSettings', + Icon: DefaultSettingsIconHOC(ManageIcon), + Component: GeneralSettings, + testID: SettingsSelectors.generalButton + }, + { + slug: 'networks', + titleI18nKey: 'networks', + Icon: DefaultSettingsIconHOC(BrowseIcon), + Component: NetworksSettings, + testID: SettingsSelectors.networksButton + }, + { + slug: 'security-and-privacy', + titleI18nKey: 'securityAndPrivacy', + Icon: DefaultSettingsIconHOC(LockIcon), + Component: () =>
TODO: add some content
, + testID: SettingsSelectors.securityAndPrivacyButton + } + ], + [ + { + slug: 'address-book', + titleI18nKey: 'addressBook', + Icon: DefaultSettingsIconHOC(AddressBookIcon), + Component: AddressBook, + testID: SettingsSelectors.addressBookButton + }, + { + slug: 'dapps', + titleI18nKey: 'connectedDApps', + Icon: DefaultSettingsIconHOC(LinkIcon), + Component: DAppSettings, + testID: SettingsSelectors.dAppsButton + }, + { + slug: 'additional-settings', + titleI18nKey: 'advancedFeatures', + Icon: DefaultSettingsIconHOC(AdditionalFeaturesIcon), + Component: AdvancedFeatures, + testID: SettingsSelectors.advancedFeaturesButton + }, + { + slug: 'synchronization', + titleI18nKey: 'templeSync', + Icon: DefaultSettingsIconHOC(RefreshIcon), + Component: SyncSettings, + testID: SettingsSelectors.synchronizationButton + } + ], + [ + { + slug: 'about', + titleI18nKey: 'aboutAndSupport', + Icon: DefaultSettingsIconHOC(InfoIcon), + Component: About, + testID: SettingsSelectors.aboutButton + } + ] ]; +const TABS = TABS_GROUPS.flat(); const Settings = memo(({ tabSlug }) => { const activeTab = useMemo(() => TABS.find(t => t.slug === tabSlug) || null, [tabSlug]); const [headerChildren, setHeaderChildren] = useState(null); + const [extensionModalOpened, openResetExtensionModal, closeResetExtensionModal] = useBooleanState(false); return ( - {!activeTab && } - - - - - } + pageTitle={} + paperClassName="!bg-background" headerChildren={headerChildren} > -
- {activeTab ? ( - - ) : ( -
    - {TABS.map(({ slug, titleI18nKey, descriptionI18nKey, Icon, color, testID }, i) => { - const first = i === 0; - const linkTo = `/settings/${slug}`; - - return ( - -
    -
    -
    - -
    -
    - -
    - - {message => ( -
    - {message} -
    - )} -
    + {extensionModalOpened && } + {activeTab ? ( + + ) : ( +
    + {TABS_GROUPS.map((tabs, i) => ( + + {tabs.map(({ slug, titleI18nKey, Icon, testID }, j) => ( + } + cellName={} + isLast={j === tabs.length - 1} + testID={testID} + > + + + ))} + + ))} - - {message =>

    {message}

    } -
    -
    -
    - - ); - })} -
- )} -
+
+ + + + +
+ + )}
); }); diff --git a/src/app/pages/Settings/reset-extension-modal.tsx b/src/app/pages/Settings/reset-extension-modal.tsx new file mode 100644 index 000000000..463ab2a3b --- /dev/null +++ b/src/app/pages/Settings/reset-extension-modal.tsx @@ -0,0 +1,88 @@ +import React, { memo, useCallback } from 'react'; + +import { Alert, FormField } from 'app/atoms'; +import { + ActionModal, + ActionModalBodyContainer, + ActionModalButton, + ActionModalButtonsContainer +} from 'app/atoms/action-modal'; +import { useTempleBackendActionForm } from 'app/hooks/use-temple-backend-action-form'; +import { DEFAULT_PASSWORD_INPUT_PLACEHOLDER } from 'lib/constants'; +import { T, t } from 'lib/i18n'; +import { useTempleClient } from 'lib/temple/front'; + +import { SettingsSelectors } from './Settings.selectors'; + +interface ResetExtensionModalProps { + onClose: EmptyFn; +} + +interface FormData { + password: string; +} + +export const ResetExtensionModal = memo(({ onClose }) => { + const { resetExtension } = useTempleClient(); + + const handleResetPasswordSubmit = useCallback(({ password }: FormData) => resetExtension(password), [resetExtension]); + + const { register, handleSubmit, errors, formState, onSubmit } = useTempleBackendActionForm( + handleResetPasswordSubmit, + 'password' + ); + const submitting = formState.isSubmitting; + + return ( + +
+ + + +

+ } + /> + + } + labelContainerClassName="text-grey-2" + placeholder={DEFAULT_PASSWORD_INPUT_PLACEHOLDER} + errorCaption={errors.password?.message} + containerClassName="mb-2" + testID={SettingsSelectors.passwordInput} + /> +
+ + + + + + + + + + +
+
+ ); +}); diff --git a/src/app/templates/DAppSettings/DAppSettings.tsx b/src/app/templates/DAppSettings/DAppSettings.tsx index 572b90cce..c76ce8c33 100644 --- a/src/app/templates/DAppSettings/DAppSettings.tsx +++ b/src/app/templates/DAppSettings/DAppSettings.tsx @@ -91,7 +91,7 @@ const DAppSettings: FC = () => { <>

- +

diff --git a/src/app/templates/HelpAndCommunity/ResourceLink.tsx b/src/app/templates/HelpAndCommunity/ResourceLink.tsx deleted file mode 100644 index 67845d4e8..000000000 --- a/src/app/templates/HelpAndCommunity/ResourceLink.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, { FC, SVGProps } from 'react'; - -import { Anchor } from 'app/atoms/Anchor'; -import { TestIDProps } from 'lib/analytics'; - -interface Props extends TestIDProps { - title: string; - href: string; - background?: string; - Icon: React.FC>; -} - -export const ResourceLink: FC = ({ title, href, background, Icon, testID, testIDProperties }) => { - return ( -
  • - -
    - -
    - {title} -
    -
  • - ); -}; diff --git a/src/app/templates/HelpAndCommunity/index.tsx b/src/app/templates/HelpAndCommunity/index.tsx deleted file mode 100644 index 8584a5cb2..000000000 --- a/src/app/templates/HelpAndCommunity/index.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import React, { FC, useMemo } from 'react'; - -import { ReactComponent as CannyIcon } from 'app/icons/canny.svg'; -import { ReactComponent as DiscordIcon } from 'app/icons/discord.svg'; -import { ReactComponent as HelpCrunchIcon } from 'app/icons/helpcrunch.svg'; -import { ReactComponent as RedditIcon } from 'app/icons/reddit.svg'; -import { ReactComponent as TelegramIcon } from 'app/icons/telegram.svg'; -import { ReactComponent as TwitterIcon } from 'app/icons/twitter.svg'; -import { ReactComponent as YoutubeIcon } from 'app/icons/youtube.svg'; -import { T } from 'lib/i18n'; - -import { ResourceLink } from './ResourceLink'; -import { HelpAndCommunitySelectors } from './selectors'; - -const HelpAndCommunity: FC = () => { - const generalLinks = useMemo( - () => [ - { - title: 'Knowledge Base', - href: 'https://madfish.crunch.help/temple-wallet', - background: '#2182f7', - Icon: HelpCrunchIcon, - testID: HelpAndCommunitySelectors.knowledgeBaseLinkButton - }, - { - title: 'Feature Request', - href: 'https://madfish.canny.io/feature-requests', - Icon: CannyIcon, - testID: HelpAndCommunitySelectors.featureRequestLinkButton - } - ], - [] - ); - - const socialMediaLinks = useMemo( - () => [ - { - title: 'Twitter', - href: 'https://twitter.com/madfishofficial', - background: '#1DA1F2', - Icon: TwitterIcon - }, - { - title: 'Telegram', - href: 'https://t.me/MadFishCommunity', - background: '#26A5E4', - Icon: TelegramIcon - }, - { - title: 'Discord', - href: 'https://www.madfish.solutions/discord', - background: '#7289DA', - Icon: DiscordIcon - }, - { - title: 'Reddit', - href: 'https://www.reddit.com/r/MadFishCommunity', - background: '#FF4500', - Icon: RedditIcon - }, - { - title: 'Youtube', - href: 'https://www.youtube.com/channel/UCUp80EXfJEigks3xU5hiwyA', - background: '#FF0000', - Icon: YoutubeIcon - } - ], - [] - ); - - return ( -
    -

    - -

    - -
      - {generalLinks.map(({ title, ...props }) => ( - - ))} - {socialMediaLinks.map(({ title, ...props }) => ( - - ))} -
    - -

    - -

    -
    - ); -}; - -export default HelpAndCommunity; diff --git a/src/app/templates/HelpAndCommunity/selectors.ts b/src/app/templates/HelpAndCommunity/selectors.ts deleted file mode 100644 index 567dd1e16..000000000 --- a/src/app/templates/HelpAndCommunity/selectors.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum HelpAndCommunitySelectors { - knowledgeBaseLinkButton = 'Help & Community/Knowledge Base Link Button', - featureRequestLinkButton = 'Help & Community/Feature Request Link Button', - socialMediaLinkButton = 'Help & Community/Social Media Link Button' -} diff --git a/src/app/templates/RevealSecrets/PasswordForRevealField.tsx b/src/app/templates/RevealSecrets/PasswordForRevealField.tsx deleted file mode 100644 index d54bd7c8e..000000000 --- a/src/app/templates/RevealSecrets/PasswordForRevealField.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { memo, useRef, useCallback, useLayoutEffect } from 'react'; - -import { OnSubmit, useForm } from 'react-hook-form'; - -import { FormField, FormSubmitButton } from 'app/atoms'; -import { DEFAULT_PASSWORD_INPUT_PLACEHOLDER } from 'lib/constants'; -import { TID, T, t } from 'lib/i18n'; - -import { RevealSecretsSelectors } from './RevealSecrets.selectors'; - -interface Props { - labelDescriptionForName: TID; - onSubmit: (password: string) => Promise; -} - -const SUBMIT_ERROR_TYPE = 'submit-error'; - -interface FormData { - password: string; -} - -export const PasswordForRevealField = memo(({ labelDescriptionForName, onSubmit }) => { - const { register, handleSubmit, errors, setError, clearError, formState } = useForm(); - const submitting = formState.isSubmitting; - - const formRef = useRef(null); - - const focusPasswordField = useCallback(() => { - formRef.current?.querySelector("input[name='password']")?.focus(); - }, []); - - useLayoutEffect(() => { - focusPasswordField(); - }, [focusPasswordField]); - - const onSubmitLocal = useCallback>( - ({ password }) => { - if (submitting) return; - - clearError('password'); - - onSubmit(password).catch(err => { - console.error(err); - - setError('password', SUBMIT_ERROR_TYPE, err.message); - focusPasswordField(); - }); - }, - [onSubmit, submitting, clearError, setError, focusPasswordField] - ); - - return ( -
    - clearError()} - testID={RevealSecretsSelectors.RevealPasswordInput} - /> - - - - - - ); -}); diff --git a/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx b/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx deleted file mode 100644 index 9e809dcc2..000000000 --- a/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import React, { FC, memo, useCallback, useMemo } from 'react'; - -import clsx from 'clsx'; - -import { Alert } from 'app/atoms'; -import { getAccountBadgeTitle } from 'app/defaults'; -import AccountBanner from 'app/templates/AccountBanner'; -import { T, t } from 'lib/i18n'; -import { useTempleClient } from 'lib/temple/front'; -import { TempleAccountType } from 'lib/temple/types'; -import { useDidUpdate, useVanishingState } from 'lib/ui/hooks'; -import { AccountForChain } from 'temple/accounts'; -import { useAccountForEvm, useAccountForTezos } from 'temple/front'; -import { TempleChainTitle } from 'temple/types'; - -import { PasswordForRevealField } from './PasswordForRevealField'; -import { SecretField } from './SecretField'; - -export const RevealPrivateKeys = memo(() => { - const accForTezos = useAccountForTezos(); - const accForEvm = useAccountForEvm(); - - return ( - <> - {accForTezos ? : null} - {accForEvm ? : null} - - ); -}); - -interface RevealForChainProps { - account: AccountForChain; -} - -const RevealForChain: FC = ({ account }) => { - const { chain, address } = account; - - const { revealPrivateKey } = useTempleClient(); - - const [secret, setSecret] = useVanishingState(); - - // eslint-disable-next-line react-hooks/exhaustive-deps - useDidUpdate(() => void setSecret(null), [account.id, setSecret]); - - const onPasswordSubmit = useCallback( - async (password: string) => revealPrivateKey(address, password).then(scrt => void setSecret(scrt)), - [address, setSecret, revealPrivateKey] - ); - - const mainContent = useMemo(() => { - const forbidRevealing = [ - TempleAccountType.Ledger, - TempleAccountType.ManagedKT, - TempleAccountType.WatchOnly - ].includes(account.type); - - if (forbidRevealing) { - return ( - - - {getAccountBadgeTitle(account.type)} - - ]} - /> -

    - } - className="my-4" - /> - ); - } - - if (secret) return ; - - return ; - }, [account.type, secret, onPasswordSubmit]); - - return ( -
    - - - {account.derivationPath && ( -
    - - -
    - )} - - {mainContent} -
    - ); -}; diff --git a/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts b/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts deleted file mode 100644 index 96fa8582e..000000000 --- a/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum RevealSecretsSelectors { - RevealButton = 'Reveal Secrets/Reveal Button', - RevealPasswordInput = 'Reveal Secrets/Reveal Password Input', - RevealSecretsProtectedMask = 'Reveal Secrets/Reveal Secrets Protected Mask', - RevealSecretsValue = 'Reveal Secrets/Reveal Secrets Value' -} diff --git a/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx b/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx deleted file mode 100644 index 597594278..000000000 --- a/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { memo, useCallback } from 'react'; - -import { T } from 'lib/i18n'; -import { useTempleClient } from 'lib/temple/front'; -import { StoredHDAccount, TempleAccountType } from 'lib/temple/types'; -import { useDidUpdate, useVanishingState } from 'lib/ui/hooks'; -import { useAccount, useAllAccounts } from 'temple/front'; - -import { PasswordForRevealField } from './PasswordForRevealField'; -import { SecretField } from './SecretField'; - -export const RevealSeedPhrase = memo(() => { - const { revealMnemonic } = useTempleClient(); - - const allAccounts = useAllAccounts(); - const currentAccount = useAccount(); - const walletId = - currentAccount.type === TempleAccountType.HD - ? currentAccount.walletId - : allAccounts.find((acc): acc is StoredHDAccount => acc.type === TempleAccountType.HD)!.walletId; - - const [secret, setSecret] = useVanishingState(); - - // eslint-disable-next-line react-hooks/exhaustive-deps - useDidUpdate(() => void setSecret(null), [currentAccount.id, setSecret]); - - const onPasswordSubmit = useCallback( - async (password: string) => revealMnemonic(walletId, password).then(scrt => void setSecret(scrt)), - [revealMnemonic, walletId, setSecret] - ); - - return ( -
    - - - {secret ? ( - - ) : ( - - )} -
    - ); -}); - -const DerivationPathBanner = memo(() => ( -
    -

    - - - - - - - -

    - -

    Tezos:

    - -
    - - - -
    - -

    EVM:

    - -
    - {`m/44'/60'/0'/0/`} -
    -
    -)); diff --git a/src/app/templates/RevealSecrets/SecretField.tsx b/src/app/templates/RevealSecrets/SecretField.tsx deleted file mode 100644 index 6f22097c3..000000000 --- a/src/app/templates/RevealSecrets/SecretField.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { FC, useMemo } from 'react'; - -import { Alert } from 'app/atoms/Alert'; -import { ReadOnlySecretField } from 'app/atoms/ReadOnlySecretField'; -import { TID, T } from 'lib/i18n'; -import { SPACE_CHAR } from 'lib/ui/utils'; - -import { RevealSecretsSelectors } from './RevealSecrets.selectors'; - -interface Props { - revealType: 'private-key' | 'seed-phrase'; - value: string; -} - -interface Texts { - title: TID; - description: React.ReactNode; - attention: TID; -} - -export const SecretField: FC = ({ revealType, value }) => { - const texts = useMemo(() => { - switch (revealType) { - case 'private-key': - return { - title: 'privateKey', - description: , - attention: 'doNotSharePrivateKey' - }; - - case 'seed-phrase': - return { - title: 'seedPhrase', - description: ( - <> - - {SPACE_CHAR} - - - ), - attention: 'doNotSharePhrase' - }; - } - }, [revealType]); - - return ( - <> - - - } - description={ -

    - -

    - } - className="my-4" - /> - - ); -}; diff --git a/src/app/templates/RevealSecrets/index.ts b/src/app/templates/RevealSecrets/index.ts deleted file mode 100644 index 5d84754fe..000000000 --- a/src/app/templates/RevealSecrets/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { RevealSeedPhrase } from './RevealSeedPhrase'; -export { RevealPrivateKeys } from './RevealPrivateKeys'; diff --git a/src/lib/temple/back/actions.ts b/src/lib/temple/back/actions.ts index f2ec84fb5..c66e044e0 100644 --- a/src/lib/temple/back/actions.ts +++ b/src/lib/temple/back/actions.ts @@ -497,6 +497,10 @@ type ProcessedBeaconMessage = { encrypted?: boolean; }; +export function resetExtension(password: string) { + return withUnlocked(async () => Vault.reset(password)); +} + export async function processBeacon( origin: string, msg: string, diff --git a/src/lib/temple/back/main.ts b/src/lib/temple/back/main.ts index d68b27360..e0e379baa 100644 --- a/src/lib/temple/back/main.ts +++ b/src/lib/temple/back/main.ts @@ -272,6 +272,12 @@ const processRequest = async (req: TempleRequest, port: Runtime.Port): Promise { expectRecentTimestampInMs(createdAt); }); }); + + describe('reset', () => { + it('should reset wallet if the given password is correct', async () => { + await Vault.spawn(password, defaultMnemonic); + await Vault.setup(password); + await Vault.reset(password); + expect(await getPassHash()).toBeUndefined(); + expect(await Vault.isExist()).toBe(false); + }); + + it('should throw an error if the given password is incorrect', async () => { + await Vault.spawn(password, defaultMnemonic); + await Vault.setup(password); + await expect(() => Vault.reset(invalidPassword)).rejects.toThrow('Invalid password'); + }); + }); }); diff --git a/src/lib/temple/front/client.ts b/src/lib/temple/front/client.ts index a122ab165..958359287 100644 --- a/src/lib/temple/front/client.ts +++ b/src/lib/temple/front/client.ts @@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import constate from 'constate'; import { omit } from 'lodash'; +import browser from 'webextension-polyfill'; import { WALLETS_SPECS_STORAGE_KEY } from 'lib/constants'; import { useRetryableSWR } from 'lib/swr'; @@ -364,6 +365,16 @@ export const [TempleClientProvider, useTempleClient] = constate(() => { return res.sessions; }, []); + const resetExtension = useCallback(async (password: string) => { + const res = await request({ + type: TempleMessageType.ResetExtensionRequest, + password + }); + assertResponse(res.type === TempleMessageType.ResetExtensionResponse); + localStorage.clear(); + browser.runtime.reload(); + }, []); + return { state, @@ -408,6 +419,7 @@ export const [TempleClientProvider, useTempleClient] = constate(() => { confirmDAppOperation, confirmDAppSign, getAllDAppSessions, - removeDAppSession + removeDAppSession, + resetExtension }; }); diff --git a/src/lib/temple/types.ts b/src/lib/temple/types.ts index 7d360aa88..b74e52b6d 100644 --- a/src/lib/temple/types.ts +++ b/src/lib/temple/types.ts @@ -282,7 +282,9 @@ export enum TempleMessageType { SendTrackEventRequest = 'SEND_TRACK_EVENT_REQUEST', SendTrackEventResponse = 'SEND_TRACK_EVENT_RESPONSE', SendPageEventRequest = 'SEND_PAGE_EVENT_REQUEST', - SendPageEventResponse = 'SEND_PAGE_EVENT_RESPONSE' + SendPageEventResponse = 'SEND_PAGE_EVENT_RESPONSE', + ResetExtensionRequest = 'RESET_EXTENSION_REQUEST', + ResetExtensionResponse = 'RESET_EXTENSION_RESPONSE' } export type TempleNotification = @@ -325,7 +327,8 @@ export type TempleRequest = | TempleGetAllDAppSessionsRequest | TempleRemoveDAppSessionRequest | TempleSendTrackEventRequest - | TempleSendPageEventRequest; + | TempleSendPageEventRequest + | TempleResetExtensionRequest; export type TempleResponse = | TempleGetStateResponse @@ -361,7 +364,8 @@ export type TempleResponse = | TempleGetAllDAppSessionsResponse | TempleRemoveDAppSessionResponse | TempleSendTrackEventResponse - | TempleSendPageEventResponse; + | TempleSendPageEventResponse + | TempleResetExtensionResponse; export interface TempleMessageBase { type: TempleMessageType; @@ -731,4 +735,13 @@ interface TempleRemoveDAppSessionResponse extends TempleMessageBase { sessions: TempleDAppSessions; } +interface TempleResetExtensionRequest extends TempleMessageBase { + type: TempleMessageType.ResetExtensionRequest; + password: string; +} + +interface TempleResetExtensionResponse extends TempleMessageBase { + type: TempleMessageType.ResetExtensionResponse; +} + export type OperationsPreview = any[] | { branch: string; contents: any[] }; diff --git a/src/lib/ui/utils.ts b/src/lib/ui/utils.ts index 89c29ac15..de609cc99 100644 --- a/src/lib/ui/utils.ts +++ b/src/lib/ui/utils.ts @@ -2,15 +2,6 @@ import { MutableRefObject, ForwardedRef } from 'react'; import { browser } from 'lib/browser'; -/** For that the following is not allowed by Prettier: - * ```tsx - * - * {' '} // Use {SPACE_CHAR} instead - * - * ``` - */ -export const SPACE_CHAR = ' '; - export const combineRefs = ( ...refs: (MutableRefObject | ForwardedRef | nullish)[] ) => { diff --git a/src/temple/front/index.ts b/src/temple/front/index.ts index 1528ca3c1..d058cecf1 100644 --- a/src/temple/front/index.ts +++ b/src/temple/front/index.ts @@ -11,7 +11,6 @@ export { useAccountAddressForTezos, useAccountForTezos, useAccountAddressForEvm, - useAccountForEvm, useSetAccountId as useChangeAccount, // useHDGroups diff --git a/src/temple/front/ready/index.ts b/src/temple/front/ready/index.ts index 94c7d60a8..f0e29a323 100644 --- a/src/temple/front/ready/index.ts +++ b/src/temple/front/ready/index.ts @@ -23,7 +23,6 @@ export const [ useAccountAddressForTezos, useAccountForTezos, useAccountAddressForEvm, - useAccountForEvm, useSetAccountId, // useSettings, @@ -44,7 +43,6 @@ export const [ v => v.accountAddressForTezos, v => v.accountForTezos, v => v.accountAddressForEvm, - v => v.accountForEvm, v => v.setAccountId, // v => v.settings, diff --git a/yarn.lock b/yarn.lock index 5b1d12ff3..ebc125434 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1605,24 +1605,24 @@ integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== "@dicebear/bottts-neutral@^8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@dicebear/bottts-neutral/-/bottts-neutral-8.0.1.tgz#22f2547cd74669f5fc38ffd5298f083b049daaba" - integrity sha512-krbD3U+UvzlY+kfQDpg9Hql1xJmmu3y9ensiU+XZXiuNw/ZavgGqpJtzpbYeF3J5GsggQlbBh/ZAK9AIKz7S3Q== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@dicebear/bottts-neutral/-/bottts-neutral-8.0.2.tgz#4e3ff249202c570acd79e5cbfc4dc14a6a403962" + integrity sha512-khiccnWoo0ivb+3PyneuWcL4bJc9+izAFFKIXvE3h7ozOT6VCT4h2WtYULaPwDYBAr85CygxgdWKd7aAujK6JQ== -"@dicebear/converter@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@dicebear/converter/-/converter-8.0.1.tgz#c037c1404f73a994ee4f943928edb367029425e1" - integrity sha512-65L04fN4V07WcUnwQuDYDH+zrP8WA6/UeIuqqH/Pv7VWoJtIk9qHlaA+XGpPr4qgRtkmY7uXVkrED/RMlqvUDA== +"@dicebear/converter@8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@dicebear/converter/-/converter-8.0.2.tgz#a1c5e8c8d324d80512786a7e8a0f3788c210ca83" + integrity sha512-mREmyQLIfHnt30Xzjc9ZHgDgIzbF7BXApBCYolnB2kO2Kpb14OdmsyLRsYe/Tt+Vt6sLgiigWoZFcRvbStRhLA== dependencies: "@types/json-schema" "^7.0.11" tmp-promise "^3.0.3" "@dicebear/core@^8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@dicebear/core/-/core-8.0.1.tgz#3ac1e98a5380071c4a1e0d874cc8ff83b1c9ba8f" - integrity sha512-HWqvQRpVjkboQXinCOjU3poZIMd5p+32wPvc9N5fYiXe3KQLhJNw5T5XiRttDUm3XpoTvhQ4DVTPDsXT8CqrTg== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@dicebear/core/-/core-8.0.2.tgz#6d42cbdd1ae11a6bb344e71ddefbc654ee3f3f4f" + integrity sha512-Zr3dBAH+6BBYc2kjz7KvJCMYasQlsY9CZ7D3abgZhk/XRT4B3qxo8kP+FL8YjJvrOJyV2P7h08BAKZlTWuKXPA== dependencies: - "@dicebear/converter" "8.0.1" + "@dicebear/converter" "8.0.2" "@types/json-schema" "^7.0.11" "@discoveryjs/json-ext@^0.5.0":