mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
SRP hold to reveal (#17232)
* refactor class to functional component * update messages * fix: use classnames * feat: add hold to reveal modal * feat: add new zendesk url for secret recovery phrase and noncustodial wallet * update: clipboard to clear copied text after delay * fix: remove save to csv * feat: update styles for reveal seed page * fix: update reveal seed snapshot * add test to check for modal * fix: lint * fix: unused messages locale * fix: use new banner component * fix: use new button from design system * fix: update snapshot * fix: lint * revert text * fix: lint * fix: remove --copy-only * fix: marginBottom prop value * fix: iconName and prop error * --made the QR code slightly smaller so it's less likely to have a scrollbar --updated the snapshots * fix: error message not displaying * SRP hold to reveal using more DS components (#17583) * Updating to add DS components and remove CSS * Fixing rendered html and removing some unneeded props * fix: set block to true --------- Co-authored-by: Monte <monte.lai@consensys.net> * fix: add descriptions to messages * Update ui/components/ui/export-text-container/export-text-container.component.js fix: lint Co-authored-by: HowardBraham <HowardBraham@users.noreply.github.com> * fix: remove using displayWarning in requestRevealSeedWords * fix: update test to remove displayError * fix: update design system enums * fix: messages descriptions * fix: banner to banneralert * fix: update preview * add additional tests * fix: use jest instead of sinon * add test if long press isn't completed * add test if password is wrong --------- Co-authored-by: Howard Braham <howrad@gmail.com> Co-authored-by: George Marshall <george.marshall@consensys.net>
This commit is contained in:
parent
52b3d58cc3
commit
cdc1bce688
12
app/_locales/am/messages.json
generated
12
app/_locales/am/messages.json
generated
@ -630,14 +630,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "የዘር ቃላትን ይግለጹ"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "ማሰሺያዎችን ከቀየሩ ወይም ኮምፒዩተሮቸን ከአንድ ቦታ ወደ ሌላ ቦታ ካንቀሳቀሱ፣ ወደ መለያዎችዎ ለመድረስ ይህ የዘር ሐረግ ያስፈልግዎታል። ደህንነቱና ሚስጥራዊነቱ በተጠበቀ ቦታ ያስቀምጧቸው።"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "እነዚህ ቃላት ሁሉንም መለያዎችዎን ለመስረቅ ሊውሉ ይችላሉ።"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "ይህን ሐረግ ለየትኛውም ሰው አያጋሩ!"
|
||||
"message": "እነዚህ ቃላት ሁሉንም መለያዎችዎን ለመስረቅ ሊውሉ ይችላሉ።",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "አዲስ የ RPC URL"
|
||||
@ -645,9 +640,6 @@
|
||||
"save": {
|
||||
"message": "አስቀምጥ"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "እንደ CSV ፋይል አስቀምጥ"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "የ QR ኮዱን ከካሜራዎ ፊት ለፊት ያስቀምጡ"
|
||||
},
|
||||
|
12
app/_locales/ar/messages.json
generated
12
app/_locales/ar/messages.json
generated
@ -642,14 +642,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "كشف كلمات عبارات الأمان"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "إذا كنت تنوي تغيير المتصفحات أو نقل أجهزة الكمبيوتر في أي وقت، فسوف تحتاج إلى عبارة الأمان هذه للوصول إلى حساباتك. احفظها في مكان آمن وسري."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "يمكن استخدام هذه الكلمات لسرقة جميع حساباتك."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "لا تشارك هذه الجملة مع أي شخص آخر!"
|
||||
"message": "يمكن استخدام هذه الكلمات لسرقة جميع حساباتك.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "عنوان جديد لاستدعاء الإجراء عن بعد"
|
||||
@ -657,9 +652,6 @@
|
||||
"save": {
|
||||
"message": "حفظ"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "حفظ كملف CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "ضع رمز الاستجابة السريعة أمام الكاميرا"
|
||||
},
|
||||
|
12
app/_locales/bg/messages.json
generated
12
app/_locales/bg/messages.json
generated
@ -641,14 +641,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Разкрий думите зародиш"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ако някога смените браузъра или компютъра си, тази ключова фраза ще Ви трябва за достъп до Вашите акаунти. Запазете я някъде на сигурно и тайно място."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Тези думи могат да бъдат използвани за кражба на всички ваши акаунти."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "НЕ споделяйте тази фраза с никого!"
|
||||
"message": "Тези думи могат да бъдат използвани за кражба на всички ваши акаунти.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Нов URL адрес за RPC"
|
||||
@ -656,9 +651,6 @@
|
||||
"save": {
|
||||
"message": "Запазване"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Запазване като CSV файл"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Поставете QR кода пред камерата"
|
||||
},
|
||||
|
12
app/_locales/bn/messages.json
generated
12
app/_locales/bn/messages.json
generated
@ -645,14 +645,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "সীড শব্দগুলি প্রকাশ করুন"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "আপনি কখনও ব্রাউজার পরিবর্তন করলে বা এক কম্পিউটার থেকে অন্য কম্পিউটারে গেলে, আপনাকে আপনার অ্যাকাউন্ট অ্যাক্সেস করার জন্য এই সীড ফ্রেজটি লাগবে। সেগুলি নিরাপদ ও গোপনীয় কোনো স্থানে সংরক্ষণ করুন। "
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "আপনার সমস্ত অ্যাকাউন্ট চুরি করতে এই শব্দগুলি ব্যবহার করা যাবে।"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "এই ফ্রেজটি কারোর সাথে শেয়ার করবেন না!"
|
||||
"message": "আপনার সমস্ত অ্যাকাউন্ট চুরি করতে এই শব্দগুলি ব্যবহার করা যাবে।",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "নতুন RPC URL"
|
||||
@ -660,9 +655,6 @@
|
||||
"save": {
|
||||
"message": "সেভ করুন"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSV ফাইল হিসাবে সংরক্ষণ করুন"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "QR কোডটি আপনার ক্যামেরার সামনে ধরুন"
|
||||
},
|
||||
|
12
app/_locales/ca/messages.json
generated
12
app/_locales/ca/messages.json
generated
@ -623,14 +623,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revelar Paraules de Recuperació"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Si mai canvies el navegador o l'ordinador, necessitaràs aquesta frase de recuperació per accedir als teus comptes. Guarda-la a un lloc segur i secret."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Aquestes paraules poden ser utilitzades per a robar tots els teus comptes."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NO comparteixis aquesta frase amb ningú!"
|
||||
"message": "Aquestes paraules poden ser utilitzades per a robar tots els teus comptes.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nova URL de RPC"
|
||||
@ -638,9 +633,6 @@
|
||||
"save": {
|
||||
"message": "Desa"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Guarda com a Arxiu CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Col·loca el codi QR davant la teva càmera"
|
||||
},
|
||||
|
3
app/_locales/cs/messages.json
generated
3
app/_locales/cs/messages.json
generated
@ -293,7 +293,8 @@
|
||||
"message": "Zobrazit slova klíčové fráze"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů."
|
||||
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "Uložit"
|
||||
|
12
app/_locales/da/messages.json
generated
12
app/_locales/da/messages.json
generated
@ -626,14 +626,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Vis Seedord"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Hvis du nogensinde skifter browsere eller flytter computere, har du brug for denne backupsætning for at få adgang til dine konti. Gem den et sted sikkert og hemmeligt."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Disse ord kan bruges til at stjæle alle dine konti."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "DEL IKKE denne sætning med nogen!"
|
||||
"message": "Disse ord kan bruges til at stjæle alle dine konti.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Ny RPC-URL"
|
||||
@ -641,9 +636,6 @@
|
||||
"save": {
|
||||
"message": "Gem"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Gem som CSV-fil"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Placer QR-koden foran dit kamera"
|
||||
},
|
||||
|
12
app/_locales/de/messages.json
generated
12
app/_locales/de/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Seed-Wörterfolge anzeigen"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Wenn Sie einmal Ihren Browser oder Computer wechseln, benötigen Sie diesen Seed-Schlüssel, um auf Ihre Konten zuzugreifen. Bewahren Sie ihn an einem sicheren und geheimen Ort auf."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Bitte niemals deine Seed-Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Zeigen Sie diesen Schlüssel KEINER ANDEREN PERSON!"
|
||||
"message": "Bitte niemals deine Seed-Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Seed-Phrase anzeigen"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Speichern"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Als CSV-Datei speichern"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Platzieren Sie den QR-Code vor Ihrer Kamera."
|
||||
},
|
||||
|
12
app/_locales/el/messages.json
generated
12
app/_locales/el/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Αποκάλυψη Λέξεων Μυστικής Φράσης Ανάκτησης"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Εάν αλλάξετε ποτέ προγράμματα περιήγησης ή μετακινήσετε υπολογιστές, θα χρειαστείτε αυτήν τη Μυστική Φράση Ανάκτησης για να αποκτήσετε πρόσβαση στους λογαριασμούς σας. Αποθηκεύστε την κάπου με ασφάλεια και μυστικότητα."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Αυτές οι λέξεις μπορούν να χρησιμοποιηθούν για να κλαπούν όλοι οι λογαριασμοί σας."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "ΜΗΝ ΜΟΙΡΑΣΤΕΙΤΕ αυτήν τη φράση με κανέναν!"
|
||||
"message": "Αυτές οι λέξεις μπορούν να χρησιμοποιηθούν για να κλαπούν όλοι οι λογαριασμοί σας.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Αποκάλυψη φράσης ανάκτησης"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Αποθήκευση"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Αποθηκεύστε ως Αρχείο CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Τοποθετήστε τον κώδικα QR μπροστά από την κάμερά σας"
|
||||
},
|
||||
|
67
app/_locales/en/messages.json
generated
67
app/_locales/en/messages.json
generated
@ -828,7 +828,7 @@
|
||||
"message": "CoolWallet"
|
||||
},
|
||||
"copiedExclamation": {
|
||||
"message": "Copied!"
|
||||
"message": "Copied."
|
||||
},
|
||||
"copyAddress": {
|
||||
"message": "Copy address to clipboard"
|
||||
@ -1570,6 +1570,32 @@
|
||||
"history": {
|
||||
"message": "History"
|
||||
},
|
||||
"holdToReveal": {
|
||||
"message": "Hold to reveal SRP"
|
||||
},
|
||||
"holdToRevealContent1": {
|
||||
"message": "Your Secret Recovery Phrase provides $1",
|
||||
"description": "$1 is a bolded text with the message from 'holdToRevealContent2'"
|
||||
},
|
||||
"holdToRevealContent2": {
|
||||
"message": "full access to your wallet and funds.",
|
||||
"description": "Is the bolded text in 'holdToRevealContent1'"
|
||||
},
|
||||
"holdToRevealContent3": {
|
||||
"message": "Do not share this with anyone. $1 $2",
|
||||
"description": "$1 is a message from 'holdToRevealContent4' and $2 is a text link with the message from 'holdToRevealContent5'"
|
||||
},
|
||||
"holdToRevealContent4": {
|
||||
"message": "MetaMask Support will not request this,",
|
||||
"description": "Part of 'holdToRevealContent3'"
|
||||
},
|
||||
"holdToRevealContent5": {
|
||||
"message": "but phishers might.",
|
||||
"description": "The text link in 'holdToRevealContent3'"
|
||||
},
|
||||
"holdToRevealTitle": {
|
||||
"message": "Keep your SRP safe"
|
||||
},
|
||||
"ignoreAll": {
|
||||
"message": "Ignore all"
|
||||
},
|
||||
@ -1898,7 +1924,7 @@
|
||||
"message": "Create a new swap"
|
||||
},
|
||||
"makeSureNoOneWatching": {
|
||||
"message": "Make sure no one is watching your screen",
|
||||
"message": "Make sure nobody is looking",
|
||||
"description": "Warning to users to be care while creating and saving their new Secret Recovery Phrase"
|
||||
},
|
||||
"malformedData": {
|
||||
@ -2993,14 +3019,36 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Reveal Secret Recovery Phrase"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "If you ever change browsers or move computers, you will need this Secret Recovery Phrase to access your accounts. Save them somewhere safe and secret."
|
||||
"revealSeedWordsDescription1": {
|
||||
"message": "The $1 provides $2",
|
||||
"description": "This is a sentence consisting of link using 'revealSeedWordsSRPName' as $1 and bolded text using 'revealSeedWordsDescription3' as $2."
|
||||
},
|
||||
"revealSeedWordsDescription2": {
|
||||
"message": "MetaMask is a $1. That means you're the owner of your SRP.",
|
||||
"description": "$1 is text link with the message from 'revealSeedWordsNonCustodialWallet'"
|
||||
},
|
||||
"revealSeedWordsDescription3": {
|
||||
"message": "full access to your wallet and funds.\n"
|
||||
},
|
||||
"revealSeedWordsNonCustodialWallet": {
|
||||
"message": "non-custodial wallet"
|
||||
},
|
||||
"revealSeedWordsQR": {
|
||||
"message": "QR"
|
||||
},
|
||||
"revealSeedWordsSRPName": {
|
||||
"message": "Secret Recovery Phrase (SRP)"
|
||||
},
|
||||
"revealSeedWordsText": {
|
||||
"message": "Text"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "These words can be used to steal all your accounts."
|
||||
"message": "Make sure no one is looking at your screen. $1",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "DO NOT share this phrase with anyone!"
|
||||
"revealSeedWordsWarning2": {
|
||||
"message": "MetaMask Support will never request this.",
|
||||
"description": "The bolded texted in the second part of 'revealSeedWordsWarning'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Reveal seed phrase"
|
||||
@ -3032,9 +3080,6 @@
|
||||
"save": {
|
||||
"message": "Save"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Save as CSV file"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Place the QR code in front of your camera"
|
||||
},
|
||||
@ -4481,7 +4526,7 @@
|
||||
"message": "Your NFT may be at risk"
|
||||
},
|
||||
"yourPrivateSeedPhrase": {
|
||||
"message": "Your private Secret Recovery Phrase"
|
||||
"message": "Your Secret Recovery Phrase"
|
||||
},
|
||||
"zeroGasPriceOnSpeedUpError": {
|
||||
"message": "Zero gas price on speed up"
|
||||
|
12
app/_locales/es/messages.json
generated
12
app/_locales/es/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revelar frase secreta de recuperación"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Si alguna vez cambia de explorador o de equipo, necesitará esta frase secreta de recuperación para acceder a sus cuentas. Guárdela en un lugar seguro y secreto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Estas palabras pueden usarse para robar todas sus cuentas."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NO comparta esta frase con nadie."
|
||||
"message": "Estas palabras pueden usarse para robar todas sus cuentas.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Revelar frase semilla"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Guardar"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Guardar como archivo CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Ponga el código QR frente a la cámara"
|
||||
},
|
||||
|
12
app/_locales/es_419/messages.json
generated
12
app/_locales/es_419/messages.json
generated
@ -1990,14 +1990,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revelar frase secreta de recuperación"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Si alguna vez cambia de explorador o de equipo, necesitará esta frase secreta de recuperación para acceder a sus cuentas. Guárdela en un lugar seguro y secreto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Estas palabras pueden usarse para robar todas sus cuentas."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "¡NO comparta esta frase con nadie!"
|
||||
"message": "Estas palabras pueden usarse para robar todas sus cuentas.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nueva dirección URL de RPC"
|
||||
@ -2005,9 +2000,6 @@
|
||||
"save": {
|
||||
"message": "Guardar"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Guardar como archivo CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Ponga el código QR frente a la cámara"
|
||||
},
|
||||
|
12
app/_locales/et/messages.json
generated
12
app/_locales/et/messages.json
generated
@ -635,14 +635,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Kuva seemnesõnu"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Kui vahetate veebilehitsejat või arvutit, vajate oma kontodele ligipääsemiseks seemnefraasi. Hoidke seda turvalises ja salajases kohas."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Neid sõnu saab kasutada kõigi teie kontode tühjendamiseks."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "ÄRGE jagage seda fraasi mitte kellegagi!"
|
||||
"message": "Neid sõnu saab kasutada kõigi teie kontode tühjendamiseks.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Uus RPC URL"
|
||||
@ -650,9 +645,6 @@
|
||||
"save": {
|
||||
"message": "Salvesta"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Salvesta CSV-failina"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Asetage QR-kood kaamera ette"
|
||||
},
|
||||
|
12
app/_locales/fa/messages.json
generated
12
app/_locales/fa/messages.json
generated
@ -645,14 +645,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "کلمات بازیاب را آشکار کنید"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "در صورتیکه شما معمولًا براوزر ها را تغییر داده یا کمپیوتر ها را انتقال میدهید، شما این عبارت آغازین را نیاز خواهید داشت تا به حساب های تان دسترسی داشته باشید. آنها را در یکجای مصؤن و مخفی نگهدارید."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "این کلمات را میتوان جهت سرقت همه حساب های تان استفاده نمود."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "این عبارت را با هیچکس شریک نسازید!"
|
||||
"message": "این کلمات را میتوان جهت سرقت همه حساب های تان استفاده نمود.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "RPC URL جدید"
|
||||
@ -660,9 +655,6 @@
|
||||
"save": {
|
||||
"message": "ذخیره"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "ذخیره منحیث فایل CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "رمز QR را در مقابل کمره تان قرار دهید"
|
||||
},
|
||||
|
12
app/_locales/fi/messages.json
generated
12
app/_locales/fi/messages.json
generated
@ -642,14 +642,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Paljasta salaussanat"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Mikäli vaihdat jossakin vaiheessa selainta tai tietokonetta, tarvitset tämän salaustekstin tiliesi käyttämiseen. Tallenna se johonkin turvalliseen ja salaiseen paikkaan."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Näitä sanoja voidaan käyttää kaikkien tiliesi ryöstämiseen."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "ÄLÄ jaa tätä tekstiä kenellekään!"
|
||||
"message": "Näitä sanoja voidaan käyttää kaikkien tiliesi ryöstämiseen.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Uusi RPC:n URL"
|
||||
@ -657,9 +652,6 @@
|
||||
"save": {
|
||||
"message": "Tallenna"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Tallenna CSV-tiedostona"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Aseta QR-koodi kamerasi eteen"
|
||||
},
|
||||
|
12
app/_locales/fil/messages.json
generated
12
app/_locales/fil/messages.json
generated
@ -572,14 +572,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Ipakita ang Seed Words"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Kung lilipat ka ng browser o magpapalit ka ng computer, kakailanganin mo ang seed phrase na ito para ma-access ang iyong mga account. I-save ang mga iyon sa isang lugar na ligtas at lihim."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Maaaring gamitin ang mga salitang ito para nakawin ang lahat ng iyong account."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "HUWAG ibahagi ang pariralang ito sa kahit sino!"
|
||||
"message": "Maaaring gamitin ang mga salitang ito para nakawin ang lahat ng iyong account.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Bagong RPC URL"
|
||||
@ -587,9 +582,6 @@
|
||||
"save": {
|
||||
"message": "I-save"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "I-save bilang CSV File"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Ilagay ang QR code sa harap ng iyong camera"
|
||||
},
|
||||
|
12
app/_locales/fr/messages.json
generated
12
app/_locales/fr/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Révéler la phrase secrète de récupération"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Si jamais vous changez de navigateur ou d’ordinateur, vous aurez besoin de cette phrase secrète de récupération pour accéder à vos comptes. Sauvegardez-la dans un emplacement sûr et secret."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Ces mots peuvent être utilisés pour voler tous vos comptes."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Ne communiquez PAS cette phrase à quelqu’un !"
|
||||
"message": "Ces mots peuvent être utilisés pour voler tous vos comptes.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Révéler la phrase mnémonique"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Enregistrer"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Enregistrer comme fichier CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Placez le code QR devant votre appareil photo"
|
||||
},
|
||||
|
12
app/_locales/he/messages.json
generated
12
app/_locales/he/messages.json
generated
@ -642,14 +642,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "גלה מילות Seed"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "אם בעתיד תחליף/י דפדפנים או תעביר/י מחשבים, תצטרך/י seed phrase זה כדי לקבל גישה לחשבונות שלך. יש לשמור אותם במקום בטוח וסודי."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "במילים אלה עלול להיעשות שימוש כדי לגנוב את כל חשבונותיך."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "אין לשתף צירוף מילים זה עם אף אחד!"
|
||||
"message": "במילים אלה עלול להיעשות שימוש כדי לגנוב את כל חשבונותיך.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "כתובת URL חדשה של RPC"
|
||||
@ -657,9 +652,6 @@
|
||||
"save": {
|
||||
"message": "שמור"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "שמירה כקובץ CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "הצב/י את קוד ה-QR שלך מול המצלמה"
|
||||
},
|
||||
|
12
app/_locales/hi/messages.json
generated
12
app/_locales/hi/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "गुप्त रिकवरी फ्रेज प्रकट करें"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "यदि आप कभी ब्राउजर बदलते हैं या कंप्यूटर को स्थानांतरित करते हैं, तो आपको अपने खातों तक पहुंचने के लिए इस गुप्त रिकवरी फ्रेज की आवश्यकता होगी। उन्हें कहीं सुरक्षित और गोपनीय तरीके से सहेजें।"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "इन शब्दों का उपयोग आपके सभी खातों को चुराने के लिए किया जा सकता है।"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "इस फ्रेज को किसी के साथ साझा न करें!"
|
||||
"message": "इन शब्दों का उपयोग आपके सभी खातों को चुराने के लिए किया जा सकता है।",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "सीड फ़्रेज़ दिखाएं"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "सहेजें"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSV फाइल के रूप में सहेजें"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "QR कोड को अपने कैमरे के सामने रखें"
|
||||
},
|
||||
|
3
app/_locales/hn/messages.json
generated
3
app/_locales/hn/messages.json
generated
@ -270,7 +270,8 @@
|
||||
"message": "बीज शब्द प्रकट करें"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "किसी सार्वजनिक स्थान पर अपने बीज के शब्द ठीक नहीं करें! ये शब्द आपके सभी खातों को चोरी करने के लिए उपयोग किए जा सकते हैं।"
|
||||
"message": "किसी सार्वजनिक स्थान पर अपने बीज के शब्द ठीक नहीं करें! ये शब्द आपके सभी खातों को चोरी करने के लिए उपयोग किए जा सकते हैं।",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "सहेजें"
|
||||
|
12
app/_locales/hr/messages.json
generated
12
app/_locales/hr/messages.json
generated
@ -638,14 +638,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Otkrij početne riječi"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ako ikada promijenite preglednike ili računala, trebate ovu početnu rečenicu za pristupanje svojim računima. Spremite ih negdje na sigurno i tajno mjesto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Ove se riječi mogu upotrijebiti za krađu vaših računa."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NE DIJELITE ovu rečenicu ni s kim!"
|
||||
"message": "Ove se riječi mogu upotrijebiti za krađu vaših računa.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Novi URL RPC-a"
|
||||
@ -653,9 +648,6 @@
|
||||
"save": {
|
||||
"message": "Spremi"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Spremi kao datoteku CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Postavite kôd QR ispred kamere"
|
||||
},
|
||||
|
12
app/_locales/ht/messages.json
generated
12
app/_locales/ht/messages.json
generated
@ -458,21 +458,13 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revele Seed Mo Yo"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Si ou pa janm chanje navigatè ou deplase òdinatè, ou pral bezwen fraz seed la pou ka gen aksè a kont ou. Sere yo on kote an sekirite e an sekrè."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Yo ka itilize mo sa pou vòlè kont ou."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "PA pataje fraz sa a avèk nenpòt moun!"
|
||||
"message": "Yo ka itilize mo sa pou vòlè kont ou.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "Sove"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Sove kòm dosye CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Mete kòd QR la devan kamera ou"
|
||||
},
|
||||
|
12
app/_locales/hu/messages.json
generated
12
app/_locales/hu/messages.json
generated
@ -638,14 +638,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Seed szavak megjelenítése"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ha valamikor böngészőt váltasz, vagy számítógépet cserélsz, a fiókjaid használatához szükséged lesz erre a kulcsszóláncra. Őrizd őket egy biztonságos és titkos helyen."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Ezekkel a szavakkal ellophatóak a fiókjai."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NE ossza meg ezt a mondatot senkivel!"
|
||||
"message": "Ezekkel a szavakkal ellophatóak a fiókjai.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Új RPC URL"
|
||||
@ -653,9 +648,6 @@
|
||||
"save": {
|
||||
"message": "Mentés"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Mentés CSV-fájlként"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Helyezze a QR-kódot a fényképezőgép elé"
|
||||
},
|
||||
|
12
app/_locales/id/messages.json
generated
12
app/_locales/id/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Tampilkan Frasa Pemulihan Rahasia"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Jika Anda pernah mengubah peramban atau mengganti komputer, Frasa Pemulihan Rahasia ini akan berguna untuk mengakses akun Anda. Simpan di tempat yang aman dan rahasia."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Kata-kata ini dapat digunakan untuk mencuri semua akun Anda."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "JANGAN bagikan frasa ini kepada siapa pun!"
|
||||
"message": "Kata-kata ini dapat digunakan untuk mencuri semua akun Anda.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Ungkap frasa seed"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Simpan"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Simpan sebagai file CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Tempatkan kode QR di bagian depan kamera Anda"
|
||||
},
|
||||
|
12
app/_locales/it/messages.json
generated
12
app/_locales/it/messages.json
generated
@ -1508,14 +1508,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Rivela Frase Seed"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Se cambierai browser o computer, ti servirà questa frase seed per accedere ai tuoi account. Salvala in un posto sicuro e segreto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Non ripristinare la tua frase seed in pubblico!. Queste parole possono essere usate per rubare il tuo account."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NON CONDIVIDERE questa frase con nessuno!"
|
||||
"message": "Non ripristinare la tua frase seed in pubblico!. Queste parole possono essere usate per rubare il tuo account.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nuovo URL RPC"
|
||||
@ -1523,9 +1518,6 @@
|
||||
"save": {
|
||||
"message": "Salva"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Salva Come File CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Posizione il codice QR davanti alla fotocamera"
|
||||
},
|
||||
|
12
app/_locales/ja/messages.json
generated
12
app/_locales/ja/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "シークレットリカバリーフレーズを公開"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "ブラウザを変更した場合や、コンピューターを移動した場合は、アカウントにアクセスするためにこのシークレットリカバリーフレーズが必要になります。安全な秘密の場所に保管してください。"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "これらの単語を使用すると、すべてのアカウントを窃取することができます。"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "このフレーズは誰にも教えないでください。"
|
||||
"message": "これらの単語を使用すると、すべてのアカウントを窃取することができます。",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "シードフレーズを表示"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "保存"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSVファイルとして保存"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "QRコードにカメラを向けてください"
|
||||
},
|
||||
|
12
app/_locales/kn/messages.json
generated
12
app/_locales/kn/messages.json
generated
@ -645,14 +645,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "ಸೀಡ್ ವರ್ಡ್ಸ್ ಬಹಿರಂಗಪಡಿಸಿ"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "ನೀವು ಬ್ರೌಸರ್ಗಳನ್ನು ಬದಲಾಯಿಸಿದರೆ ಅಥವಾ ಕಂಪ್ಯೂಟರ್ಗಳನ್ನು ಸರಿಸಿದರೆ, ನಿಮ್ಮ ಖಾತೆಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ನಿಮಗೆ ಈ ಸೀಡ್ ಫ್ರೇಸ್ಗಳ ಅಗತ್ಯವಿರುತ್ತದೆ. ಅವುಗಳನ್ನು ಎಲ್ಲಿಯಾದರೂ ಸುರಕ್ಷಿತವಾಗಿ ಮತ್ತು ರಹಸ್ಯವಾಗಿ ಉಳಿಸಿ."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "ಈ ಪದಗಳನ್ನು ನಿಮ್ಮ ಎಲ್ಲಾ ಖಾತೆಗಳನ್ನು ಕದಿಯಲು ಬಳಸಬಹುದು."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "ಈ ಫ್ರೇಸ್ ಅನ್ನು ಯಾರೊಂದಿಗೂ ಹಂಚಿಕೊಳ್ಳಬೇಡಿ!"
|
||||
"message": "ಈ ಪದಗಳನ್ನು ನಿಮ್ಮ ಎಲ್ಲಾ ಖಾತೆಗಳನ್ನು ಕದಿಯಲು ಬಳಸಬಹುದು.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "ಹೊಸ RPC URL"
|
||||
@ -660,9 +655,6 @@
|
||||
"save": {
|
||||
"message": "ಉಳಿಸು"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSV ಫೈಲ್ ರೂಪದಲ್ಲಿ ಉಳಿಸಿ"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "ನಿಮ್ಮ ಕ್ಯಾಮರಾದ ಮುಂದೆ QR ಕೋಡ್ ಇರಿಸಿ"
|
||||
},
|
||||
|
12
app/_locales/ko/messages.json
generated
12
app/_locales/ko/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "비밀 복구 구문 공개"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "브라우저를 변경하거나 컴퓨터를 옮긴 경우, 계정에 액세스하려면 이 비밀 복구 구문이 필요합니다. 기밀이 보장된 안전한 곳에 보관하세요."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "이 구문은 계정 전체를 도용하는 데 사용될 수 있습니다."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "이 구문은 누구와도 공유하지 마세요!"
|
||||
"message": "이 구문은 계정 전체를 도용하는 데 사용될 수 있습니다.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "시드 구문 보기"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "저장"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSV 파일로 저장"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "QR 코드를 카메라 앞에 놓으세요"
|
||||
},
|
||||
|
12
app/_locales/lt/messages.json
generated
12
app/_locales/lt/messages.json
generated
@ -645,14 +645,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Atskleisti atkūrimo žodžius"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Jei imsite naudotis kita naršykle arba kitu kompiuteriu, šios atkūrimo frazės jums reikės paskyroms pasiekti. Saugokite ją saugioje ir slaptoje vietoje."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Šiuos žodžius galima panaudoti visoms jūsų paskyroms pavogti."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Šia fraze su niekuo NESIDALINKITE!"
|
||||
"message": "Šiuos žodžius galima panaudoti visoms jūsų paskyroms pavogti.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Naujas RPC URL"
|
||||
@ -660,9 +655,6 @@
|
||||
"save": {
|
||||
"message": "Išsaugoti"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Įrašyti kaip CSV failą"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Laikykite QR kodą priešais kamerą"
|
||||
},
|
||||
|
12
app/_locales/lv/messages.json
generated
12
app/_locales/lv/messages.json
generated
@ -641,14 +641,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Parādīt atkopšanas vārdus"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ja mainīsiet pārlūku vai datoru, jūsu kontu piekļuvei būs nepieciešama šī atkopšanas frāze. Saglabājiet to drošā un slepenā vietā!"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Šos vārdus var izmantot visu jūsu kontu nolaupīšanai."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NEDALIETIES ar šo frāzi!"
|
||||
"message": "Šos vārdus var izmantot visu jūsu kontu nolaupīšanai.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Jauns RPC URL"
|
||||
@ -656,9 +651,6 @@
|
||||
"save": {
|
||||
"message": "Saglabāt"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Saglabāt kā CSV failu"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Novietojiet QR kodu kameras priekšā"
|
||||
},
|
||||
|
12
app/_locales/ms/messages.json
generated
12
app/_locales/ms/messages.json
generated
@ -625,14 +625,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Dedahkan Ungkapan Benih"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Jika anda pernah menukar pelayar atau berpindah komputer, anda memerlukan ungkapan benih ini untuk mengakses akaun anda. Simpan ungkapan di tempat yang selamat dan rahsia."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Perkataan ini boleh digunakan untuk mencuri kesemua akaun anda."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "JANGAN berkongsi ungkapan ini dengan orang lain!"
|
||||
"message": "Perkataan ini boleh digunakan untuk mencuri kesemua akaun anda.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "URL RPC baru"
|
||||
@ -640,9 +635,6 @@
|
||||
"save": {
|
||||
"message": "Simpan"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Simpan sebagai Fail CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Bawa kod QR ke hadapan kamera anda"
|
||||
},
|
||||
|
3
app/_locales/nl/messages.json
generated
3
app/_locales/nl/messages.json
generated
@ -260,7 +260,8 @@
|
||||
"message": "Onthul back-up woorden"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Zorg dat je back-up woorden niet op een openbare plaats bekijkt! Deze woorden kunnen worden gebruikt om al uw accounts opnieuw te genereren (en dus uw account te stelen)."
|
||||
"message": "Zorg dat je back-up woorden niet op een openbare plaats bekijkt! Deze woorden kunnen worden gebruikt om al uw accounts opnieuw te genereren (en dus uw account te stelen).",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "Opslaan"
|
||||
|
12
app/_locales/no/messages.json
generated
12
app/_locales/no/messages.json
generated
@ -632,14 +632,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Vis frøord"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Hvis du noen gang bytter nettlesere eller flytter datamaskiner, trenger du denne mnemoniske gjenopprettingsfrasen for å få tilgang til kontoene dine. Lagre dem på et trygt og hemmelig sted."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Disse ordene kan brukes for å stjele alle kontoene dine. "
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "IKKE del denne frasen med noen! "
|
||||
"message": "Disse ordene kan brukes for å stjele alle kontoene dine. ",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "NY RPC-URL "
|
||||
@ -647,9 +642,6 @@
|
||||
"save": {
|
||||
"message": "Lagre"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Lagre som CSV-fil "
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Plasser QR-koden foran kameraet ditt"
|
||||
},
|
||||
|
12
app/_locales/ph/messages.json
generated
12
app/_locales/ph/messages.json
generated
@ -1277,14 +1277,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Ipakita ang Secret Recovery Phrase"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Kung magpapalit ka man ng browser o computer, kakailanganin mo ang Secret Recovery Phrase na ito para ma-access ang iyong mga account. I-save ang mga iyon sa isang ligtas at sikretong lugar."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Huwag ibahagi ang phrase na ito sa kahit sino!"
|
||||
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Bagong RPC URL"
|
||||
@ -1292,9 +1287,6 @@
|
||||
"save": {
|
||||
"message": "I-save"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "I-save bilang CSV File"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Itapat ang QR code sa iyong camera"
|
||||
},
|
||||
|
12
app/_locales/pl/messages.json
generated
12
app/_locales/pl/messages.json
generated
@ -639,14 +639,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Pokaż słowa seed"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Jeśli kiedyś zmienisz przeglądarkę lub komputer, będziesz potrzebować tej frazy seed, żeby dostać się do swoich kont. Zapisz ją w bezpiecznym miejscu."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Te słowa mogą być użyte żeby ukraść Twoje konta."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NIE pokazuj tej frazy nikomu!"
|
||||
"message": "Te słowa mogą być użyte żeby ukraść Twoje konta.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nowy adres URL RPC"
|
||||
@ -654,9 +649,6 @@
|
||||
"save": {
|
||||
"message": "Zapisz"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Zapisz jako plik CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Umieść kod QR na wprost kamery"
|
||||
},
|
||||
|
12
app/_locales/pt/messages.json
generated
12
app/_locales/pt/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revelar Palavras Seed"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Se você alguma vez mudar de navegador ou trocar de computador, precisará dessa Frase de Recuperação Secreta para acessar suas contas. Salve-as em um lugar seguro e secreto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Não revele as palavras seed num espaço público! Estas palavras podem ser usadas para roubar todas as suas contas."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NÃO compartilhe essa frase com ninguém!"
|
||||
"message": "Não revele as palavras seed num espaço público! Estas palavras podem ser usadas para roubar todas as suas contas.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Revelar a frase de recuperação"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Guardar"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Salvar como arquivo CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Posicione o QR code na frente da sua câmera"
|
||||
},
|
||||
|
12
app/_locales/pt_BR/messages.json
generated
12
app/_locales/pt_BR/messages.json
generated
@ -1990,14 +1990,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Revelar Frase de Recuperação Secreta"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Se você alguma vez mudar de navegador ou trocar de computador, precisará dessa Frase de Recuperação Secreta para acessar suas contas. Salve-as em um lugar seguro e secreto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Essas palavras podem ser usadas para roubar todas as suas contas."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NÃO compartilhe essa frase com ninguém!"
|
||||
"message": "Essas palavras podem ser usadas para roubar todas as suas contas.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Novo URL da RPC"
|
||||
@ -2005,9 +2000,6 @@
|
||||
"save": {
|
||||
"message": "Salvar"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Salvar como arquivo CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Posicione o QR code na frente da sua câmera"
|
||||
},
|
||||
|
12
app/_locales/ro/messages.json
generated
12
app/_locales/ro/messages.json
generated
@ -632,14 +632,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Arată cuvintele din seed"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Dacă schimbați vreodată browserele sau vă mutați la alt computer, veți avea nevoie de această expresie sursă pentru a vă accesa conturile. Salvați-o într-un loc sigur și secret."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Aceste cuvinte pot fi folosite pentru a vă fura toate conturile."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NU împărtășiți această expresie nimănui!"
|
||||
"message": "Aceste cuvinte pot fi folosite pentru a vă fura toate conturile.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "URL RPC nou"
|
||||
@ -647,9 +642,6 @@
|
||||
"save": {
|
||||
"message": "Salvează"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Salvați ca fișier CSV "
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Așezați codul QR în fața camerei"
|
||||
},
|
||||
|
12
app/_locales/ru/messages.json
generated
12
app/_locales/ru/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Показать секретную фразу для восстановления"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Если вы меняете браузер или переходите на другой компьютер, вам понадобится эта секретная фраза для восстановления для доступа к своим счетам. Сохраните ее в безопасном потайном месте."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Эти слова можно использовать для кражи всех ваших счетов."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "НЕ сообщайте никому эту фразу!"
|
||||
"message": "Эти слова можно использовать для кражи всех ваших счетов.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Показать сид-фразу"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Сохранить"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Сохранить как файл CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Поместите QR-код перед камерой"
|
||||
},
|
||||
|
12
app/_locales/sk/messages.json
generated
12
app/_locales/sk/messages.json
generated
@ -617,14 +617,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Zobrazit slova klíčové fráze"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ak niekedy zmeníte prehliadač alebo presuniete počítače, budete potrebovať túto seed frázu na prístup k svojim účtom. Uložte ich niekde v bezpečí a v tajnosti."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Túto frázu s nikým NEZDIEĽAJTE!"
|
||||
"message": "Nebnovujte slova klíčové fráze na veřejnosti! Tato slova mohou být použita k odcizení veškerých vyašich účtů.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nová RPC URL"
|
||||
@ -632,9 +627,6 @@
|
||||
"save": {
|
||||
"message": "Uložit"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Uložiť ako súbor CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Umiestnite QR kód pred kameru"
|
||||
},
|
||||
|
12
app/_locales/sl/messages.json
generated
12
app/_locales/sl/messages.json
generated
@ -633,14 +633,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Razkrij seed words"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Če želite zamenjati brskalnik ali računalnik, potrebujete vaš seed phase za dostop do računa. Shranite ga na varno skrito mesto."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "S temi besedami lahko kdorkoli ukrade vse vaše račune."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Tega ne delite z nikomer!"
|
||||
"message": "S temi besedami lahko kdorkoli ukrade vse vaše račune.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Nov URL RPC"
|
||||
@ -648,9 +643,6 @@
|
||||
"save": {
|
||||
"message": "Shrani"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Shrani kot CSV datoteko"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Postavite QR kodo pred vašo kamero"
|
||||
},
|
||||
|
12
app/_locales/sr/messages.json
generated
12
app/_locales/sr/messages.json
generated
@ -636,14 +636,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Otkrivanje početnih reči"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ukoliko ikad promenite pregledač ili kompjuter, trebaće vam ova šifra za oporavak naloga (seed phrase) kako biste pristupili svojim nalozima. Čuvajte je na bezbednom i tajnom mestu."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Ove reči se mogu iskoristiti za krađu svih vaših naloga."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "NE delite ovu frazu ni sa kim!"
|
||||
"message": "Ove reči se mogu iskoristiti za krađu svih vaših naloga.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Novi RPC URL"
|
||||
@ -651,9 +646,6 @@
|
||||
"save": {
|
||||
"message": "Сачувај"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Sačuvajte u formi CSV datoteke"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Stavite QR kod ispred vaše kamere"
|
||||
},
|
||||
|
12
app/_locales/sv/messages.json
generated
12
app/_locales/sv/messages.json
generated
@ -629,14 +629,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Visa seed-ord"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Om du någonsin byter webbläsare eller dator kommer du behöva denna"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "De här orden kan användas för att stjäla alla dina konton."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "DELA INTE frasen med någon!"
|
||||
"message": "De här orden kan användas för att stjäla alla dina konton.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Ny RPC-URL"
|
||||
@ -644,9 +639,6 @@
|
||||
"save": {
|
||||
"message": "Spara"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Spara som CSV-fil"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Placera QR-koden framför din kamera"
|
||||
},
|
||||
|
12
app/_locales/sw/messages.json
generated
12
app/_locales/sw/messages.json
generated
@ -623,14 +623,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Onyesha Maneno ya Kianzio"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Ikiwa utabadilisha kisakuzi au kuhamisha kompyuta, utahitaji kirai hiki kianzio ili kufikia akaunti zako. Vihifadhi mahali fulani ambapo ni salamana pa siri."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Maneno haya yanaweza kutumika kuiba akanti zako zote."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "USISHIRIKI kirai hiki na mtu yeyote!"
|
||||
"message": "Maneno haya yanaweza kutumika kuiba akanti zako zote.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "RPC URL mpya"
|
||||
@ -638,9 +633,6 @@
|
||||
"save": {
|
||||
"message": "Hifadhi"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Hifadhi kama Faili la CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Weka msimbo wa QR mbele ya kamera yako"
|
||||
},
|
||||
|
3
app/_locales/ta/messages.json
generated
3
app/_locales/ta/messages.json
generated
@ -366,7 +366,8 @@
|
||||
"message": "விதை வார்த்தைகள் வெளிப்படுத்த"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "உங்கள் விதை வார்த்தைகள் ஒரு பொது இடத்தில் மீட்க வேண்டாம்! உங்கள் எல்லா கணக்குகளையும் திருட இந்த வார்த்தைகள் பயன்படுத்தப்படலாம்."
|
||||
"message": "உங்கள் விதை வார்த்தைகள் ஒரு பொது இடத்தில் மீட்க வேண்டாம்! உங்கள் எல்லா கணக்குகளையும் திருட இந்த வார்த்தைகள் பயன்படுத்தப்படலாம்.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "சேமி"
|
||||
|
3
app/_locales/th/messages.json
generated
3
app/_locales/th/messages.json
generated
@ -327,7 +327,8 @@
|
||||
"message": "เปิดเผยกลุ่มคำชีด"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "อย่าเปิดเผยคำกลุ่มคำชีดของคุณในที่สาธารณะ! คำเหล่านี้สามารถใช้เพื่อขโมยบัญชีทั้งหมดของคุณ"
|
||||
"message": "อย่าเปิดเผยคำกลุ่มคำชีดของคุณในที่สาธารณะ! คำเหล่านี้สามารถใช้เพื่อขโมยบัญชีทั้งหมดของคุณ",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"save": {
|
||||
"message": "บันทึก"
|
||||
|
12
app/_locales/tl/messages.json
generated
12
app/_locales/tl/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Ipakita ang Secret Recovery Phrase"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Kung magpapalit ka man ng browser o computer, kakailanganin mo ang Secret Recovery Phrase na ito para ma-access ang iyong mga account. I-save ang mga iyon sa isang ligtas at sikretong lugar."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Huwag ibahagi ang phrase na ito sa sinuman!"
|
||||
"message": "Magagamit ang mga salitang ito para manakaw ang lahat ng iyong account.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Ipakita ang seed phrase"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "I-save"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "I-save bilang CSV File"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Itapat ang QR code sa iyong camera"
|
||||
},
|
||||
|
12
app/_locales/tr/messages.json
generated
12
app/_locales/tr/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Gizli Kurtarma İfadesini Göster"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Tarayıcı değiştirirseniz veya başka bir bilgisayar kullanmaya başlarsanız hesaplarınıza erişim sağlamak için bu Gizli Kurtarma İfadesine ihtiyacınız olacaktır. Güvenli ve gizli bir yerde saklayın."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Bu kelimeler tüm hesaplarınızı çalmak için kullanılabilir."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "Bu ifadeyi hiç kimseyle PAYLAŞMAYIN!"
|
||||
"message": "Bu kelimeler tüm hesaplarınızı çalmak için kullanılabilir.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Tohum ifadesini ortaya çıkar"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Kaydet"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "CSV dosyası olarak kaydet"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "QR kodu kameranızın önüne getirin"
|
||||
},
|
||||
|
12
app/_locales/uk/messages.json
generated
12
app/_locales/uk/messages.json
generated
@ -645,14 +645,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Показати мнемонічні слова"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "При зміні браузера або комп'ютера, вам знадобиться seed-фраза для отримання доступу до ваших облікових записів. Збережіть її у надійному місці."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Ці слова можуть бути використані, щоб вкрасти всі ваші облікові записи."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "НЕ передавайте цю фразу нікому!"
|
||||
"message": "Ці слова можуть бути використані, щоб вкрасти всі ваші облікові записи.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "Новий RPC URL"
|
||||
@ -660,9 +655,6 @@
|
||||
"save": {
|
||||
"message": "Зберегти"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Зберегти як файл CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Розташуйте QR-код перед вашою камерою"
|
||||
},
|
||||
|
12
app/_locales/vi/messages.json
generated
12
app/_locales/vi/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "Hiện Cụm mật khẩu khôi phục bí mật"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "Nếu thay đổi trình duyệt hoặc chuyển máy tính, bạn sẽ cần Cụm mật khẩu khôi phục bí mật này để truy cập tài khoản của mình. Hãy lưu Cụm mật khẩu khôi phục bí mật này ở nơi an toàn và bí mật."
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "Kẻ xấu có thể dùng các từ này để đánh cắp tất cả các tài khoản của bạn."
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "KHÔNG chia sẻ cụm mật khẩu này với bất kỳ ai!"
|
||||
"message": "Kẻ xấu có thể dùng các từ này để đánh cắp tất cả các tài khoản của bạn.",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "Hiện cụm từ khôi phục bí mật"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "Lưu"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "Lưu dưới dạng tập tin CSV"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "Đặt mã QR vào trước máy ảnh"
|
||||
},
|
||||
|
12
app/_locales/zh_CN/messages.json
generated
12
app/_locales/zh_CN/messages.json
generated
@ -2922,14 +2922,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "显示助记词"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "如果更改浏览器或移动计算机,您将需要此助记词才能访问账户。将它们保存在安全、秘密的地方。"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "这些账户助记词可以用来窃取您的所有账户。"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "切勿与任何人分享此账户助记词!"
|
||||
"message": "这些账户助记词可以用来窃取您的所有账户。",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"revealTheSeedPhrase": {
|
||||
"message": "显示助记词"
|
||||
@ -2961,9 +2956,6 @@
|
||||
"save": {
|
||||
"message": "保存"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "保存为 CSV 文件"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "将二维码放在摄像头前"
|
||||
},
|
||||
|
12
app/_locales/zh_TW/messages.json
generated
12
app/_locales/zh_TW/messages.json
generated
@ -1178,14 +1178,9 @@
|
||||
"revealSeedWords": {
|
||||
"message": "顯示助憶詞"
|
||||
},
|
||||
"revealSeedWordsDescription": {
|
||||
"message": "若想在不同瀏覽器或電腦登入,將需要使用助憶詞還原帳戶資訊。請妥善並安全的保管您的助憶詞。"
|
||||
},
|
||||
"revealSeedWordsWarning": {
|
||||
"message": "絕對不要在公共場合輸入助憶詞!這可被用來竊取您的帳戶。"
|
||||
},
|
||||
"revealSeedWordsWarningTitle": {
|
||||
"message": "請勿將助憶詞洩漏予他人!"
|
||||
"message": "絕對不要在公共場合輸入助憶詞!這可被用來竊取您的帳戶。",
|
||||
"description": "$1 is bolded text using the message from 'revealSeedWordsWarning2'"
|
||||
},
|
||||
"rpcUrl": {
|
||||
"message": "新的 RPC URL"
|
||||
@ -1193,9 +1188,6 @@
|
||||
"save": {
|
||||
"message": "儲存"
|
||||
},
|
||||
"saveAsCsvFile": {
|
||||
"message": "儲存為 CSV 格式檔案"
|
||||
},
|
||||
"scanInstructions": {
|
||||
"message": "請將 QR code 放在攝影鏡頭前面"
|
||||
},
|
||||
|
@ -1,8 +1,9 @@
|
||||
import React, { useCallback, useContext, useRef, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import Button from '../../ui/button';
|
||||
import classnames from 'classnames';
|
||||
import { I18nContext } from '../../../contexts/i18n';
|
||||
import Box from '../../ui/box/box';
|
||||
import { Button } from '../../component-library';
|
||||
import Box from '../../ui/box';
|
||||
import {
|
||||
AlignItems,
|
||||
DISPLAY,
|
||||
@ -74,11 +75,10 @@ export default function HoldToRevealButton({ buttonText, onLongPressed }) {
|
||||
const renderPreCompleteContent = useCallback(() => {
|
||||
return (
|
||||
<Box
|
||||
className={`hold-to-reveal-button__absolute-fill ${
|
||||
isUnlocking ? 'hold-to-reveal-button__invisible' : null
|
||||
} ${
|
||||
hasTriggeredUnlock ? 'hold-to-reveal-button__main-icon-show' : null
|
||||
}`}
|
||||
className={classnames('hold-to-reveal-button__absolute-fill', {
|
||||
'hold-to-reveal-button__absolute-fill': isUnlocking,
|
||||
'hold-to-reveal-button__main-icon-show': hasTriggeredUnlock,
|
||||
})}
|
||||
>
|
||||
<Box className="hold-to-reveal-button__absolute-fill">
|
||||
<svg className="hold-to-reveal-button__circle-svg">
|
||||
@ -120,9 +120,9 @@ export default function HoldToRevealButton({ buttonText, onLongPressed }) {
|
||||
const renderPostCompleteContent = useCallback(() => {
|
||||
return isUnlocking ? (
|
||||
<div
|
||||
className={`hold-to-reveal-button__absolute-fill ${
|
||||
hasTriggeredUnlock ? 'hold-to-reveal-button__unlock-icon-hide' : null
|
||||
}`}
|
||||
className={classnames('hold-to-reveal-button__absolute-fill', {
|
||||
'hold-to-reveal-button__unlock-icon-hide': hasTriggeredUnlock,
|
||||
})}
|
||||
onAnimationEnd={resetAnimationStates}
|
||||
>
|
||||
<div
|
||||
@ -169,15 +169,12 @@ export default function HoldToRevealButton({ buttonText, onLongPressed }) {
|
||||
<Button
|
||||
onMouseDown={onMouseDown}
|
||||
onMouseUp={onMouseUp}
|
||||
type="primary"
|
||||
icon={
|
||||
<Box marginRight={2} className="hold-to-reveal-button__icon-container">
|
||||
{renderPreCompleteContent()}
|
||||
{renderPostCompleteContent()}
|
||||
</Box>
|
||||
}
|
||||
className="hold-to-reveal-button__button-hold"
|
||||
>
|
||||
<Box className="hold-to-reveal-button__icon-container">
|
||||
{renderPreCompleteContent()}
|
||||
{renderPostCompleteContent()}
|
||||
</Box>
|
||||
{buttonText}
|
||||
</Button>
|
||||
);
|
||||
|
@ -0,0 +1,116 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import withModalProps from '../../../../helpers/higher-order-components/with-modal-props';
|
||||
import Box from '../../../ui/box';
|
||||
import {
|
||||
Text,
|
||||
Button,
|
||||
BUTTON_TYPES,
|
||||
ButtonIcon,
|
||||
ICON_NAMES,
|
||||
} from '../../../component-library';
|
||||
import {
|
||||
AlignItems,
|
||||
DISPLAY,
|
||||
FLEX_DIRECTION,
|
||||
JustifyContent,
|
||||
Size,
|
||||
TextVariant,
|
||||
} from '../../../../helpers/constants/design-system';
|
||||
import HoldToRevealButton from '../../hold-to-reveal-button';
|
||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
||||
import ZENDESK_URLS from '../../../../helpers/constants/zendesk-url';
|
||||
|
||||
const HoldToRevealModal = ({ onLongPressed, hideModal }) => {
|
||||
const t = useI18nContext();
|
||||
|
||||
const unlock = () => {
|
||||
onLongPressed();
|
||||
hideModal();
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
hideModal();
|
||||
};
|
||||
|
||||
return (
|
||||
<Box
|
||||
className="hold-to-reveal-modal"
|
||||
display={DISPLAY.FLEX}
|
||||
flexDirection={FLEX_DIRECTION.COLUMN}
|
||||
justifyContent={JustifyContent.flexStart}
|
||||
padding={6}
|
||||
>
|
||||
<Box
|
||||
display={DISPLAY.FLEX}
|
||||
flexDirection={FLEX_DIRECTION.ROW}
|
||||
alignItems={AlignItems.center}
|
||||
justifyContent={JustifyContent.spaceBetween}
|
||||
marginBottom={6}
|
||||
>
|
||||
<Text variant={TextVariant.headingSm}>{t('holdToRevealTitle')}</Text>
|
||||
<ButtonIcon
|
||||
className="hold-to-reveal-modal__close"
|
||||
iconName={ICON_NAMES.CLOSE}
|
||||
size={Size.SM}
|
||||
onClick={handleCancel}
|
||||
ariaLabel={t('close')}
|
||||
/>
|
||||
</Box>
|
||||
<Box
|
||||
display={DISPLAY.FLEX}
|
||||
flexDirection={FLEX_DIRECTION.COLUMN}
|
||||
gap={4}
|
||||
marginBottom={6}
|
||||
>
|
||||
<Text variant={TextVariant.bodyMd}>
|
||||
{t('holdToRevealContent1', [
|
||||
<Text
|
||||
key="hold-to-reveal-2"
|
||||
variant={TextVariant.bodyMdBold}
|
||||
as="span"
|
||||
>
|
||||
{t('holdToRevealContent2')}
|
||||
</Text>,
|
||||
])}
|
||||
</Text>
|
||||
<Text variant={TextVariant.bodyMdBold}>
|
||||
{t('holdToRevealContent3', [
|
||||
<Text
|
||||
key="hold-to-reveal-4"
|
||||
variant={TextVariant.bodyMd}
|
||||
as="span"
|
||||
display={DISPLAY.INLINE}
|
||||
>
|
||||
{t('holdToRevealContent4')}
|
||||
</Text>,
|
||||
<Button
|
||||
key="hold-to-reveal-5"
|
||||
type={BUTTON_TYPES.LINK}
|
||||
size={Size.auto}
|
||||
href={ZENDESK_URLS.NON_CUSTODIAL_WALLET}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{t('holdToRevealContent5')}
|
||||
</Button>,
|
||||
])}
|
||||
</Text>
|
||||
</Box>
|
||||
<HoldToRevealButton
|
||||
buttonText={t('holdToReveal')}
|
||||
onLongPressed={unlock}
|
||||
marginLeft="auto"
|
||||
marginRight="auto"
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
HoldToRevealModal.propTypes = {
|
||||
// The function to be executed after the hold to reveal long press has been completed
|
||||
onLongPressed: PropTypes.func.isRequired,
|
||||
hideModal: PropTypes.func,
|
||||
};
|
||||
|
||||
export default withModalProps(HoldToRevealModal);
|
@ -0,0 +1,114 @@
|
||||
import React from 'react';
|
||||
import configureMockState from 'redux-mock-store';
|
||||
import { fireEvent, waitFor } from '@testing-library/react';
|
||||
import thunk from 'redux-thunk';
|
||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
|
||||
import mockState from '../../../../../test/data/mock-state.json';
|
||||
import {
|
||||
holdToRevealContent1,
|
||||
holdToRevealContent2,
|
||||
holdToRevealContent3,
|
||||
holdToRevealContent4,
|
||||
holdToRevealContent5,
|
||||
holdToRevealTitle,
|
||||
} from '../../../../../app/_locales/en/messages.json';
|
||||
import HoldToRevealModal from '.';
|
||||
|
||||
const mockShowModal = jest.fn();
|
||||
|
||||
jest.mock('../../../../store/actions.ts', () => {
|
||||
return {
|
||||
showModal: () => mockShowModal,
|
||||
};
|
||||
});
|
||||
|
||||
describe('Hold to Reveal Modal', () => {
|
||||
const mockStore = configureMockState([thunk])(mockState);
|
||||
const onLongPressStub = jest.fn().mockResolvedValue();
|
||||
const hideModalStub = jest.fn().mockResolvedValue();
|
||||
|
||||
global.platform = { openTab: jest.fn() };
|
||||
|
||||
it('should render the srp warning text and button', () => {
|
||||
const { getByText } = renderWithProvider(
|
||||
<HoldToRevealModal
|
||||
onLongPressed={onLongPressStub}
|
||||
hideModal={hideModalStub}
|
||||
/>,
|
||||
mockStore,
|
||||
);
|
||||
|
||||
const holdButton = getByText('Hold to reveal SRP');
|
||||
expect(holdButton).toBeInTheDocument();
|
||||
|
||||
const warningTitle = getByText(holdToRevealTitle.message);
|
||||
expect(warningTitle).toBeInTheDocument();
|
||||
const warningText1 = getByText(
|
||||
holdToRevealContent1.message.replace(' $1', ''),
|
||||
);
|
||||
expect(warningText1).toBeInTheDocument();
|
||||
|
||||
const warningText2 = getByText(holdToRevealContent2.message);
|
||||
expect(warningText2).toBeInTheDocument();
|
||||
|
||||
const warningText3 = getByText(
|
||||
holdToRevealContent3.message.replace(' $1 $2', ''),
|
||||
);
|
||||
expect(warningText3).toBeInTheDocument();
|
||||
|
||||
const warningText4 = getByText(holdToRevealContent4.message);
|
||||
expect(warningText4).toBeInTheDocument();
|
||||
|
||||
const warningText5 = getByText(holdToRevealContent5.message);
|
||||
expect(warningText5).toBeInTheDocument();
|
||||
|
||||
fireEvent.click(holdButton);
|
||||
|
||||
expect(holdButton).toBeDefined();
|
||||
|
||||
fireEvent.mouseUp(holdButton);
|
||||
|
||||
expect(holdButton).toBeDefined();
|
||||
});
|
||||
|
||||
it('should should execute onLongPressed after long press', async () => {
|
||||
const { getByText } = renderWithProvider(
|
||||
<HoldToRevealModal
|
||||
onLongPressed={onLongPressStub}
|
||||
hideModal={hideModalStub}
|
||||
/>,
|
||||
mockStore,
|
||||
);
|
||||
|
||||
const holdButton = getByText('Hold to reveal SRP');
|
||||
waitFor(() => {
|
||||
expect(holdButton.firstChild).toHaveClass(
|
||||
'hold-to-reveal-button__unlock-icon-container',
|
||||
);
|
||||
expect(onLongPressStub.callCount).toBe(1);
|
||||
expect(hideModalStub.callCount).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
it('should remain open if long pressed was not complete', async () => {
|
||||
const { getByText } = renderWithProvider(
|
||||
<HoldToRevealModal
|
||||
onLongPressed={onLongPressStub}
|
||||
hideModal={hideModalStub}
|
||||
/>,
|
||||
mockStore,
|
||||
);
|
||||
|
||||
const holdButton = getByText('Hold to reveal SRP');
|
||||
waitFor(
|
||||
() => {
|
||||
expect(holdButton.firstChild).toHaveClass(
|
||||
'hold-to-reveal-button__unlock-icon-container',
|
||||
);
|
||||
expect(onLongPressStub.callCount).toBe(0);
|
||||
expect(hideModalStub.callCount).toBe(0);
|
||||
},
|
||||
{ interval: 100 },
|
||||
);
|
||||
});
|
||||
});
|
1
ui/components/app/modals/hold-to-reveal-modal/index.js
Normal file
1
ui/components/app/modals/hold-to-reveal-modal/index.js
Normal file
@ -0,0 +1 @@
|
||||
export { default } from './hold-to-reveal-modal';
|
8
ui/components/app/modals/hold-to-reveal-modal/index.scss
Normal file
8
ui/components/app/modals/hold-to-reveal-modal/index.scss
Normal file
@ -0,0 +1,8 @@
|
||||
.hold-to-reveal-modal {
|
||||
position: relative;
|
||||
|
||||
&__close {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@
|
||||
@import 'customize-nonce/index';
|
||||
@import 'convert-token-to-nft-modal/index';
|
||||
@import 'contract-details-modal/index';
|
||||
@import 'hold-to-reveal-modal/index';
|
||||
|
||||
.modal {
|
||||
z-index: 1050;
|
||||
|
@ -14,6 +14,7 @@ import ExportPrivateKeyModal from './export-private-key-modal';
|
||||
import HideTokenConfirmationModal from './hide-token-confirmation-modal';
|
||||
import QRScanner from './qr-scanner';
|
||||
|
||||
import HoldToRevealModal from './hold-to-reveal-modal';
|
||||
import ConfirmRemoveAccount from './confirm-remove-account';
|
||||
import ConfirmResetAccount from './confirm-reset-account';
|
||||
import TransactionConfirmed from './transaction-confirmed';
|
||||
@ -118,6 +119,19 @@ const MODALS = {
|
||||
...accountModalStyle,
|
||||
},
|
||||
|
||||
HOLD_TO_REVEAL_SRP: {
|
||||
contents: <HoldToRevealModal />,
|
||||
mobileModalStyle: {
|
||||
...modalContainerMobileStyle,
|
||||
},
|
||||
laptopModalStyle: {
|
||||
...modalContainerLaptopStyle,
|
||||
},
|
||||
contentStyle: {
|
||||
borderRadius: '8px',
|
||||
},
|
||||
},
|
||||
|
||||
HIDE_TOKEN_CONFIRMATION: {
|
||||
contents: <HideTokenConfirmationModal />,
|
||||
mobileModalStyle: {
|
||||
|
@ -2,60 +2,61 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useI18nContext } from '../../../hooks/useI18nContext';
|
||||
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
|
||||
import { exportAsFile } from '../../../helpers/utils/export-utils';
|
||||
import { Icon, ICON_NAMES } from '../../component-library';
|
||||
import {
|
||||
AlignItems,
|
||||
BorderColor,
|
||||
BorderRadius,
|
||||
DISPLAY,
|
||||
FLEX_DIRECTION,
|
||||
JustifyContent,
|
||||
TextVariant,
|
||||
} from '../../../helpers/constants/design-system';
|
||||
import Box from '../box/box';
|
||||
import { ButtonSecondary, Text } from '../../component-library';
|
||||
|
||||
function ExportTextContainer({
|
||||
text = '',
|
||||
onClickCopy = null,
|
||||
onClickDownload = null,
|
||||
}) {
|
||||
function ExportTextContainer({ text = '', onClickCopy = null }) {
|
||||
const ONE_MINUTE = 1000 * 60;
|
||||
const t = useI18nContext();
|
||||
const [copied, handleCopy] = useCopyToClipboard();
|
||||
const [copied, handleCopy] = useCopyToClipboard(ONE_MINUTE);
|
||||
|
||||
return (
|
||||
<div className="export-text-container">
|
||||
<div className="export-text-container__text-container">
|
||||
<div className="export-text-container__text notranslate">{text}</div>
|
||||
</div>
|
||||
<div className="export-text-container__buttons-container">
|
||||
<div
|
||||
className="export-text-container__button export-text-container__button--copy"
|
||||
onClick={() => {
|
||||
if (onClickCopy) {
|
||||
onClickCopy();
|
||||
}
|
||||
handleCopy(text);
|
||||
}}
|
||||
>
|
||||
<Icon name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY} />
|
||||
<div className="export-text-container__button-text">
|
||||
{copied ? t('copiedExclamation') : t('copyToClipboard')}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="export-text-container__button"
|
||||
onClick={() => {
|
||||
if (onClickDownload) {
|
||||
onClickDownload();
|
||||
}
|
||||
exportAsFile('', text);
|
||||
}}
|
||||
>
|
||||
<img src="images/download.svg" alt="" />
|
||||
<div className="export-text-container__button-text">
|
||||
{t('saveAsCsvFile')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Box
|
||||
display={DISPLAY.FLEX}
|
||||
justifyContent={JustifyContent.center}
|
||||
flexDirection={FLEX_DIRECTION.COLUMN}
|
||||
alignItems={AlignItems.center}
|
||||
borderColor={BorderColor.borderDefault}
|
||||
borderRadius={BorderRadius.MD}
|
||||
padding={4}
|
||||
gap={4}
|
||||
>
|
||||
<Text
|
||||
display={DISPLAY.FLEX}
|
||||
justifyContent={JustifyContent.CENTER}
|
||||
className="notranslate"
|
||||
variant={TextVariant.bodyLgMedium}
|
||||
>
|
||||
{text}
|
||||
</Text>
|
||||
<ButtonSecondary
|
||||
className="export-text-container__button"
|
||||
block
|
||||
onClick={() => {
|
||||
if (onClickCopy) {
|
||||
onClickCopy();
|
||||
}
|
||||
handleCopy(text);
|
||||
}}
|
||||
>
|
||||
{copied ? t('copiedExclamation') : t('copyToClipboard')}
|
||||
</ButtonSecondary>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
ExportTextContainer.propTypes = {
|
||||
text: PropTypes.string,
|
||||
onClickCopy: PropTypes.func,
|
||||
onClickDownload: PropTypes.func,
|
||||
};
|
||||
|
||||
export default React.memo(ExportTextContainer);
|
||||
|
@ -1,54 +0,0 @@
|
||||
.export-text-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
border: 1px solid var(--color-border-default);
|
||||
border-radius: 4px;
|
||||
font-weight: 400;
|
||||
|
||||
&__text-container {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 20px;
|
||||
border-radius: 4px;
|
||||
background: var(--color-background-default);
|
||||
}
|
||||
|
||||
&__text {
|
||||
@include H4;
|
||||
|
||||
resize: none;
|
||||
border: none;
|
||||
background: var(--color-background-default);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__buttons-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
border-top: 1px solid var(--color-border-default);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&__button {
|
||||
@include H7;
|
||||
|
||||
padding: 10px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
color: var(--color-primary-default);
|
||||
|
||||
&--copy {
|
||||
border-right: 1px solid var(--color-border-default);
|
||||
}
|
||||
}
|
||||
|
||||
&__button-text {
|
||||
padding-left: 10px;
|
||||
}
|
||||
}
|
@ -18,7 +18,6 @@
|
||||
@import 'dropdown/dropdown';
|
||||
@import 'editable-label/index';
|
||||
@import 'error-message/index';
|
||||
@import 'export-text-container/index';
|
||||
@import 'icon-border/icon-border';
|
||||
@import 'icon-button/icon-button';
|
||||
@import 'icon-with-fallback/icon-with-fallback';
|
||||
|
@ -22,6 +22,10 @@ const ZENDESK_URLS = {
|
||||
'https://metamask.zendesk.com/hc/en-us/articles/4404722782107',
|
||||
SECRET_RECOVERY_PHRASE:
|
||||
'https://metamask.zendesk.com/hc/en-us/articles/360060826432-What-is-a-Secret-Recovery-Phrase-and-how-to-keep-your-crypto-wallet-secure',
|
||||
SECRET_RECOVERY_PHRASE_USER_GUIDE:
|
||||
'https://metamask.zendesk.com/hc/en-us/articles/4404722782107-User-guide-Secret-Recovery-Phrase-password-and-private-keys',
|
||||
NON_CUSTODIAL_WALLET:
|
||||
'https://metamask.zendesk.com/hc/en-us/articles/360059952212-MetaMask-is-a-non-custodial-wallet',
|
||||
SPEEDUP_CANCEL:
|
||||
'https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction',
|
||||
TOKEN_SAFETY_PRACTICES:
|
||||
|
@ -13,7 +13,14 @@ const DEFAULT_DELAY = SECOND * 3;
|
||||
|
||||
export function useCopyToClipboard(delay = DEFAULT_DELAY) {
|
||||
const [copied, setCopied] = useState(false);
|
||||
const startTimeout = useTimeout(() => setCopied(false), delay, false);
|
||||
const startTimeout = useTimeout(
|
||||
() => {
|
||||
copyToClipboard(' ');
|
||||
setCopied(false);
|
||||
},
|
||||
delay,
|
||||
false,
|
||||
);
|
||||
|
||||
const handleCopy = useCallback(
|
||||
(text) => {
|
||||
|
@ -3,89 +3,133 @@
|
||||
exports[`Reveal Seed Page should match snapshot 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="page-container"
|
||||
class="box page-container box--padding-top-8 box--padding-right-4 box--padding-bottom-8 box--padding-left-4 box--gap-4 box--flex-direction-row"
|
||||
>
|
||||
<div
|
||||
class="page-container__header"
|
||||
<h2
|
||||
class="box mm-text mm-text--heading-lg mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
<div
|
||||
class="page-container__title"
|
||||
>
|
||||
Secret Recovery Phrase
|
||||
</div>
|
||||
<div
|
||||
class="page-container__subtitle"
|
||||
>
|
||||
If you ever change browsers or move computers, you will need this Secret Recovery Phrase to access your accounts. Save them somewhere safe and secret.
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="page-container__content"
|
||||
Secret Recovery Phrase
|
||||
</h2>
|
||||
<p
|
||||
class="box mm-text mm-text--body-md mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
<div
|
||||
class="page-container__warning-container"
|
||||
>
|
||||
<i
|
||||
class="fa fa-exclamation-triangle fa-2x page-container__warning-icon"
|
||||
/>
|
||||
<div
|
||||
class="page-container__warning-message"
|
||||
<span>
|
||||
|
||||
The
|
||||
<a
|
||||
class="box mm-button-base mm-button-link mm-button-link--size-inherit box--display-inline-flex box--flex-direction-row box--justify-content-center box--align-items-center box--color-primary-default box--background-color-transparent"
|
||||
href="https://metamask.zendesk.com/hc/en-us/articles/360060826432-What-is-a-Secret-Recovery-Phrase-and-how-to-keep-your-crypto-wallet-secure"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
<div
|
||||
class="page-container__warning-title"
|
||||
<span
|
||||
class="box mm-text mm-button-base__content mm-text--inherit mm-text--color-inherit box--gap-2 box--flex-direction-row box--justify-content-center box--align-items-center box--display-flex"
|
||||
>
|
||||
DO NOT share this phrase with anyone!
|
||||
</div>
|
||||
<div>
|
||||
These words can be used to steal all your accounts.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Secret Recovery Phrase (SRP)
|
||||
</span>
|
||||
</a>
|
||||
provides
|
||||
<strong
|
||||
class="box mm-text mm-text--body-md-bold mm-text--font-weight-bold mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
full access to your wallet and funds.
|
||||
|
||||
</strong>
|
||||
|
||||
|
||||
</span>
|
||||
</p>
|
||||
<p
|
||||
class="box mm-text mm-text--body-md mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
<span>
|
||||
|
||||
MetaMask is a
|
||||
<a
|
||||
class="box mm-button-base mm-button-link mm-button-link--size-inherit box--display-inline-flex box--flex-direction-row box--justify-content-center box--align-items-center box--color-primary-default box--background-color-transparent"
|
||||
href="https://metamask.zendesk.com/hc/en-us/articles/360059952212-MetaMask-is-a-non-custodial-wallet"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
<span
|
||||
class="box mm-text mm-button-base__content mm-text--inherit mm-text--color-inherit box--gap-2 box--flex-direction-row box--justify-content-center box--align-items-center box--display-flex"
|
||||
>
|
||||
non-custodial wallet
|
||||
</span>
|
||||
</a>
|
||||
. That means you're the owner of your SRP.
|
||||
|
||||
</span>
|
||||
</p>
|
||||
<div
|
||||
class="box mm-banner-base mm-banner-alert mm-banner-alert--severity-danger box--padding-3 box--padding-left-2 box--display-flex box--gap-2 box--flex-direction-row box--background-color-error-muted box--rounded-sm"
|
||||
>
|
||||
<div
|
||||
class="reveal-seed__content"
|
||||
>
|
||||
<form>
|
||||
<label
|
||||
class="input-label"
|
||||
for="password-box"
|
||||
>
|
||||
Enter password to continue
|
||||
</label>
|
||||
<div
|
||||
class="input-group"
|
||||
>
|
||||
<input
|
||||
class="form-control"
|
||||
data-testid="input-password"
|
||||
id="password-box"
|
||||
placeholder="Password"
|
||||
type="password"
|
||||
value=""
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
class="box mm-icon mm-icon--size-lg box--flex-direction-row box--color-error-default"
|
||||
style="mask-image: url('./images/icons/danger.svg');"
|
||||
/>
|
||||
<div>
|
||||
<p
|
||||
class="box mm-text mm-text--body-md mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
<span>
|
||||
|
||||
Make sure no one is looking at your screen.
|
||||
<strong
|
||||
class="box mm-text mm-text--body-md-bold mm-text--font-weight-bold mm-text--color-text-default box--flex-direction-row"
|
||||
>
|
||||
MetaMask Support will never request this.
|
||||
</strong>
|
||||
|
||||
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<form>
|
||||
<label
|
||||
class="box mm-text mm-label mm-label--html-for mm-text--body-md mm-text--font-weight-bold mm-text--color-text-default box--display-inline-flex box--flex-direction-row box--align-items-center"
|
||||
for="password-box"
|
||||
>
|
||||
Enter password to continue
|
||||
</label>
|
||||
<div
|
||||
class="box mm-text-field-base mm-text-field-base--size-lg mm-text-field-base--focused mm-text-field-base--truncate mm-text-field box--display-inline-flex box--flex-direction-row box--align-items-center box--width-full box--background-color-background-default box--rounded-sm box--border-width-1 box--border-style-solid"
|
||||
>
|
||||
<input
|
||||
autocomplete="off"
|
||||
class="box mm-text mm-text-field-base__input mm-text--body-md mm-text--color-text-default box--padding-right-4 box--padding-left-4 box--flex-direction-row box--background-color-transparent"
|
||||
data-testid="input-password"
|
||||
focused="true"
|
||||
id="password-box"
|
||||
placeholder="Make sure nobody is looking"
|
||||
type="password"
|
||||
value=""
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
<div
|
||||
class="page-container__footer"
|
||||
class="box box--margin-top-auto box--display-flex box--gap-4 box--flex-direction-row"
|
||||
>
|
||||
<footer>
|
||||
<button
|
||||
class="button btn--rounded btn-secondary btn--large page-container__footer-button"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
<button
|
||||
class="box mm-button-base mm-button-base--size-lg mm-button-secondary box--padding-right-4 box--padding-left-4 box--display-inline-flex box--flex-direction-row box--justify-content-center box--align-items-center box--width-full box--color-primary-default box--background-color-transparent box--rounded-pill box--border-color-primary-default box--border-style-solid box--border-width-1"
|
||||
>
|
||||
<span
|
||||
class="box mm-text mm-button-base__content mm-text--body-md mm-text--color-inherit box--gap-2 box--flex-direction-row box--justify-content-center box--align-items-center box--display-flex"
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
class="button btn--rounded btn-primary btn--large page-container__footer-button"
|
||||
disabled=""
|
||||
role="button"
|
||||
tabindex="0"
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
class="box mm-button-base mm-button-base--size-lg mm-button-base--disabled mm-button-primary mm-button-primary--disabled box--padding-right-4 box--padding-left-4 box--display-inline-flex box--flex-direction-row box--justify-content-center box--align-items-center box--width-full box--color-primary-inverse box--background-color-primary-default box--rounded-pill"
|
||||
disabled=""
|
||||
>
|
||||
<span
|
||||
class="box mm-text mm-button-base__content mm-text--body-md mm-text--color-inherit box--gap-2 box--flex-direction-row box--justify-content-center box--align-items-center box--display-flex"
|
||||
>
|
||||
Next
|
||||
</button>
|
||||
</footer>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -74,25 +74,12 @@
|
||||
}
|
||||
|
||||
.reveal-seed {
|
||||
&__content {
|
||||
padding: 20px;
|
||||
&__tab {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&__label {
|
||||
padding-bottom: 10px;
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
&__error {
|
||||
@include H6;
|
||||
|
||||
color: var(--color-error-default);
|
||||
padding-top: 5px;
|
||||
&__active-tab {
|
||||
color: var(--color-primary-default);
|
||||
}
|
||||
}
|
||||
|
||||
.page-container__footer-single-button {
|
||||
width: 40%;
|
||||
margin: 8px auto;
|
||||
}
|
||||
|
@ -1,255 +1,317 @@
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import classnames from 'classnames';
|
||||
import { requestRevealSeedWords } from '../../store/actions';
|
||||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import qrCode from 'qrcode-generator';
|
||||
import { requestRevealSeedWords, showModal } from '../../store/actions';
|
||||
import ExportTextContainer from '../../components/ui/export-text-container';
|
||||
import { getMostRecentOverviewPage } from '../../ducks/history/history';
|
||||
import { EVENT, EVENT_NAMES } from '../../../shared/constants/metametrics';
|
||||
import {
|
||||
TextVariant,
|
||||
SEVERITIES,
|
||||
Size,
|
||||
BLOCK_SIZES,
|
||||
JustifyContent,
|
||||
AlignItems,
|
||||
DISPLAY,
|
||||
} from '../../helpers/constants/design-system';
|
||||
|
||||
import Button from '../../components/ui/button';
|
||||
import Box from '../../components/ui/box';
|
||||
import {
|
||||
Text,
|
||||
Label,
|
||||
BannerAlert,
|
||||
Button,
|
||||
TextField,
|
||||
HelpText,
|
||||
BUTTON_TYPES,
|
||||
TEXT_FIELD_SIZES,
|
||||
TEXT_FIELD_TYPES,
|
||||
BUTTON_SIZES,
|
||||
} from '../../components/component-library';
|
||||
import { useI18nContext } from '../../hooks/useI18nContext';
|
||||
import { MetaMetricsContext } from '../../contexts/metametrics';
|
||||
import ZENDESK_URLS from '../../helpers/constants/zendesk-url';
|
||||
import { Tabs, Tab } from '../../components/ui/tabs';
|
||||
|
||||
const PASSWORD_PROMPT_SCREEN = 'PASSWORD_PROMPT_SCREEN';
|
||||
const REVEAL_SEED_SCREEN = 'REVEAL_SEED_SCREEN';
|
||||
|
||||
class RevealSeedPage extends Component {
|
||||
state = {
|
||||
screen: PASSWORD_PROMPT_SCREEN,
|
||||
password: '',
|
||||
seedWords: null,
|
||||
error: null,
|
||||
};
|
||||
const RevealSeedPage = () => {
|
||||
const history = useHistory();
|
||||
const dispatch = useDispatch();
|
||||
const t = useI18nContext();
|
||||
const trackEvent = useContext(MetaMetricsContext);
|
||||
|
||||
componentDidMount() {
|
||||
const [screen, setScreen] = useState(PASSWORD_PROMPT_SCREEN);
|
||||
const [password, setPassword] = useState('');
|
||||
const [seedWords, setSeedWords] = useState(null);
|
||||
const [completedLongPress, setCompletedLongPress] = useState(false);
|
||||
const [error, setError] = useState(null);
|
||||
const mostRecentOverviewPage = useSelector(getMostRecentOverviewPage);
|
||||
|
||||
useEffect(() => {
|
||||
const passwordBox = document.getElementById('password-box');
|
||||
if (passwordBox) {
|
||||
passwordBox.focus();
|
||||
}
|
||||
}
|
||||
}, []);
|
||||
|
||||
handleSubmit(event) {
|
||||
const renderQR = () => {
|
||||
const qrImage = qrCode(0, 'L');
|
||||
qrImage.addData(seedWords);
|
||||
qrImage.make();
|
||||
return qrImage;
|
||||
};
|
||||
|
||||
const handleSubmit = (event) => {
|
||||
event.preventDefault();
|
||||
this.setState({ seedWords: null, error: null });
|
||||
this.props
|
||||
.requestRevealSeedWords(this.state.password)
|
||||
.then((seedWords) => {
|
||||
this.context.trackEvent({
|
||||
setSeedWords(null);
|
||||
setCompletedLongPress(false);
|
||||
setError(null);
|
||||
dispatch(requestRevealSeedWords(password))
|
||||
.then((revealedSeedWords) => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_REVEALED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
},
|
||||
});
|
||||
this.setState({ seedWords, screen: REVEAL_SEED_SCREEN });
|
||||
setSeedWords(revealedSeedWords);
|
||||
|
||||
dispatch(
|
||||
showModal({
|
||||
name: 'HOLD_TO_REVEAL_SRP',
|
||||
onLongPressed: () => {
|
||||
setCompletedLongPress(true);
|
||||
setScreen(REVEAL_SEED_SCREEN);
|
||||
},
|
||||
}),
|
||||
);
|
||||
})
|
||||
.catch((error) => {
|
||||
this.context.trackEvent({
|
||||
.catch((e) => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_FAILED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
reason: error.message, // 'incorrect_password',
|
||||
reason: e.message, // 'incorrect_password',
|
||||
},
|
||||
});
|
||||
this.setState({ error: error.message });
|
||||
setError(e.message);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
renderWarning() {
|
||||
const renderWarning = () => {
|
||||
return (
|
||||
<div className="page-container__warning-container">
|
||||
<i className="fa fa-exclamation-triangle fa-2x page-container__warning-icon" />
|
||||
<div className="page-container__warning-message">
|
||||
<div className="page-container__warning-title">
|
||||
{this.context.t('revealSeedWordsWarningTitle')}
|
||||
</div>
|
||||
<div>{this.context.t('revealSeedWordsWarning')}</div>
|
||||
</div>
|
||||
</div>
|
||||
<BannerAlert severity={SEVERITIES.DANGER}>
|
||||
<Text variant={TextVariant.bodyMd}>
|
||||
{t('revealSeedWordsWarning', [
|
||||
<Text
|
||||
key="reveal-seed-words-warning-2"
|
||||
variant={TextVariant.bodyMdBold}
|
||||
as="strong"
|
||||
>
|
||||
{t('revealSeedWordsWarning2')}
|
||||
</Text>,
|
||||
])}
|
||||
</Text>
|
||||
</BannerAlert>
|
||||
);
|
||||
}
|
||||
|
||||
renderContent() {
|
||||
return this.state.screen === PASSWORD_PROMPT_SCREEN
|
||||
? this.renderPasswordPromptContent()
|
||||
: this.renderRevealSeedContent();
|
||||
}
|
||||
|
||||
renderPasswordPromptContent() {
|
||||
const { t } = this.context;
|
||||
};
|
||||
|
||||
const renderPasswordPromptContent = () => {
|
||||
return (
|
||||
<form onSubmit={(event) => this.handleSubmit(event)}>
|
||||
<label className="input-label" htmlFor="password-box">
|
||||
{t('enterPasswordContinue')}
|
||||
</label>
|
||||
<div className="input-group">
|
||||
<input
|
||||
data-testid="input-password"
|
||||
type="password"
|
||||
placeholder={t('password')}
|
||||
id="password-box"
|
||||
value={this.state.password}
|
||||
onChange={(event) =>
|
||||
this.setState({ password: event.target.value })
|
||||
}
|
||||
className={classnames('form-control', {
|
||||
'form-control--error': this.state.error,
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
{this.state.error && (
|
||||
<div className="reveal-seed__error">{this.state.error}</div>
|
||||
)}
|
||||
<form onSubmit={(event) => handleSubmit(event)}>
|
||||
<Label htmlFor="password-box">{t('enterPasswordContinue')}</Label>
|
||||
<TextField
|
||||
inputProps={{
|
||||
'data-testid': 'input-password',
|
||||
}}
|
||||
type={TEXT_FIELD_TYPES.PASSWORD}
|
||||
placeholder={t('makeSureNoOneWatching')}
|
||||
id="password-box"
|
||||
size={TEXT_FIELD_SIZES.LG}
|
||||
value={password}
|
||||
onChange={(event) => setPassword(event.target.value)}
|
||||
error={error}
|
||||
width={BLOCK_SIZES.FULL}
|
||||
/>
|
||||
{error && <HelpText error>{error}</HelpText>}
|
||||
</form>
|
||||
);
|
||||
}
|
||||
|
||||
renderRevealSeedContent() {
|
||||
const { t, trackEvent } = this.context;
|
||||
};
|
||||
|
||||
const renderRevealSeedContent = () => {
|
||||
return (
|
||||
<div>
|
||||
<label className="reveal-seed__label">
|
||||
{t('yourPrivateSeedPhrase')}
|
||||
</label>
|
||||
<ExportTextContainer
|
||||
text={this.state.seedWords}
|
||||
onClickCopy={() => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_COPIED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
copy_method: 'clipboard',
|
||||
},
|
||||
});
|
||||
}}
|
||||
onClickDownload={() => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_COPIED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
copy_method: 'file_download',
|
||||
},
|
||||
});
|
||||
}}
|
||||
/>
|
||||
<Tabs defaultActiveTabName={t('revealSeedWordsText')}>
|
||||
<Tab
|
||||
name={t('revealSeedWordsText')}
|
||||
className="reveal-seed__tab"
|
||||
activeClassName="reveal-seed__active-tab"
|
||||
tabKey="text-seed"
|
||||
>
|
||||
<Label marginTop={4}>{t('yourPrivateSeedPhrase')}</Label>
|
||||
<ExportTextContainer
|
||||
text={seedWords}
|
||||
onClickCopy={() => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_COPIED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
copy_method: 'clipboard',
|
||||
},
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Tab>
|
||||
<Tab
|
||||
name={t('revealSeedWordsQR')}
|
||||
className="reveal-seed__tab"
|
||||
activeClassName="reveal-seed__active-tab"
|
||||
tabKey="qr-seed"
|
||||
>
|
||||
<Box
|
||||
display={DISPLAY.FLEX}
|
||||
justifyContent={JustifyContent.center}
|
||||
alignItems={AlignItems.center}
|
||||
paddingTop={4}
|
||||
>
|
||||
<div
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: renderQR().createTableTag(5, 15),
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
renderFooter() {
|
||||
return this.state.screen === PASSWORD_PROMPT_SCREEN
|
||||
? this.renderPasswordPromptFooter()
|
||||
: this.renderRevealSeedFooter();
|
||||
}
|
||||
|
||||
renderPasswordPromptFooter() {
|
||||
const renderPasswordPromptFooter = () => {
|
||||
return (
|
||||
<div className="page-container__footer">
|
||||
<footer>
|
||||
<Button
|
||||
type="secondary"
|
||||
large
|
||||
className="page-container__footer-button"
|
||||
onClick={() => {
|
||||
this.context.trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_CANCELED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
},
|
||||
});
|
||||
this.props.history.push(this.props.mostRecentOverviewPage);
|
||||
}}
|
||||
>
|
||||
{this.context.t('cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
large
|
||||
className="page-container__footer-button"
|
||||
onClick={(event) => {
|
||||
this.context.trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_REQUESTED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
},
|
||||
});
|
||||
this.handleSubmit(event);
|
||||
}}
|
||||
disabled={this.state.password === ''}
|
||||
>
|
||||
{this.context.t('next')}
|
||||
</Button>
|
||||
</footer>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderRevealSeedFooter() {
|
||||
return (
|
||||
<div className="page-container__footer">
|
||||
<Box display={DISPLAY.FLEX} marginTop="auto" gap={4}>
|
||||
<Button
|
||||
type="secondary"
|
||||
large
|
||||
className="page-container__footer-single-button"
|
||||
onClick={() =>
|
||||
this.props.history.push(this.props.mostRecentOverviewPage)
|
||||
}
|
||||
width={BLOCK_SIZES.FULL}
|
||||
size={Size.LG}
|
||||
type={BUTTON_TYPES.SECONDARY}
|
||||
onClick={() => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_CANCELED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
},
|
||||
});
|
||||
history.push(mostRecentOverviewPage);
|
||||
}}
|
||||
>
|
||||
{this.context.t('close')}
|
||||
{t('cancel')}
|
||||
</Button>
|
||||
</div>
|
||||
<Button
|
||||
width={BLOCK_SIZES.FULL}
|
||||
size={Size.LG}
|
||||
onClick={(event) => {
|
||||
trackEvent({
|
||||
category: EVENT.CATEGORIES.KEYS,
|
||||
event: EVENT_NAMES.KEY_EXPORT_REQUESTED,
|
||||
properties: {
|
||||
key_type: EVENT.KEY_TYPES.SRP,
|
||||
},
|
||||
});
|
||||
handleSubmit(event);
|
||||
}}
|
||||
disabled={password === ''}
|
||||
>
|
||||
{t('next')}
|
||||
</Button>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const renderRevealSeedFooter = () => {
|
||||
return (
|
||||
<div className="page-container">
|
||||
<div className="page-container__header">
|
||||
<div className="page-container__title">
|
||||
{this.context.t('secretRecoveryPhrase')}
|
||||
</div>
|
||||
<div className="page-container__subtitle">
|
||||
{this.context.t('revealSeedWordsDescription')}
|
||||
</div>
|
||||
</div>
|
||||
<div className="page-container__content">
|
||||
{this.renderWarning()}
|
||||
<div className="reveal-seed__content">{this.renderContent()}</div>
|
||||
</div>
|
||||
{this.renderFooter()}
|
||||
</div>
|
||||
<Box marginTop="auto">
|
||||
<Button
|
||||
type={BUTTON_TYPES.SECONDARY}
|
||||
width={BLOCK_SIZES.FULL}
|
||||
size={Size.LG}
|
||||
onClick={() => history.push(mostRecentOverviewPage)}
|
||||
>
|
||||
{t('close')}
|
||||
</Button>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
RevealSeedPage.propTypes = {
|
||||
requestRevealSeedWords: PropTypes.func,
|
||||
history: PropTypes.object,
|
||||
mostRecentOverviewPage: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
RevealSeedPage.contextTypes = {
|
||||
t: PropTypes.func,
|
||||
trackEvent: PropTypes.func,
|
||||
};
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
return {
|
||||
mostRecentOverviewPage: getMostRecentOverviewPage(state),
|
||||
};
|
||||
};
|
||||
|
||||
const mapDispatchToProps = (dispatch) => {
|
||||
return {
|
||||
requestRevealSeedWords: (password) =>
|
||||
dispatch(requestRevealSeedWords(password)),
|
||||
const renderContent = () => {
|
||||
return screen === PASSWORD_PROMPT_SCREEN || !completedLongPress
|
||||
? renderPasswordPromptContent()
|
||||
: renderRevealSeedContent();
|
||||
};
|
||||
|
||||
const renderFooter = () => {
|
||||
return screen === PASSWORD_PROMPT_SCREEN || !completedLongPress
|
||||
? renderPasswordPromptFooter()
|
||||
: renderRevealSeedFooter();
|
||||
};
|
||||
|
||||
return (
|
||||
<Box
|
||||
className="page-container"
|
||||
paddingTop={8}
|
||||
paddingBottom={8}
|
||||
paddingLeft={4}
|
||||
paddingRight={4}
|
||||
gap={4}
|
||||
>
|
||||
<Text variant={TextVariant.headingLg}>{t('secretRecoveryPhrase')}</Text>
|
||||
<Text variant={TextVariant.bodyMd}>
|
||||
{t('revealSeedWordsDescription1', [
|
||||
<Button
|
||||
key="srp-learn-srp"
|
||||
type={BUTTON_TYPES.LINK}
|
||||
size={BUTTON_SIZES.INHERIT}
|
||||
as="a"
|
||||
href={ZENDESK_URLS.SECRET_RECOVERY_PHRASE}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{t('revealSeedWordsSRPName')}
|
||||
</Button>,
|
||||
<Text
|
||||
key="reveal-seed-word-part-3"
|
||||
variant={TextVariant.bodyMdBold}
|
||||
as="strong"
|
||||
>
|
||||
{t('revealSeedWordsDescription3')}
|
||||
</Text>,
|
||||
])}
|
||||
</Text>
|
||||
<Text variant={TextVariant.bodyMd}>
|
||||
{t('revealSeedWordsDescription2', [
|
||||
<Button
|
||||
key="srp-learn-more-non-custodial"
|
||||
type={BUTTON_TYPES.LINK}
|
||||
size={BUTTON_SIZES.INHERIT}
|
||||
as="a"
|
||||
href={ZENDESK_URLS.NON_CUSTODIAL_WALLET}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{t('revealSeedWordsNonCustodialWallet')}
|
||||
</Button>,
|
||||
])}
|
||||
</Text>
|
||||
{renderWarning()}
|
||||
{renderContent()}
|
||||
{renderFooter()}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(RevealSeedPage);
|
||||
export default RevealSeedPage;
|
||||
|
@ -1,31 +1,41 @@
|
||||
import React from 'react';
|
||||
import configureMockStore from 'redux-mock-store';
|
||||
import { fireEvent } from '@testing-library/react';
|
||||
import { fireEvent, waitFor } from '@testing-library/react';
|
||||
import thunk from 'redux-thunk';
|
||||
import { renderWithProvider } from '../../../test/lib/render-helpers';
|
||||
import { MODAL_OPEN } from '../../store/actionConstants';
|
||||
import mockState from '../../../test/data/mock-state.json';
|
||||
import RevealSeedPage from './reveal-seed';
|
||||
|
||||
const mockRequestRevealSeedWords = jest.fn().mockResolvedValue();
|
||||
const mockRequestRevealSeedWords = jest
|
||||
.fn()
|
||||
.mockResolvedValue('test seed words');
|
||||
|
||||
const mockShowModal = jest.fn().mockResolvedValue({
|
||||
type: MODAL_OPEN,
|
||||
payload: { name: 'HOLD_TO_REVEAL_SRP' },
|
||||
});
|
||||
|
||||
jest.mock('../../store/actions.ts', () => ({
|
||||
requestRevealSeedWords: () => mockRequestRevealSeedWords,
|
||||
showModal: () => mockShowModal,
|
||||
}));
|
||||
|
||||
describe('Reveal Seed Page', () => {
|
||||
const mockState = {
|
||||
history: {
|
||||
mostRecentOverviewPage: '/',
|
||||
},
|
||||
};
|
||||
const mockStore = configureMockStore([thunk])(mockState);
|
||||
|
||||
afterEach(() => {
|
||||
mockRequestRevealSeedWords.mockClear();
|
||||
mockShowModal.mockClear();
|
||||
});
|
||||
|
||||
it('should match snapshot', () => {
|
||||
const { container } = renderWithProvider(<RevealSeedPage />, mockStore);
|
||||
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('form submit', () => {
|
||||
it('form submit', async () => {
|
||||
const { queryByTestId, queryByText } = renderWithProvider(
|
||||
<RevealSeedPage />,
|
||||
mockStore,
|
||||
@ -37,6 +47,48 @@ describe('Reveal Seed Page', () => {
|
||||
|
||||
fireEvent.click(queryByText('Next'));
|
||||
|
||||
expect(mockRequestRevealSeedWords).toHaveBeenCalled();
|
||||
await waitFor(() => {
|
||||
expect(mockRequestRevealSeedWords).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('shows hold to reveal', async () => {
|
||||
const { queryByTestId, queryByText } = renderWithProvider(
|
||||
<RevealSeedPage />,
|
||||
mockStore,
|
||||
);
|
||||
|
||||
fireEvent.change(queryByTestId('input-password'), {
|
||||
target: { value: 'password' },
|
||||
});
|
||||
|
||||
fireEvent.click(queryByText('Next'));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockRequestRevealSeedWords).toHaveBeenCalled();
|
||||
expect(mockShowModal).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('does not show modal on bad password', async () => {
|
||||
const mockRequestPasswordFail = jest.fn().mockRejectedValue();
|
||||
jest.mock('../../store/actions.ts', () => ({
|
||||
requestRevealSeedWords: () => mockRequestPasswordFail,
|
||||
showModal: () => mockShowModal,
|
||||
}));
|
||||
const { queryByTestId, queryByText } = renderWithProvider(
|
||||
<RevealSeedPage />,
|
||||
mockStore,
|
||||
);
|
||||
|
||||
fireEvent.change(queryByTestId('input-password'), {
|
||||
target: { value: 'bad password' },
|
||||
});
|
||||
|
||||
fireEvent.click(queryByText('Next'));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockShowModal).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -338,7 +338,7 @@ export default class MobileSyncPage extends Component {
|
||||
<label className="input-label" htmlFor="password-box">
|
||||
{t('enterPasswordContinue')}
|
||||
</label>
|
||||
<div className="input-group">
|
||||
<div>
|
||||
<input
|
||||
type="password"
|
||||
placeholder={t('password')}
|
||||
|
@ -202,7 +202,6 @@ describe('Actions', () => {
|
||||
|
||||
const expectedActions = [
|
||||
{ type: 'SHOW_LOADING_INDICATION', payload: undefined },
|
||||
{ type: 'DISPLAY_WARNING', payload: 'error' },
|
||||
{ type: 'HIDE_LOADING_INDICATION' },
|
||||
];
|
||||
|
||||
|
@ -299,9 +299,6 @@ export function requestRevealSeedWords(
|
||||
await verifyPassword(password);
|
||||
const seedPhrase = await verifySeedPhrase();
|
||||
return seedPhrase;
|
||||
} catch (error) {
|
||||
dispatch(displayWarning(error));
|
||||
throw error;
|
||||
} finally {
|
||||
dispatch(hideLoadingIndication());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user