From 5bcd5835dd9e1a4f5cec5218cc309a073aa18550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20Alvarez?= Date: Mon, 12 Aug 2024 17:35:22 +0200 Subject: [PATCH 1/3] refactor: mnemonic success page --- .../app/pages/accounts/BackupMnemonicPage.tsx | 198 +++++++----------- 1 file changed, 76 insertions(+), 122 deletions(-) diff --git a/apps/wallet/src/ui/app/pages/accounts/BackupMnemonicPage.tsx b/apps/wallet/src/ui/app/pages/accounts/BackupMnemonicPage.tsx index 329f37f3d93..b91da4910a9 100644 --- a/apps/wallet/src/ui/app/pages/accounts/BackupMnemonicPage.tsx +++ b/apps/wallet/src/ui/app/pages/accounts/BackupMnemonicPage.tsx @@ -2,10 +2,6 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { CardLayout } from '_app/shared/card-layout'; -import Alert from '_components/alert'; -import Loading from '_components/loading'; -import { PageTemplate } from '_components/PageTemplate'; import { Button, ButtonType, @@ -15,165 +11,123 @@ import { InfoBoxType, TextArea, } from '@iota/apps-ui-kit'; -import { Info } from '@iota/ui-icons'; +import { Exclamation, Info } from '@iota/ui-icons'; import { useEffect, useMemo, useState } from 'react'; -import { Navigate, useLocation, useNavigate, useParams } from 'react-router-dom'; import toast from 'react-hot-toast'; +import { Navigate, useNavigate, useParams } from 'react-router-dom'; -import { VerifyPasswordModal } from '../../components/accounts/VerifyPasswordModal'; +import { PageTemplate } from '_components/PageTemplate'; +import Loading from '_components/loading'; +import { AccountSourceType } from '_src/background/account-sources/AccountSource'; import { useAccountSources } from '../../hooks/useAccountSources'; import { useExportPassphraseMutation } from '../../hooks/useExportPassphraseMutation'; -import { AccountSourceType } from '_src/background/account-sources/AccountSource'; export function BackupMnemonicPage() { - const [passwordCopied, setPasswordCopied] = useState(false); - const [passphraseCopied, setPassphraseCopied] = useState(false); + const [mnemonicCopied, setMnemonicCopied] = useState(false); + const [mnemonicBackedUp, setMnemonicBackedUp] = useState(false); - const { state } = useLocation(); const { accountSourceID } = useParams(); const { data: accountSources, isPending } = useAccountSources(); const selectedSource = useMemo( () => accountSources?.find(({ id }) => accountSourceID === id), [accountSources, accountSourceID], ); - const isOnboardingFlow = !!state?.onboarding; - - const [showPasswordDialog, setShowPasswordDialog] = useState(false); - const [passwordConfirmed, setPasswordConfirmed] = useState(false); - const requirePassword = !isOnboardingFlow || !!selectedSource?.isLocked; const passphraseMutation = useExportPassphraseMutation(); + + const navigate = useNavigate(); + if (!isPending && selectedSource?.type !== AccountSourceType.Mnemonic) { + return ; + } + useEffect(() => { (async () => { - if ( - (requirePassword && !passwordConfirmed) || - !passphraseMutation.isIdle || - !accountSourceID - ) { + if (!passphraseMutation.isIdle || !accountSourceID) { return; } passphraseMutation.mutate({ accountSourceID: accountSourceID }); })(); - }, [requirePassword, passwordConfirmed, accountSourceID, passphraseMutation]); - useEffect(() => { - if (requirePassword && !passwordConfirmed && !showPasswordDialog) { - setShowPasswordDialog(true); - } - }, [requirePassword, passwordConfirmed, showPasswordDialog]); - const navigate = useNavigate(); - if (!isPending && selectedSource?.type !== AccountSourceType.Mnemonic) { - return ; - } + }, [accountSourceID, passphraseMutation]); - const handleCopy = async () => { + async function handleCopy() { if (!passphraseMutation?.data) { return; } try { await navigator.clipboard.writeText(passphraseMutation.data.join(' ')); - setPassphraseCopied(true); + setMnemonicCopied(true); setTimeout(() => { - setPassphraseCopied(false); + setMnemonicCopied(false); }, 1000); } catch { toast.error('Failed to copy'); } - }; + } return ( - {showPasswordDialog ? ( - - { - navigate(-1); - }} - onVerify={async (password) => { - await passphraseMutation.mutateAsync({ - password, - accountSourceID: selectedSource!.id, - }); - setPasswordConfirmed(true); - setShowPasswordDialog(false); - }} +
+
+

+ Wallet Created Successfully! +

+ } + type={InfoBoxType.Default} + title={ + 'Never disclose your secret mnemonic. Anyone can take over your wallet with it.' + } + style={InfoBoxStyle.Default} /> - - ) : ( -
-
- {isOnboardingFlow && ( -

- Wallet Created Successfully! -

- )} - } - type={InfoBoxType.Default} - title={ - 'Never disclose your secret mnemonic. Anyone can take over your wallet with it.' - } - style={InfoBoxStyle.Default} - /> -
- - {passphraseMutation.data ? ( - <> -