mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Network Form Design and switch to full screen enhancements (#12302)
This commit is contained in:
parent
e951fe6a64
commit
532927368d
@ -1258,7 +1258,6 @@ const state = {
|
|||||||
ledger: "m/44'/60'/0'/0/0",
|
ledger: "m/44'/60'/0'/0/0",
|
||||||
},
|
},
|
||||||
networksTabSelectedRpcUrl: '',
|
networksTabSelectedRpcUrl: '',
|
||||||
networksTabIsInAddMode: false,
|
|
||||||
loadingMethodData: false,
|
loadingMethodData: false,
|
||||||
show3BoxModalAfterImport: false,
|
show3BoxModalAfterImport: false,
|
||||||
threeBoxLastUpdated: null,
|
threeBoxLastUpdated: null,
|
||||||
|
@ -620,9 +620,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "አዲስ ኮንትራት"
|
"message": "አዲስ ኮንትራት"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "አዲስ አውታረ መረብ"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "አዲስ የይለፍ ቃል (ቢያንስ 8 ቁምፊዎች)"
|
"message": "አዲስ የይለፍ ቃል (ቢያንስ 8 ቁምፊዎች)"
|
||||||
},
|
},
|
||||||
|
@ -616,9 +616,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "عقد جديد"
|
"message": "عقد جديد"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "شبكة جديدة"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "كلمة مرور جديدة (8 أحرف كحد أدنى)"
|
"message": "كلمة مرور جديدة (8 أحرف كحد أدنى)"
|
||||||
},
|
},
|
||||||
|
@ -619,9 +619,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Нов договор"
|
"message": "Нов договор"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Нова мрежа"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Нова парола (мин. 8 символа)"
|
"message": "Нова парола (мин. 8 символа)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "নতুন কন্ট্র্যাক্ট"
|
"message": "নতুন কন্ট্র্যাক্ট"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "নতুন নেটওয়ার্ক"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "নতুন পাসওয়ার্ড (অন্তত 8 অক্ষরের)"
|
"message": "নতুন পাসওয়ার্ড (অন্তত 8 অক্ষরের)"
|
||||||
},
|
},
|
||||||
|
@ -607,9 +607,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nou Contracte"
|
"message": "Nou Contracte"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nova Xarxa"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nova contrasenya (mínim 8 caràcters)"
|
"message": "Nova contrasenya (mínim 8 caràcters)"
|
||||||
},
|
},
|
||||||
|
@ -607,9 +607,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Ny Kontrakt"
|
"message": "Ny Kontrakt"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nyt Netværk"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Ny adgangskode (min. 8 tegn)"
|
"message": "Ny adgangskode (min. 8 tegn)"
|
||||||
},
|
},
|
||||||
|
@ -602,9 +602,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Neuer Smart Contract"
|
"message": "Neuer Smart Contract"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Neues Netzwerk"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Neues Passwort (min. 8 Zeichen)"
|
"message": "Neues Passwort (min. 8 Zeichen)"
|
||||||
},
|
},
|
||||||
|
@ -620,9 +620,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Νέα Σύμβαση"
|
"message": "Νέα Σύμβαση"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Νέο Δίκτυο"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Νέος Κωδικός Πρόσβασης (ελάχιστο 8 χαρακτήρες)"
|
"message": "Νέος Κωδικός Πρόσβασης (ελάχιστο 8 χαρακτήρες)"
|
||||||
},
|
},
|
||||||
|
@ -43,6 +43,9 @@
|
|||||||
"activityLog": {
|
"activityLog": {
|
||||||
"message": "activity log"
|
"message": "activity log"
|
||||||
},
|
},
|
||||||
|
"addANetwork": {
|
||||||
|
"message": "Add a network"
|
||||||
|
},
|
||||||
"addAcquiredTokens": {
|
"addAcquiredTokens": {
|
||||||
"message": "Add the tokens you've acquired using MetaMask"
|
"message": "Add the tokens you've acquired using MetaMask"
|
||||||
},
|
},
|
||||||
@ -1517,8 +1520,8 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "New Contract"
|
"message": "New Contract"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
"newNetworkAdded": {
|
||||||
"message": "New Network"
|
"message": "“$1” was successfully added!"
|
||||||
},
|
},
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "New password (min 8 chars)"
|
"message": "New password (min 8 chars)"
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Contrato nuevo"
|
"message": "Contrato nuevo"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Red nueva"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Contraseña nueva (mín. de 8 caracteres)"
|
"message": "Contraseña nueva (mín. de 8 caracteres)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Contrato nuevo"
|
"message": "Contrato nuevo"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Red nueva"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Contraseña nueva (mín. de 8 caracteres)"
|
"message": "Contraseña nueva (mín. de 8 caracteres)"
|
||||||
},
|
},
|
||||||
|
@ -613,9 +613,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Uus kontakt"
|
"message": "Uus kontakt"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Uus võrk"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Uus parool (vähemalt 8 tähemärki)"
|
"message": "Uus parool (vähemalt 8 tähemärki)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "قرارداد جدید"
|
"message": "قرارداد جدید"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "شبکه جدید"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "رمز عبور جدید (حداقل 8 حرف)"
|
"message": "رمز عبور جدید (حداقل 8 حرف)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Uusi sopimus"
|
"message": "Uusi sopimus"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Uusi verkko"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Uusi salasana (väh. 8 merkkiä)"
|
"message": "Uusi salasana (väh. 8 merkkiä)"
|
||||||
},
|
},
|
||||||
|
@ -557,9 +557,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Bagong Contract"
|
"message": "Bagong Contract"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Bagong Network"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Bagong Password (min 8 char)"
|
"message": "Bagong Password (min 8 char)"
|
||||||
},
|
},
|
||||||
|
@ -608,9 +608,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nouveau contrat"
|
"message": "Nouveau contrat"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nouveau réseau"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nouveau mot de passe (min 8 caractères)"
|
"message": "Nouveau mot de passe (min 8 caractères)"
|
||||||
},
|
},
|
||||||
|
@ -620,9 +620,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "חוזה חדש"
|
"message": "חוזה חדש"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "רשת חדשה"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "ססמה חדשה (לפחות 8 תווים)"
|
"message": "ססמה חדשה (לפחות 8 תווים)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "नया अनुबंध"
|
"message": "नया अनुबंध"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "नया नेटवर्क"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "नया पासवर्ड (न्यूनतम 8 वर्ण)"
|
"message": "नया पासवर्ड (न्यूनतम 8 वर्ण)"
|
||||||
},
|
},
|
||||||
|
@ -616,9 +616,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Novi ugovor"
|
"message": "Novi ugovor"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nova mreža"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nova lozinka (najmanje osam znakova)"
|
"message": "Nova lozinka (najmanje osam znakova)"
|
||||||
},
|
},
|
||||||
|
@ -616,9 +616,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Új szerződés"
|
"message": "Új szerződés"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Új hálózat"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Új jelszó (minimum 8 karakter)"
|
"message": "Új jelszó (minimum 8 karakter)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Kontrak Baru"
|
"message": "Kontrak Baru"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Jaringan Baru"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Kata sandi baru (min. 8 karakter)"
|
"message": "Kata sandi baru (min. 8 karakter)"
|
||||||
},
|
},
|
||||||
|
@ -1007,9 +1007,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nuovo Contratto"
|
"message": "Nuovo Contratto"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nuova Rete"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nuova Password (minimo 8 caratteri)"
|
"message": "Nuova Password (minimo 8 caratteri)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "新しいコントラクト"
|
"message": "新しいコントラクト"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "新しいネットワーク"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "新しいパスワード (最低 8 文字)"
|
"message": "新しいパスワード (最低 8 文字)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "ಹೊಸ ಒಪ್ಪಂದ"
|
"message": "ಹೊಸ ಒಪ್ಪಂದ"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "ಹೊಸ ನೆಟ್ವರ್ಕ್"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "ಹೊಸ ಪಾಸ್ವರ್ಡ್ (ಕನಿಷ್ಟ 8 ಅಕ್ಷರಗಳು)"
|
"message": "ಹೊಸ ಪಾಸ್ವರ್ಡ್ (ಕನಿಷ್ಟ 8 ಅಕ್ಷರಗಳು)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "새 계약"
|
"message": "새 계약"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "새 네트워크"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "새 암호(8자 이상)"
|
"message": "새 암호(8자 이상)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nauja sutartis"
|
"message": "Nauja sutartis"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Naujas tinklas"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Naujas slaptažodis (bent 8 ženklai)"
|
"message": "Naujas slaptažodis (bent 8 ženklai)"
|
||||||
},
|
},
|
||||||
|
@ -619,9 +619,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Jauns līgums"
|
"message": "Jauns līgums"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Jauns tīkls"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Jauna parole (vism. 8 rakstzīmes)"
|
"message": "Jauna parole (vism. 8 rakstzīmes)"
|
||||||
},
|
},
|
||||||
|
@ -603,9 +603,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Kontrak Baru"
|
"message": "Kontrak Baru"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Rangkaian Baru"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Kata Laluan Baru (min 8 aks)"
|
"message": "Kata Laluan Baru (min 8 aks)"
|
||||||
},
|
},
|
||||||
|
@ -610,9 +610,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Ny kontaktperson"
|
"message": "Ny kontaktperson"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nytt nettverk "
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nytt passord (minimum 8 tegn)"
|
"message": "Nytt passord (minimum 8 tegn)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Bagong Kontrata"
|
"message": "Bagong Kontrata"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Bagong Network"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Bagong password (min na 8 char)"
|
"message": "Bagong password (min na 8 char)"
|
||||||
},
|
},
|
||||||
|
@ -620,9 +620,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nowy kontrakt"
|
"message": "Nowy kontrakt"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nowa sieć"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nowe hasło (min. 8 znaków)"
|
"message": "Nowe hasło (min. 8 znaków)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Novo contrato"
|
"message": "Novo contrato"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nova rede"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nova senha (mín. 8 caract.)"
|
"message": "Nova senha (mín. 8 caract.)"
|
||||||
},
|
},
|
||||||
|
@ -610,9 +610,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Contract nou"
|
"message": "Contract nou"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Rețea nouă"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Parola Nouă (minimum 8 caractere)"
|
"message": "Parola Nouă (minimum 8 caractere)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Новый контракт"
|
"message": "Новый контракт"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Новая сеть"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Новый пароль (мин.8 знаков)"
|
"message": "Новый пароль (мин.8 знаков)"
|
||||||
},
|
},
|
||||||
|
@ -595,9 +595,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nový kontrakt"
|
"message": "Nový kontrakt"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nová sieť"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nové heslo (min 8 znaků)"
|
"message": "Nové heslo (min 8 znaků)"
|
||||||
},
|
},
|
||||||
|
@ -611,9 +611,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nova pogodba"
|
"message": "Nova pogodba"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Novo omrežje"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Novo geslo (min 8 znakov)"
|
"message": "Novo geslo (min 8 znakov)"
|
||||||
},
|
},
|
||||||
|
@ -614,9 +614,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Novi ugovor"
|
"message": "Novi ugovor"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nova mreža"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nova lozinka (minimalno 8 karaktera)"
|
"message": "Nova lozinka (minimalno 8 karaktera)"
|
||||||
},
|
},
|
||||||
|
@ -607,9 +607,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Nytt kontrakt"
|
"message": "Nytt kontrakt"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Nytt nätverk"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nytt lösenord (minst 8 tecken)"
|
"message": "Nytt lösenord (minst 8 tecken)"
|
||||||
},
|
},
|
||||||
|
@ -601,9 +601,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Mkataba Mpya"
|
"message": "Mkataba Mpya"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Mtandao Mpya"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Nenosiri Jipya (kiwango cha chini herufi 8)"
|
"message": "Nenosiri Jipya (kiwango cha chini herufi 8)"
|
||||||
},
|
},
|
||||||
|
@ -1001,9 +1001,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Bagong Kontrata"
|
"message": "Bagong Kontrata"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Bagong Network"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Bagong password (min na 8 char)"
|
"message": "Bagong password (min na 8 char)"
|
||||||
},
|
},
|
||||||
|
@ -623,9 +623,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Новий контракт"
|
"message": "Новий контракт"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Нова мережа"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Новий пароль (мінімум 8 символів)"
|
"message": "Новий пароль (мінімум 8 символів)"
|
||||||
},
|
},
|
||||||
|
@ -1193,9 +1193,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "Hợp đồng mới"
|
"message": "Hợp đồng mới"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "Mạng mới"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "Mật khẩu mới (tối thiểu 8 ký tự)"
|
"message": "Mật khẩu mới (tối thiểu 8 ký tự)"
|
||||||
},
|
},
|
||||||
|
@ -1004,9 +1004,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "新合约"
|
"message": "新合约"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "新增网络"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "新密码(至少 8 个字符)"
|
"message": "新密码(至少 8 个字符)"
|
||||||
},
|
},
|
||||||
|
@ -629,9 +629,6 @@
|
|||||||
"newContract": {
|
"newContract": {
|
||||||
"message": "建立新合約"
|
"message": "建立新合約"
|
||||||
},
|
},
|
||||||
"newNetwork": {
|
|
||||||
"message": "新增網路"
|
|
||||||
},
|
|
||||||
"newPassword": {
|
"newPassword": {
|
||||||
"message": "新密碼(至少8個字元)"
|
"message": "新密碼(至少8個字元)"
|
||||||
},
|
},
|
||||||
|
3
app/images/check_circle.svg
Normal file
3
app/images/check_circle.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M15.75 8C15.75 3.75 12.25 0.25 8 0.25C3.71875 0.25 0.25 3.75 0.25 8C0.25 12.2812 3.71875 15.75 8 15.75C12.25 15.75 15.75 12.2812 15.75 8ZM7.09375 12.125C6.90625 12.3125 6.5625 12.3125 6.375 12.125L3.125 8.875C2.9375 8.6875 2.9375 8.34375 3.125 8.15625L3.84375 7.46875C4.03125 7.25 4.34375 7.25 4.53125 7.46875L6.75 9.65625L11.4375 4.96875C11.625 4.75 11.9375 4.75 12.125 4.96875L12.8438 5.65625C13.0312 5.84375 13.0312 6.1875 12.8438 6.375L7.09375 12.125Z" fill="#4CD964"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 586 B |
@ -32,7 +32,7 @@ describe('Stores custom RPC history', function () {
|
|||||||
|
|
||||||
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
||||||
|
|
||||||
await driver.findElement('.settings-page__sub-header-text');
|
await driver.findElement('.add-network-form__sub-header-text');
|
||||||
|
|
||||||
const customRpcInputs = await driver.findElements('input[type="text"]');
|
const customRpcInputs = await driver.findElements('input[type="text"]');
|
||||||
const networkNameInput = customRpcInputs[0];
|
const networkNameInput = customRpcInputs[0];
|
||||||
@ -48,7 +48,7 @@ describe('Stores custom RPC history', function () {
|
|||||||
await chainIdInput.clear();
|
await chainIdInput.clear();
|
||||||
await chainIdInput.sendKeys(chainId.toString());
|
await chainIdInput.sendKeys(chainId.toString());
|
||||||
|
|
||||||
await driver.clickElement('.network-form__footer .btn-primary');
|
await driver.clickElement('.add-network-form__footer .btn-primary');
|
||||||
await driver.findElement({ text: networkName, tag: 'span' });
|
await driver.findElement({ text: networkName, tag: 'span' });
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -73,7 +73,7 @@ describe('Stores custom RPC history', function () {
|
|||||||
|
|
||||||
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
||||||
|
|
||||||
await driver.findElement('.settings-page__sub-header-text');
|
await driver.findElement('.add-network-form__sub-header-text');
|
||||||
|
|
||||||
const customRpcInputs = await driver.findElements('input[type="text"]');
|
const customRpcInputs = await driver.findElements('input[type="text"]');
|
||||||
const rpcUrlInput = customRpcInputs[1];
|
const rpcUrlInput = customRpcInputs[1];
|
||||||
@ -108,7 +108,7 @@ describe('Stores custom RPC history', function () {
|
|||||||
|
|
||||||
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
||||||
|
|
||||||
await driver.findElement('.settings-page__sub-header-text');
|
await driver.findElement('.add-network-form__sub-header-text');
|
||||||
|
|
||||||
const customRpcInputs = await driver.findElements('input[type="text"]');
|
const customRpcInputs = await driver.findElements('input[type="text"]');
|
||||||
const rpcUrlInput = customRpcInputs[1];
|
const rpcUrlInput = customRpcInputs[1];
|
||||||
@ -192,7 +192,9 @@ describe('Stores custom RPC history', function () {
|
|||||||
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
await driver.clickElement({ text: 'Custom RPC', tag: 'span' });
|
||||||
|
|
||||||
// cancel new custom rpc
|
// cancel new custom rpc
|
||||||
await driver.clickElement('.network-form__footer button.btn-secondary');
|
await driver.clickElement(
|
||||||
|
'.add-network-form__footer button.btn-secondary',
|
||||||
|
);
|
||||||
|
|
||||||
const networkListItems = await driver.findClickableElements(
|
const networkListItems = await driver.findClickableElements(
|
||||||
'.networks-tab__networks-list-name',
|
'.networks-tab__networks-list-name',
|
||||||
|
@ -5,10 +5,7 @@ import { withRouter } from 'react-router-dom';
|
|||||||
import { compose } from 'redux';
|
import { compose } from 'redux';
|
||||||
import * as actions from '../../../store/actions';
|
import * as actions from '../../../store/actions';
|
||||||
import { openAlert as displayInvalidCustomNetworkAlert } from '../../../ducks/alerts/invalid-custom-network';
|
import { openAlert as displayInvalidCustomNetworkAlert } from '../../../ducks/alerts/invalid-custom-network';
|
||||||
import {
|
import { ADD_NETWORK_ROUTE } from '../../../helpers/constants/routes';
|
||||||
NETWORKS_ROUTE,
|
|
||||||
NETWORKS_FORM_ROUTE,
|
|
||||||
} from '../../../helpers/constants/routes';
|
|
||||||
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../shared/constants/app';
|
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../shared/constants/app';
|
||||||
import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network';
|
import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network';
|
||||||
import { isPrefixedFormattedHexString } from '../../../../shared/modules/network.utils';
|
import { isPrefixedFormattedHexString } from '../../../../shared/modules/network.utils';
|
||||||
@ -51,9 +48,6 @@ function mapDispatchToProps(dispatch) {
|
|||||||
dispatch(actions.setRpcTarget(target, chainId, ticker, nickname));
|
dispatch(actions.setRpcTarget(target, chainId, ticker, nickname));
|
||||||
},
|
},
|
||||||
hideNetworkDropdown: () => dispatch(actions.hideNetworkDropdown()),
|
hideNetworkDropdown: () => dispatch(actions.hideNetworkDropdown()),
|
||||||
setNetworksTabAddMode: (isInAddMode) => {
|
|
||||||
dispatch(actions.setNetworksTabAddMode(isInAddMode));
|
|
||||||
},
|
|
||||||
setSelectedSettingsRpcUrl: (url) => {
|
setSelectedSettingsRpcUrl: (url) => {
|
||||||
dispatch(actions.setSelectedSettingsRpcUrl(url));
|
dispatch(actions.setSelectedSettingsRpcUrl(url));
|
||||||
},
|
},
|
||||||
@ -88,7 +82,6 @@ class NetworkDropdown extends Component {
|
|||||||
setProviderType: PropTypes.func.isRequired,
|
setProviderType: PropTypes.func.isRequired,
|
||||||
setRpcTarget: PropTypes.func.isRequired,
|
setRpcTarget: PropTypes.func.isRequired,
|
||||||
hideNetworkDropdown: PropTypes.func.isRequired,
|
hideNetworkDropdown: PropTypes.func.isRequired,
|
||||||
setNetworksTabAddMode: PropTypes.func.isRequired,
|
|
||||||
setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
|
setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
|
||||||
frequentRpcListDetail: PropTypes.array.isRequired,
|
frequentRpcListDetail: PropTypes.array.isRequired,
|
||||||
networkDropdownOpen: PropTypes.bool.isRequired,
|
networkDropdownOpen: PropTypes.bool.isRequired,
|
||||||
@ -239,8 +232,8 @@ class NetworkDropdown extends Component {
|
|||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
provider: { rpcUrl: activeNetwork },
|
provider: { rpcUrl: activeNetwork },
|
||||||
setNetworksTabAddMode,
|
|
||||||
setSelectedSettingsRpcUrl,
|
setSelectedSettingsRpcUrl,
|
||||||
|
history,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const rpcListDetail = this.props.frequentRpcListDetail;
|
const rpcListDetail = this.props.frequentRpcListDetail;
|
||||||
const isOpen = this.props.networkDropdownOpen;
|
const isOpen = this.props.networkDropdownOpen;
|
||||||
@ -291,13 +284,12 @@ class NetworkDropdown extends Component {
|
|||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
closeMenu={() => this.props.hideNetworkDropdown()}
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.props.history.push(
|
if (getEnvironmentType() === ENVIRONMENT_TYPE_FULLSCREEN) {
|
||||||
getEnvironmentType() === ENVIRONMENT_TYPE_FULLSCREEN
|
history.push(ADD_NETWORK_ROUTE);
|
||||||
? NETWORKS_ROUTE
|
} else {
|
||||||
: NETWORKS_FORM_ROUTE,
|
global.platform.openExtensionInBrowser(ADD_NETWORK_ROUTE);
|
||||||
);
|
}
|
||||||
setSelectedSettingsRpcUrl('');
|
setSelectedSettingsRpcUrl('');
|
||||||
setNetworksTabAddMode(true);
|
|
||||||
}}
|
}}
|
||||||
style={DROP_DOWN_MENU_ITEM_STYLE}
|
style={DROP_DOWN_MENU_ITEM_STYLE}
|
||||||
>
|
>
|
||||||
|
@ -6,11 +6,13 @@ import InfoTooltipIcon from '../info-tooltip/info-tooltip-icon';
|
|||||||
|
|
||||||
const CLASSNAME_WARNING = 'actionable-message--warning';
|
const CLASSNAME_WARNING = 'actionable-message--warning';
|
||||||
const CLASSNAME_DANGER = 'actionable-message--danger';
|
const CLASSNAME_DANGER = 'actionable-message--danger';
|
||||||
|
const CLASSNAME_INFO = 'actionable-message--info';
|
||||||
const CLASSNAME_WITH_RIGHT_BUTTON = 'actionable-message--with-right-button';
|
const CLASSNAME_WITH_RIGHT_BUTTON = 'actionable-message--with-right-button';
|
||||||
|
|
||||||
const typeHash = {
|
const typeHash = {
|
||||||
warning: CLASSNAME_WARNING,
|
warning: CLASSNAME_WARNING,
|
||||||
danger: CLASSNAME_DANGER,
|
danger: CLASSNAME_DANGER,
|
||||||
|
info: CLASSNAME_INFO,
|
||||||
default: '',
|
default: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -85,6 +85,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&--info {
|
||||||
|
background: $Green-000;
|
||||||
|
border: 1px solid $Green-200;
|
||||||
|
|
||||||
|
.actionable-message__message {
|
||||||
|
color: $Black-100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&--left-aligned {
|
&--left-aligned {
|
||||||
.actionable-message__message,
|
.actionable-message__message,
|
||||||
.actionable-message__actions {
|
.actionable-message__actions {
|
||||||
|
@ -37,7 +37,6 @@ export default function reduceApp(state = {}, action) {
|
|||||||
ledger: `m/44'/60'/0'/0/0`,
|
ledger: `m/44'/60'/0'/0/0`,
|
||||||
},
|
},
|
||||||
networksTabSelectedRpcUrl: '',
|
networksTabSelectedRpcUrl: '',
|
||||||
networksTabIsInAddMode: false,
|
|
||||||
loadingMethodData: false,
|
loadingMethodData: false,
|
||||||
show3BoxModalAfterImport: false,
|
show3BoxModalAfterImport: false,
|
||||||
threeBoxLastUpdated: null,
|
threeBoxLastUpdated: null,
|
||||||
@ -50,6 +49,7 @@ export default function reduceApp(state = {}, action) {
|
|||||||
},
|
},
|
||||||
gasLoadingAnimationIsShowing: false,
|
gasLoadingAnimationIsShowing: false,
|
||||||
ledgerWebHidConnectedStatus: WEBHID_CONNECTED_STATUSES.UNKNOWN,
|
ledgerWebHidConnectedStatus: WEBHID_CONNECTED_STATUSES.UNKNOWN,
|
||||||
|
newNetworkAdded: '',
|
||||||
...state,
|
...state,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -279,10 +279,10 @@ export default function reduceApp(state = {}, action) {
|
|||||||
networksTabSelectedRpcUrl: action.value,
|
networksTabSelectedRpcUrl: action.value,
|
||||||
};
|
};
|
||||||
|
|
||||||
case actionConstants.SET_NETWORKS_TAB_ADD_MODE:
|
case actionConstants.SET_NEW_NETWORK_ADDED:
|
||||||
return {
|
return {
|
||||||
...appState,
|
...appState,
|
||||||
networksTabIsInAddMode: action.value,
|
newNetworkAdded: action.value,
|
||||||
};
|
};
|
||||||
|
|
||||||
case actionConstants.LOADING_METHOD_DATA_STARTED:
|
case actionConstants.LOADING_METHOD_DATA_STARTED:
|
||||||
|
@ -11,6 +11,7 @@ const ABOUT_US_ROUTE = '/settings/about-us';
|
|||||||
const ALERTS_ROUTE = '/settings/alerts';
|
const ALERTS_ROUTE = '/settings/alerts';
|
||||||
const NETWORKS_ROUTE = '/settings/networks';
|
const NETWORKS_ROUTE = '/settings/networks';
|
||||||
const NETWORKS_FORM_ROUTE = '/settings/networks/form';
|
const NETWORKS_FORM_ROUTE = '/settings/networks/form';
|
||||||
|
const ADD_NETWORK_ROUTE = '/settings/networks/add-network';
|
||||||
const CONTACT_LIST_ROUTE = '/settings/contact-list';
|
const CONTACT_LIST_ROUTE = '/settings/contact-list';
|
||||||
const CONTACT_EDIT_ROUTE = '/settings/contact-list/edit-contact';
|
const CONTACT_EDIT_ROUTE = '/settings/contact-list/edit-contact';
|
||||||
const CONTACT_ADD_ROUTE = '/settings/contact-list/add-contact';
|
const CONTACT_ADD_ROUTE = '/settings/contact-list/add-contact';
|
||||||
@ -96,6 +97,7 @@ const PATH_NAME_MAP = {
|
|||||||
[ALERTS_ROUTE]: 'Alerts Settings Page',
|
[ALERTS_ROUTE]: 'Alerts Settings Page',
|
||||||
[NETWORKS_ROUTE]: 'Network Settings Page',
|
[NETWORKS_ROUTE]: 'Network Settings Page',
|
||||||
[NETWORKS_FORM_ROUTE]: 'Network Settings Page Form',
|
[NETWORKS_FORM_ROUTE]: 'Network Settings Page Form',
|
||||||
|
[ADD_NETWORK_ROUTE]: 'Add Network From Settings Page Form',
|
||||||
[CONTACT_LIST_ROUTE]: 'Contact List Settings Page',
|
[CONTACT_LIST_ROUTE]: 'Contact List Settings Page',
|
||||||
[`${CONTACT_EDIT_ROUTE}/:address`]: 'Edit Contact Settings Page',
|
[`${CONTACT_EDIT_ROUTE}/:address`]: 'Edit Contact Settings Page',
|
||||||
[CONTACT_ADD_ROUTE]: 'Add Contact Settings Page',
|
[CONTACT_ADD_ROUTE]: 'Add Contact Settings Page',
|
||||||
@ -200,6 +202,7 @@ export {
|
|||||||
CONTACT_VIEW_ROUTE,
|
CONTACT_VIEW_ROUTE,
|
||||||
NETWORKS_ROUTE,
|
NETWORKS_ROUTE,
|
||||||
NETWORKS_FORM_ROUTE,
|
NETWORKS_FORM_ROUTE,
|
||||||
|
ADD_NETWORK_ROUTE,
|
||||||
INITIALIZE_BACKUP_SEED_PHRASE_ROUTE,
|
INITIALIZE_BACKUP_SEED_PHRASE_ROUTE,
|
||||||
INITIALIZE_SEED_PHRASE_INTRO_ROUTE,
|
INITIALIZE_SEED_PHRASE_INTRO_ROUTE,
|
||||||
CONNECT_ROUTE,
|
CONNECT_ROUTE,
|
||||||
|
@ -15,6 +15,9 @@ import { Tabs, Tab } from '../../components/ui/tabs';
|
|||||||
import { EthOverview } from '../../components/app/wallet-overview';
|
import { EthOverview } from '../../components/app/wallet-overview';
|
||||||
import WhatsNewPopup from '../../components/app/whats-new-popup';
|
import WhatsNewPopup from '../../components/app/whats-new-popup';
|
||||||
import RecoveryPhraseReminder from '../../components/app/recovery-phrase-reminder';
|
import RecoveryPhraseReminder from '../../components/app/recovery-phrase-reminder';
|
||||||
|
import ActionableMessage from '../../components/ui/actionable-message/actionable-message';
|
||||||
|
import Typography from '../../components/ui/typography/typography';
|
||||||
|
import { TYPOGRAPHY, FONT_WEIGHT } from '../../helpers/constants/design-system';
|
||||||
|
|
||||||
import { isBeta } from '../../helpers/utils/build-types';
|
import { isBeta } from '../../helpers/utils/build-types';
|
||||||
|
|
||||||
@ -84,6 +87,8 @@ export default class Home extends PureComponent {
|
|||||||
setRecoveryPhraseReminderHasBeenShown: PropTypes.func.isRequired,
|
setRecoveryPhraseReminderHasBeenShown: PropTypes.func.isRequired,
|
||||||
setRecoveryPhraseReminderLastShown: PropTypes.func.isRequired,
|
setRecoveryPhraseReminderLastShown: PropTypes.func.isRequired,
|
||||||
seedPhraseBackedUp: PropTypes.bool.isRequired,
|
seedPhraseBackedUp: PropTypes.bool.isRequired,
|
||||||
|
newNetworkAdded: PropTypes.string,
|
||||||
|
setNewNetworkAdded: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
@ -199,10 +204,36 @@ export default class Home extends PureComponent {
|
|||||||
originOfCurrentTab,
|
originOfCurrentTab,
|
||||||
disableWeb3ShimUsageAlert,
|
disableWeb3ShimUsageAlert,
|
||||||
infuraBlocked,
|
infuraBlocked,
|
||||||
|
newNetworkAdded,
|
||||||
|
setNewNetworkAdded,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MultipleNotifications>
|
<MultipleNotifications>
|
||||||
|
{newNetworkAdded ? (
|
||||||
|
<ActionableMessage
|
||||||
|
type="info"
|
||||||
|
className="home__new-network-notification"
|
||||||
|
message={
|
||||||
|
<div className="home__new-network-notification-message">
|
||||||
|
<img
|
||||||
|
src="./images/check_circle.svg"
|
||||||
|
className="home__new-network-notification-message--image"
|
||||||
|
/>
|
||||||
|
<Typography
|
||||||
|
variant={TYPOGRAPHY.H7}
|
||||||
|
fontWeight={FONT_WEIGHT.NORMAL}
|
||||||
|
>
|
||||||
|
{this.context.t('newNetworkAdded', [newNetworkAdded])}
|
||||||
|
</Typography>
|
||||||
|
<button
|
||||||
|
className="fas fa-times home__close"
|
||||||
|
title={t('close')}
|
||||||
|
onClick={() => setNewNetworkAdded('')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
{shouldShowWeb3ShimUsageNotification ? (
|
{shouldShowWeb3ShimUsageNotification ? (
|
||||||
<HomeNotification
|
<HomeNotification
|
||||||
descriptionText={t('web3ShimUsageNotification', [
|
descriptionText={t('web3ShimUsageNotification', [
|
||||||
|
@ -15,6 +15,7 @@ import {
|
|||||||
getShowWhatsNewPopup,
|
getShowWhatsNewPopup,
|
||||||
getSortedNotificationsToShow,
|
getSortedNotificationsToShow,
|
||||||
getShowRecoveryPhraseReminder,
|
getShowRecoveryPhraseReminder,
|
||||||
|
getNewNetworkAdded,
|
||||||
} from '../../selectors';
|
} from '../../selectors';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -28,6 +29,7 @@ import {
|
|||||||
setAlertEnabledness,
|
setAlertEnabledness,
|
||||||
setRecoveryPhraseReminderHasBeenShown,
|
setRecoveryPhraseReminderHasBeenShown,
|
||||||
setRecoveryPhraseReminderLastShown,
|
setRecoveryPhraseReminderLastShown,
|
||||||
|
setNewNetworkAdded,
|
||||||
} from '../../store/actions';
|
} from '../../store/actions';
|
||||||
import { setThreeBoxLastUpdated, hideWhatsNewPopup } from '../../ducks/app/app';
|
import { setThreeBoxLastUpdated, hideWhatsNewPopup } from '../../ducks/app/app';
|
||||||
import { getWeb3ShimUsageAlertEnabledness } from '../../ducks/metamask/metamask';
|
import { getWeb3ShimUsageAlertEnabledness } from '../../ducks/metamask/metamask';
|
||||||
@ -112,6 +114,7 @@ const mapStateToProps = (state) => {
|
|||||||
showWhatsNewPopup: getShowWhatsNewPopup(state),
|
showWhatsNewPopup: getShowWhatsNewPopup(state),
|
||||||
showRecoveryPhraseReminder: getShowRecoveryPhraseReminder(state),
|
showRecoveryPhraseReminder: getShowRecoveryPhraseReminder(state),
|
||||||
seedPhraseBackedUp,
|
seedPhraseBackedUp,
|
||||||
|
newNetworkAdded: getNewNetworkAdded(state),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -141,6 +144,9 @@ const mapDispatchToProps = (dispatch) => ({
|
|||||||
dispatch(setRecoveryPhraseReminderHasBeenShown()),
|
dispatch(setRecoveryPhraseReminderHasBeenShown()),
|
||||||
setRecoveryPhraseReminderLastShown: (lastShown) =>
|
setRecoveryPhraseReminderLastShown: (lastShown) =>
|
||||||
dispatch(setRecoveryPhraseReminderLastShown(lastShown)),
|
dispatch(setRecoveryPhraseReminderLastShown(lastShown)),
|
||||||
|
setNewNetworkAdded: (newNetwork) => {
|
||||||
|
dispatch(setNewNetworkAdded(newNetwork));
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default compose(
|
export default compose(
|
||||||
|
@ -133,4 +133,23 @@
|
|||||||
color: $primary-1;
|
color: $primary-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__new-network-notification {
|
||||||
|
margin-bottom: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__new-network-notification-message {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
&--image {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__close {
|
||||||
|
color: $ui-black;
|
||||||
|
background: none;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
@import 'network-form/index.scss';
|
||||||
|
|
||||||
.networks-tab {
|
.networks-tab {
|
||||||
&__content {
|
&__content {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
@ -86,6 +88,7 @@
|
|||||||
@include H6;
|
@include H6;
|
||||||
|
|
||||||
color: #000;
|
color: #000;
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__network-form-label-tooltip {
|
&__network-form-label-tooltip {
|
||||||
|
76
ui/pages/settings/networks-tab/network-form/index.scss
Normal file
76
ui/pages/settings/networks-tab/network-form/index.scss
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
.add-network-form {
|
||||||
|
&__body {
|
||||||
|
padding-right: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__subheader {
|
||||||
|
@include H4;
|
||||||
|
|
||||||
|
padding: 16px 4px;
|
||||||
|
border-bottom: 1px solid $alto;
|
||||||
|
height: 72px;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__subheader--break {
|
||||||
|
margin-inline-start: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__sub-header-text {
|
||||||
|
@include H4;
|
||||||
|
|
||||||
|
color: $ui-4;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__content {
|
||||||
|
justify-content: space-between;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&--warning {
|
||||||
|
@include H7;
|
||||||
|
|
||||||
|
background-color: $Yellow-000;
|
||||||
|
border: 1px solid $alert-1;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 12px;
|
||||||
|
margin: 12px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__form-column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__form-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__network-form-row {
|
||||||
|
padding-bottom: 30px;
|
||||||
|
width: 48%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__footer {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row;
|
||||||
|
padding: 0 0 0.75rem 0;
|
||||||
|
width: 60%;
|
||||||
|
|
||||||
|
&-cancel-button {
|
||||||
|
margin-right: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-submit-button {
|
||||||
|
margin-left: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -23,12 +23,12 @@ const FORM_STATE_KEYS = [
|
|||||||
export default class NetworkForm extends PureComponent {
|
export default class NetworkForm extends PureComponent {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
t: PropTypes.func.isRequired,
|
t: PropTypes.func.isRequired,
|
||||||
metricsEvent: PropTypes.func.isRequired,
|
metricsEvent: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
editRpc: PropTypes.func.isRequired,
|
editRpc: PropTypes.func,
|
||||||
showConfirmDeleteNetworkModal: PropTypes.func.isRequired,
|
showConfirmDeleteNetworkModal: PropTypes.func,
|
||||||
rpcUrl: PropTypes.string,
|
rpcUrl: PropTypes.string,
|
||||||
chainId: PropTypes.string,
|
chainId: PropTypes.string,
|
||||||
ticker: PropTypes.string,
|
ticker: PropTypes.string,
|
||||||
@ -36,12 +36,13 @@ export default class NetworkForm extends PureComponent {
|
|||||||
networkName: PropTypes.string,
|
networkName: PropTypes.string,
|
||||||
onClear: PropTypes.func.isRequired,
|
onClear: PropTypes.func.isRequired,
|
||||||
setRpcTarget: PropTypes.func.isRequired,
|
setRpcTarget: PropTypes.func.isRequired,
|
||||||
networksTabIsInAddMode: PropTypes.bool,
|
|
||||||
isCurrentRpcTarget: PropTypes.bool,
|
isCurrentRpcTarget: PropTypes.bool,
|
||||||
blockExplorerUrl: PropTypes.string,
|
blockExplorerUrl: PropTypes.string,
|
||||||
rpcPrefs: PropTypes.object,
|
rpcPrefs: PropTypes.object,
|
||||||
networksToRender: PropTypes.array,
|
networksToRender: PropTypes.array.isRequired,
|
||||||
onAddNetwork: PropTypes.func.isRequired,
|
onAddNetwork: PropTypes.func,
|
||||||
|
setNewNetworkAdded: PropTypes.func,
|
||||||
|
addNewNetwork: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
@ -63,10 +64,10 @@ export default class NetworkForm extends PureComponent {
|
|||||||
};
|
};
|
||||||
|
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps) {
|
||||||
const { networksTabIsInAddMode: prevAddMode } = prevProps;
|
const { addNewNetwork: prevAddMode } = prevProps;
|
||||||
const { networksTabIsInAddMode } = this.props;
|
const { addNewNetwork } = this.props;
|
||||||
|
|
||||||
if (!prevAddMode && networksTabIsInAddMode) {
|
if (!prevAddMode && addNewNetwork) {
|
||||||
this.setState({
|
this.setState({
|
||||||
rpcUrl: '',
|
rpcUrl: '',
|
||||||
chainId: '',
|
chainId: '',
|
||||||
@ -95,7 +96,6 @@ export default class NetworkForm extends PureComponent {
|
|||||||
blockExplorerUrl: '',
|
blockExplorerUrl: '',
|
||||||
errors: {},
|
errors: {},
|
||||||
});
|
});
|
||||||
|
|
||||||
// onClear will push the network settings route unless was pass false.
|
// onClear will push the network settings route unless was pass false.
|
||||||
// Since we call onClear to cause this component to be unmounted, the
|
// Since we call onClear to cause this component to be unmounted, the
|
||||||
// route will already have been updated, and we avoid setting it twice.
|
// route will already have been updated, and we avoid setting it twice.
|
||||||
@ -166,7 +166,8 @@ export default class NetworkForm extends PureComponent {
|
|||||||
editRpc,
|
editRpc,
|
||||||
rpcPrefs = {},
|
rpcPrefs = {},
|
||||||
onAddNetwork,
|
onAddNetwork,
|
||||||
networksTabIsInAddMode,
|
setNewNetworkAdded,
|
||||||
|
addNewNetwork,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const {
|
const {
|
||||||
networkName,
|
networkName,
|
||||||
@ -199,7 +200,8 @@ export default class NetworkForm extends PureComponent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (networksTabIsInAddMode) {
|
if (addNewNetwork) {
|
||||||
|
setNewNetworkAdded(networkName);
|
||||||
onAddNetwork();
|
onAddNetwork();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -211,9 +213,9 @@ export default class NetworkForm extends PureComponent {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onCancel = () => {
|
onCancel = () => {
|
||||||
const { networksTabIsInAddMode, onClear } = this.props;
|
const { addNewNetwork, onClear } = this.props;
|
||||||
|
|
||||||
if (networksTabIsInAddMode) {
|
if (addNewNetwork) {
|
||||||
onClear();
|
onClear();
|
||||||
} else {
|
} else {
|
||||||
this.resetForm();
|
this.resetForm();
|
||||||
@ -270,6 +272,7 @@ export default class NetworkForm extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderFormTextField({
|
renderFormTextField({
|
||||||
|
className,
|
||||||
fieldKey,
|
fieldKey,
|
||||||
textFieldId,
|
textFieldId,
|
||||||
onChange,
|
onChange,
|
||||||
@ -283,7 +286,7 @@ export default class NetworkForm extends PureComponent {
|
|||||||
const errorMessage = errors[fieldKey]?.msg || '';
|
const errorMessage = errors[fieldKey]?.msg || '';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="networks-tab__network-form-row">
|
<div className={className}>
|
||||||
<div className="networks-tab__network-form-label">
|
<div className="networks-tab__network-form-label">
|
||||||
<div className="networks-tab__network-form-label-text">
|
<div className="networks-tab__network-form-label-text">
|
||||||
{this.context.t(optionalTextFieldKey || fieldKey)}
|
{this.context.t(optionalTextFieldKey || fieldKey)}
|
||||||
@ -548,18 +551,8 @@ export default class NetworkForm extends PureComponent {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
renderWarning() {
|
renderAddNetworkForm() {
|
||||||
const { t } = this.context;
|
const { t } = this.context;
|
||||||
return (
|
|
||||||
<div className="networks-tab__network-form-row--warning">
|
|
||||||
{t('onlyAddTrustedNetworks')}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const { t } = this.context;
|
|
||||||
const { viewOnly, isCurrentRpcTarget, networksTabIsInAddMode } = this.props;
|
|
||||||
const {
|
const {
|
||||||
networkName,
|
networkName,
|
||||||
rpcUrl,
|
rpcUrl,
|
||||||
@ -568,8 +561,115 @@ export default class NetworkForm extends PureComponent {
|
|||||||
blockExplorerUrl,
|
blockExplorerUrl,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const deletable =
|
const isSubmitDisabled =
|
||||||
!networksTabIsInAddMode && !isCurrentRpcTarget && !viewOnly;
|
this.hasErrors() || this.isSubmitting() || !rpcUrl || !chainId;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="add-network-form__body">
|
||||||
|
<div className="add-network-form__subheader">
|
||||||
|
<span className="add-network-form__sub-header-text">
|
||||||
|
{t('networks')}
|
||||||
|
</span>
|
||||||
|
<span>{' > '}</span>
|
||||||
|
<div className="add-network-form__subheader--break">
|
||||||
|
{t('addANetwork')}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="add-network-form__content">
|
||||||
|
<div className="add-network-form__content--warning">
|
||||||
|
{t('onlyAddTrustedNetworks')}
|
||||||
|
</div>
|
||||||
|
<div className="add-network-form__form-column">
|
||||||
|
<div className="add-network-form__form-row">
|
||||||
|
{this.renderFormTextField({
|
||||||
|
className: 'add-network-form__network-form-row',
|
||||||
|
fieldKey: 'networkName',
|
||||||
|
textFieldId: 'network-name',
|
||||||
|
onChange: this.setStateWithValue('networkName'),
|
||||||
|
value: networkName,
|
||||||
|
autoFocus: true,
|
||||||
|
})}
|
||||||
|
{this.renderFormTextField({
|
||||||
|
className: 'add-network-form__network-form-row',
|
||||||
|
fieldKey: 'rpcUrl',
|
||||||
|
textFieldId: 'rpc-url',
|
||||||
|
onChange: this.setStateWithValue(
|
||||||
|
'rpcUrl',
|
||||||
|
this.validateUrlRpcUrl,
|
||||||
|
),
|
||||||
|
value: rpcUrl,
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
<div className="add-network-form__form-row">
|
||||||
|
{this.renderFormTextField({
|
||||||
|
className: 'add-network-form__network-form-row',
|
||||||
|
fieldKey: 'chainId',
|
||||||
|
textFieldId: 'chainId',
|
||||||
|
onChange: this.setStateWithValue(
|
||||||
|
'chainId',
|
||||||
|
this.validateChainIdOnChange.bind(this, rpcUrl),
|
||||||
|
),
|
||||||
|
value: chainId,
|
||||||
|
tooltipText: t('networkSettingsChainIdDescription'),
|
||||||
|
})}
|
||||||
|
{this.renderFormTextField({
|
||||||
|
className: 'add-network-form__network-form-row',
|
||||||
|
fieldKey: 'symbol',
|
||||||
|
textFieldId: 'network-ticker',
|
||||||
|
onChange: this.setStateWithValue('ticker'),
|
||||||
|
value: ticker,
|
||||||
|
optionalTextFieldKey: 'optionalCurrencySymbol',
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
<div className="add-network-form__form-row">
|
||||||
|
{this.renderFormTextField({
|
||||||
|
className: 'add-network-form__network-form-row',
|
||||||
|
fieldKey: 'blockExplorerUrl',
|
||||||
|
textFieldId: 'block-explorer-url',
|
||||||
|
onChange: this.setStateWithValue(
|
||||||
|
'blockExplorerUrl',
|
||||||
|
this.validateBlockExplorerURL,
|
||||||
|
),
|
||||||
|
value: blockExplorerUrl,
|
||||||
|
optionalTextFieldKey: 'optionalBlockExplorerUrl',
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="add-network-form__footer">
|
||||||
|
<Button
|
||||||
|
type="secondary"
|
||||||
|
onClick={this.onCancel}
|
||||||
|
className="add-network-form__footer-cancel-button"
|
||||||
|
>
|
||||||
|
{t('cancel')}
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
disabled={isSubmitDisabled}
|
||||||
|
onClick={this.onSubmit}
|
||||||
|
className="add-network-form__footer-submit-button"
|
||||||
|
>
|
||||||
|
{t('save')}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
renderNetworkForm() {
|
||||||
|
const { t } = this.context;
|
||||||
|
const { viewOnly, isCurrentRpcTarget } = this.props;
|
||||||
|
const {
|
||||||
|
networkName,
|
||||||
|
rpcUrl,
|
||||||
|
chainId = '',
|
||||||
|
ticker,
|
||||||
|
blockExplorerUrl,
|
||||||
|
} = this.state;
|
||||||
|
|
||||||
|
const deletable = !isCurrentRpcTarget && !viewOnly;
|
||||||
|
|
||||||
const isSubmitDisabled =
|
const isSubmitDisabled =
|
||||||
this.hasErrors() ||
|
this.hasErrors() ||
|
||||||
this.isSubmitting() ||
|
this.isSubmitting() ||
|
||||||
@ -579,21 +679,22 @@ export default class NetworkForm extends PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="networks-tab__network-form">
|
<div className="networks-tab__network-form">
|
||||||
{viewOnly ? null : this.renderWarning()}
|
|
||||||
{this.renderFormTextField({
|
{this.renderFormTextField({
|
||||||
|
className: 'networks-tab__network-form-row',
|
||||||
fieldKey: 'networkName',
|
fieldKey: 'networkName',
|
||||||
textFieldId: 'network-name',
|
textFieldId: 'network-name',
|
||||||
onChange: this.setStateWithValue('networkName'),
|
onChange: this.setStateWithValue('networkName'),
|
||||||
value: networkName,
|
value: networkName,
|
||||||
autoFocus: networksTabIsInAddMode,
|
|
||||||
})}
|
})}
|
||||||
{this.renderFormTextField({
|
{this.renderFormTextField({
|
||||||
|
className: 'networks-tab__network-form-row',
|
||||||
fieldKey: 'rpcUrl',
|
fieldKey: 'rpcUrl',
|
||||||
textFieldId: 'rpc-url',
|
textFieldId: 'rpc-url',
|
||||||
onChange: this.setStateWithValue('rpcUrl', this.validateUrlRpcUrl),
|
onChange: this.setStateWithValue('rpcUrl', this.validateUrlRpcUrl),
|
||||||
value: rpcUrl,
|
value: rpcUrl,
|
||||||
})}
|
})}
|
||||||
{this.renderFormTextField({
|
{this.renderFormTextField({
|
||||||
|
className: 'networks-tab__network-form-row',
|
||||||
fieldKey: 'chainId',
|
fieldKey: 'chainId',
|
||||||
textFieldId: 'chainId',
|
textFieldId: 'chainId',
|
||||||
onChange: this.setStateWithValue(
|
onChange: this.setStateWithValue(
|
||||||
@ -604,6 +705,7 @@ export default class NetworkForm extends PureComponent {
|
|||||||
tooltipText: viewOnly ? null : t('networkSettingsChainIdDescription'),
|
tooltipText: viewOnly ? null : t('networkSettingsChainIdDescription'),
|
||||||
})}
|
})}
|
||||||
{this.renderFormTextField({
|
{this.renderFormTextField({
|
||||||
|
className: 'networks-tab__network-form-row',
|
||||||
fieldKey: 'symbol',
|
fieldKey: 'symbol',
|
||||||
textFieldId: 'network-ticker',
|
textFieldId: 'network-ticker',
|
||||||
onChange: this.setStateWithValue('ticker'),
|
onChange: this.setStateWithValue('ticker'),
|
||||||
@ -611,6 +713,7 @@ export default class NetworkForm extends PureComponent {
|
|||||||
optionalTextFieldKey: 'optionalCurrencySymbol',
|
optionalTextFieldKey: 'optionalCurrencySymbol',
|
||||||
})}
|
})}
|
||||||
{this.renderFormTextField({
|
{this.renderFormTextField({
|
||||||
|
className: 'networks-tab__network-form-row',
|
||||||
fieldKey: 'blockExplorerUrl',
|
fieldKey: 'blockExplorerUrl',
|
||||||
textFieldId: 'block-explorer-url',
|
textFieldId: 'block-explorer-url',
|
||||||
onChange: this.setStateWithValue(
|
onChange: this.setStateWithValue(
|
||||||
@ -648,4 +751,11 @@ export default class NetworkForm extends PureComponent {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { addNewNetwork } = this.props;
|
||||||
|
return addNewNetwork
|
||||||
|
? this.renderAddNetworkForm()
|
||||||
|
: this.renderNetworkForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,98 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import configureMockStore from 'redux-mock-store';
|
||||||
|
import { fireEvent } from '@testing-library/react';
|
||||||
|
import { renderWithProvider } from '../../../../../test/jest/rendering';
|
||||||
|
import { defaultNetworksData } from '../networks-tab.constants';
|
||||||
|
import NetworkForm from '.';
|
||||||
|
|
||||||
|
const renderComponent = (props) => {
|
||||||
|
const store = configureMockStore([])({ metamask: {} });
|
||||||
|
return renderWithProvider(<NetworkForm {...props} />, store);
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultNetworks = defaultNetworksData.map((network) => ({
|
||||||
|
...network,
|
||||||
|
viewOnly: true,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const propNewNetwork = {
|
||||||
|
onClear: () => undefined,
|
||||||
|
setRpcTarget: () => undefined,
|
||||||
|
networksToRender: defaultNetworks,
|
||||||
|
onAddNetwork: () => undefined,
|
||||||
|
setNewNetworkAdded: () => undefined,
|
||||||
|
addNewNetwork: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
const propNetworkDisplay = {
|
||||||
|
editRpc: () => undefined,
|
||||||
|
showConfirmDeleteNetworkModal: () => undefined,
|
||||||
|
rpcUrl: 'http://localhost:8545',
|
||||||
|
chainId: '1337',
|
||||||
|
ticker: 'ETH',
|
||||||
|
viewOnly: false,
|
||||||
|
networkName: 'LocalHost',
|
||||||
|
onClear: () => undefined,
|
||||||
|
setRpcTarget: () => undefined,
|
||||||
|
isCurrentRpcTarget: false,
|
||||||
|
blockExplorerUrl: '',
|
||||||
|
rpcPrefs: {},
|
||||||
|
networksToRender: defaultNetworks,
|
||||||
|
onAddNetwork: () => undefined,
|
||||||
|
setNewNetworkAdded: () => undefined,
|
||||||
|
addNewNetwork: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('NetworkForm Component', () => {
|
||||||
|
it('should render Add new network form correctly', () => {
|
||||||
|
const { queryByText } = renderComponent(propNewNetwork);
|
||||||
|
expect(queryByText('Network Name')).toBeInTheDocument();
|
||||||
|
expect(queryByText('New RPC URL')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Chain ID')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Currency Symbol (optional)')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Block Explorer URL (optional)')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Cancel')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Save')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render network form correctly', () => {
|
||||||
|
const { queryByText, getByDisplayValue } = renderComponent(
|
||||||
|
propNetworkDisplay,
|
||||||
|
);
|
||||||
|
expect(queryByText('Network Name')).toBeInTheDocument();
|
||||||
|
expect(queryByText('New RPC URL')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Chain ID')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Currency Symbol (optional)')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Block Explorer URL (optional)')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Delete')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Cancel')).toBeInTheDocument();
|
||||||
|
expect(queryByText('Save')).toBeInTheDocument();
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getByDisplayValue(propNetworkDisplay.networkName),
|
||||||
|
).toBeInTheDocument();
|
||||||
|
expect(getByDisplayValue(propNetworkDisplay.rpcUrl)).toBeInTheDocument();
|
||||||
|
expect(getByDisplayValue(propNetworkDisplay.chainId)).toBeInTheDocument();
|
||||||
|
expect(getByDisplayValue(propNetworkDisplay.ticker)).toBeInTheDocument();
|
||||||
|
expect(
|
||||||
|
getByDisplayValue(propNetworkDisplay.blockExplorerUrl),
|
||||||
|
).toBeInTheDocument();
|
||||||
|
fireEvent.change(getByDisplayValue(propNetworkDisplay.networkName), {
|
||||||
|
target: { value: 'LocalHost 8545' },
|
||||||
|
});
|
||||||
|
expect(getByDisplayValue('LocalHost 8545')).toBeInTheDocument();
|
||||||
|
fireEvent.change(getByDisplayValue(propNetworkDisplay.chainId), {
|
||||||
|
target: { value: '1' },
|
||||||
|
});
|
||||||
|
expect(
|
||||||
|
queryByText('This Chain ID is currently used by the mainnet network.'),
|
||||||
|
).toBeInTheDocument();
|
||||||
|
|
||||||
|
fireEvent.change(getByDisplayValue(propNetworkDisplay.rpcUrl), {
|
||||||
|
target: { value: 'test' },
|
||||||
|
});
|
||||||
|
expect(
|
||||||
|
queryByText('URLs require the appropriate HTTP/HTTPS prefix.'),
|
||||||
|
).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
@ -8,9 +8,10 @@ import {
|
|||||||
NETWORKS_ROUTE,
|
NETWORKS_ROUTE,
|
||||||
NETWORKS_FORM_ROUTE,
|
NETWORKS_FORM_ROUTE,
|
||||||
DEFAULT_ROUTE,
|
DEFAULT_ROUTE,
|
||||||
|
ADD_NETWORK_ROUTE,
|
||||||
} from '../../../helpers/constants/routes';
|
} from '../../../helpers/constants/routes';
|
||||||
import ColorIndicator from '../../../components/ui/color-indicator';
|
import ColorIndicator from '../../../components/ui/color-indicator';
|
||||||
import { COLORS, SIZES } from '../../../helpers/constants/design-system';
|
import { SIZES } from '../../../helpers/constants/design-system';
|
||||||
import NetworkForm from './network-form';
|
import NetworkForm from './network-form';
|
||||||
|
|
||||||
export default class NetworksTab extends PureComponent {
|
export default class NetworksTab extends PureComponent {
|
||||||
@ -23,10 +24,8 @@ export default class NetworksTab extends PureComponent {
|
|||||||
editRpc: PropTypes.func.isRequired,
|
editRpc: PropTypes.func.isRequired,
|
||||||
location: PropTypes.object.isRequired,
|
location: PropTypes.object.isRequired,
|
||||||
networkIsSelected: PropTypes.bool,
|
networkIsSelected: PropTypes.bool,
|
||||||
networksTabIsInAddMode: PropTypes.bool,
|
|
||||||
networksToRender: PropTypes.arrayOf(PropTypes.object).isRequired,
|
networksToRender: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||||
selectedNetwork: PropTypes.object,
|
selectedNetwork: PropTypes.object,
|
||||||
setNetworksTabAddMode: PropTypes.func.isRequired,
|
|
||||||
setRpcTarget: PropTypes.func.isRequired,
|
setRpcTarget: PropTypes.func.isRequired,
|
||||||
setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
|
setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
|
||||||
showConfirmDeleteNetworkModal: PropTypes.func.isRequired,
|
showConfirmDeleteNetworkModal: PropTypes.func.isRequired,
|
||||||
@ -36,6 +35,8 @@ export default class NetworksTab extends PureComponent {
|
|||||||
history: PropTypes.object.isRequired,
|
history: PropTypes.object.isRequired,
|
||||||
shouldRenderNetworkForm: PropTypes.bool.isRequired,
|
shouldRenderNetworkForm: PropTypes.bool.isRequired,
|
||||||
isFullScreen: PropTypes.bool.isRequired,
|
isFullScreen: PropTypes.bool.isRequired,
|
||||||
|
setNewNetworkAdded: PropTypes.func.isRequired,
|
||||||
|
addNewNetwork: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
@ -47,7 +48,7 @@ export default class NetworksTab extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderSubHeader() {
|
renderSubHeader() {
|
||||||
const { setSelectedSettingsRpcUrl, setNetworksTabAddMode } = this.props;
|
const { history } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="settings-page__sub-header">
|
<div className="settings-page__sub-header">
|
||||||
@ -59,11 +60,10 @@ export default class NetworksTab extends PureComponent {
|
|||||||
type="primary"
|
type="primary"
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setSelectedSettingsRpcUrl('');
|
history.push(ADD_NETWORK_ROUTE);
|
||||||
setNetworksTabAddMode(true);
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{this.context.t('addNetwork')}
|
{this.context.t('addANetwork')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -73,11 +73,9 @@ export default class NetworksTab extends PureComponent {
|
|||||||
renderNetworkListItem(network, selectRpcUrl) {
|
renderNetworkListItem(network, selectRpcUrl) {
|
||||||
const {
|
const {
|
||||||
setSelectedSettingsRpcUrl,
|
setSelectedSettingsRpcUrl,
|
||||||
setNetworksTabAddMode,
|
|
||||||
networkIsSelected,
|
networkIsSelected,
|
||||||
providerUrl,
|
providerUrl,
|
||||||
providerType,
|
providerType,
|
||||||
networksTabIsInAddMode,
|
|
||||||
history,
|
history,
|
||||||
isFullScreen,
|
isFullScreen,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
@ -94,7 +92,6 @@ export default class NetworksTab extends PureComponent {
|
|||||||
providerType !== NETWORK_TYPE_RPC && currentProviderType === providerType;
|
providerType !== NETWORK_TYPE_RPC && currentProviderType === providerType;
|
||||||
const listItemNetworkIsCurrentProvider =
|
const listItemNetworkIsCurrentProvider =
|
||||||
!networkIsSelected &&
|
!networkIsSelected &&
|
||||||
!networksTabIsInAddMode &&
|
|
||||||
(listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType);
|
(listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType);
|
||||||
const displayNetworkListItemAsSelected =
|
const displayNetworkListItemAsSelected =
|
||||||
listItemNetworkIsSelected || listItemNetworkIsCurrentProvider;
|
listItemNetworkIsSelected || listItemNetworkIsCurrentProvider;
|
||||||
@ -104,7 +101,6 @@ export default class NetworksTab extends PureComponent {
|
|||||||
key={`settings-network-list-item:${rpcUrl}`}
|
key={`settings-network-list-item:${rpcUrl}`}
|
||||||
className="networks-tab__networks-list-item"
|
className="networks-tab__networks-list-item"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setNetworksTabAddMode(false);
|
|
||||||
setSelectedSettingsRpcUrl(rpcUrl);
|
setSelectedSettingsRpcUrl(rpcUrl);
|
||||||
if (!isFullScreen) {
|
if (!isFullScreen) {
|
||||||
history.push(NETWORKS_FORM_ROUTE);
|
history.push(NETWORKS_FORM_ROUTE);
|
||||||
@ -139,7 +135,6 @@ export default class NetworksTab extends PureComponent {
|
|||||||
networksToRender,
|
networksToRender,
|
||||||
selectedNetwork,
|
selectedNetwork,
|
||||||
networkIsSelected,
|
networkIsSelected,
|
||||||
networksTabIsInAddMode,
|
|
||||||
networkDefaultedToProvider,
|
networkDefaultedToProvider,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
@ -147,27 +142,12 @@ export default class NetworksTab extends PureComponent {
|
|||||||
<div
|
<div
|
||||||
className={classnames('networks-tab__networks-list', {
|
className={classnames('networks-tab__networks-list', {
|
||||||
'networks-tab__networks-list--selection':
|
'networks-tab__networks-list--selection':
|
||||||
(networkIsSelected && !networkDefaultedToProvider) ||
|
networkIsSelected && !networkDefaultedToProvider,
|
||||||
networksTabIsInAddMode,
|
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{networksToRender.map((network) =>
|
{networksToRender.map((network) =>
|
||||||
this.renderNetworkListItem(network, selectedNetwork.rpcUrl),
|
this.renderNetworkListItem(network, selectedNetwork.rpcUrl),
|
||||||
)}
|
)}
|
||||||
{networksTabIsInAddMode && (
|
|
||||||
<div className="networks-tab__networks-list-item">
|
|
||||||
<ColorIndicator
|
|
||||||
type={ColorIndicator.TYPES.FILLED}
|
|
||||||
color={COLORS.WHITE}
|
|
||||||
borderColor={COLORS.UI4}
|
|
||||||
size={SIZES.LG}
|
|
||||||
/>
|
|
||||||
<div className="networks-tab__networks-list-name networks-tab__networks-list-name--selected">
|
|
||||||
{this.context.t('newNetwork')}
|
|
||||||
</div>
|
|
||||||
<div className="networks-tab__networks-list-arrow" />
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -178,7 +158,6 @@ export default class NetworksTab extends PureComponent {
|
|||||||
setRpcTarget,
|
setRpcTarget,
|
||||||
showConfirmDeleteNetworkModal,
|
showConfirmDeleteNetworkModal,
|
||||||
setSelectedSettingsRpcUrl,
|
setSelectedSettingsRpcUrl,
|
||||||
setNetworksTabAddMode,
|
|
||||||
selectedNetwork: {
|
selectedNetwork: {
|
||||||
labelKey,
|
labelKey,
|
||||||
label,
|
label,
|
||||||
@ -189,7 +168,6 @@ export default class NetworksTab extends PureComponent {
|
|||||||
rpcPrefs,
|
rpcPrefs,
|
||||||
blockExplorerUrl,
|
blockExplorerUrl,
|
||||||
},
|
},
|
||||||
networksTabIsInAddMode,
|
|
||||||
editRpc,
|
editRpc,
|
||||||
providerUrl,
|
providerUrl,
|
||||||
networksToRender,
|
networksToRender,
|
||||||
@ -211,19 +189,14 @@ export default class NetworksTab extends PureComponent {
|
|||||||
networksToRender={networksToRender}
|
networksToRender={networksToRender}
|
||||||
ticker={ticker}
|
ticker={ticker}
|
||||||
onClear={(shouldUpdateHistory = true) => {
|
onClear={(shouldUpdateHistory = true) => {
|
||||||
setNetworksTabAddMode(false);
|
|
||||||
setSelectedSettingsRpcUrl('');
|
setSelectedSettingsRpcUrl('');
|
||||||
if (shouldUpdateHistory) {
|
if (shouldUpdateHistory) {
|
||||||
history.push(NETWORKS_ROUTE);
|
history.push(NETWORKS_ROUTE);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
onAddNetwork={() => {
|
|
||||||
history.push(DEFAULT_ROUTE);
|
|
||||||
}}
|
|
||||||
showConfirmDeleteNetworkModal={showConfirmDeleteNetworkModal}
|
showConfirmDeleteNetworkModal={showConfirmDeleteNetworkModal}
|
||||||
viewOnly={viewOnly}
|
viewOnly={viewOnly}
|
||||||
isCurrentRpcTarget={providerUrl === rpcUrl}
|
isCurrentRpcTarget={providerUrl === rpcUrl}
|
||||||
networksTabIsInAddMode={networksTabIsInAddMode}
|
|
||||||
rpcPrefs={rpcPrefs}
|
rpcPrefs={rpcPrefs}
|
||||||
blockExplorerUrl={blockExplorerUrl}
|
blockExplorerUrl={blockExplorerUrl}
|
||||||
isFullScreen={isFullScreen}
|
isFullScreen={isFullScreen}
|
||||||
@ -235,14 +208,32 @@ export default class NetworksTab extends PureComponent {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
setNetworksTabAddMode,
|
|
||||||
setSelectedSettingsRpcUrl,
|
|
||||||
history,
|
history,
|
||||||
isFullScreen,
|
isFullScreen,
|
||||||
shouldRenderNetworkForm,
|
shouldRenderNetworkForm,
|
||||||
|
setRpcTarget,
|
||||||
|
networksToRender,
|
||||||
|
setNewNetworkAdded,
|
||||||
|
selectedNetwork: { rpcPrefs },
|
||||||
|
addNewNetwork,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
return addNewNetwork ? (
|
||||||
return (
|
<NetworkForm
|
||||||
|
setRpcTarget={setRpcTarget}
|
||||||
|
onClear={(shouldUpdateHistory = true) => {
|
||||||
|
if (shouldUpdateHistory) {
|
||||||
|
history.push(NETWORKS_ROUTE);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
onAddNetwork={() => {
|
||||||
|
history.push(DEFAULT_ROUTE);
|
||||||
|
}}
|
||||||
|
rpcPrefs={rpcPrefs}
|
||||||
|
networksToRender={networksToRender}
|
||||||
|
setNewNetworkAdded={setNewNetworkAdded}
|
||||||
|
addNewNetwork={addNewNetwork}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
<div className="networks-tab__body">
|
<div className="networks-tab__body">
|
||||||
{isFullScreen ? this.renderSubHeader() : null}
|
{isFullScreen ? this.renderSubHeader() : null}
|
||||||
<div className="networks-tab__content">
|
<div className="networks-tab__content">
|
||||||
@ -253,9 +244,7 @@ export default class NetworksTab extends PureComponent {
|
|||||||
type="primary"
|
type="primary"
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setSelectedSettingsRpcUrl('');
|
global.platform.openExtensionInBrowser(ADD_NETWORK_ROUTE);
|
||||||
setNetworksTabAddMode(true);
|
|
||||||
history.push(NETWORKS_FORM_ROUTE);
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{this.context.t('addNetwork')}
|
{this.context.t('addNetwork')}
|
||||||
|
@ -5,11 +5,14 @@ import {
|
|||||||
setSelectedSettingsRpcUrl,
|
setSelectedSettingsRpcUrl,
|
||||||
updateAndSetCustomRpc,
|
updateAndSetCustomRpc,
|
||||||
displayWarning,
|
displayWarning,
|
||||||
setNetworksTabAddMode,
|
|
||||||
editRpc,
|
editRpc,
|
||||||
showModal,
|
showModal,
|
||||||
|
setNewNetworkAdded,
|
||||||
} from '../../../store/actions';
|
} from '../../../store/actions';
|
||||||
import { NETWORKS_FORM_ROUTE } from '../../../helpers/constants/routes';
|
import {
|
||||||
|
ADD_NETWORK_ROUTE,
|
||||||
|
NETWORKS_FORM_ROUTE,
|
||||||
|
} from '../../../helpers/constants/routes';
|
||||||
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../shared/constants/app';
|
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../shared/constants/app';
|
||||||
import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network';
|
import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network';
|
||||||
import { getEnvironmentType } from '../../../../app/scripts/lib/util';
|
import { getEnvironmentType } from '../../../../app/scripts/lib/util';
|
||||||
@ -30,10 +33,10 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
const isFullScreen = environmentType === ENVIRONMENT_TYPE_FULLSCREEN;
|
const isFullScreen = environmentType === ENVIRONMENT_TYPE_FULLSCREEN;
|
||||||
const shouldRenderNetworkForm =
|
const shouldRenderNetworkForm =
|
||||||
isFullScreen || Boolean(pathname.match(NETWORKS_FORM_ROUTE));
|
isFullScreen || Boolean(pathname.match(NETWORKS_FORM_ROUTE));
|
||||||
|
const addNewNetwork = Boolean(pathname.match(ADD_NETWORK_ROUTE));
|
||||||
|
|
||||||
const { frequentRpcListDetail, provider } = state.metamask;
|
const { frequentRpcListDetail, provider } = state.metamask;
|
||||||
const { networksTabSelectedRpcUrl, networksTabIsInAddMode } = state.appState;
|
const { networksTabSelectedRpcUrl } = state.appState;
|
||||||
|
|
||||||
const frequentRpcNetworkListDetails = frequentRpcListDetail.map((rpc) => {
|
const frequentRpcNetworkListDetails = frequentRpcListDetail.map((rpc) => {
|
||||||
return {
|
return {
|
||||||
label: rpc.nickname,
|
label: rpc.nickname,
|
||||||
@ -57,7 +60,7 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
const networkIsSelected = Boolean(selectedNetwork.rpcUrl);
|
const networkIsSelected = Boolean(selectedNetwork.rpcUrl);
|
||||||
|
|
||||||
let networkDefaultedToProvider = false;
|
let networkDefaultedToProvider = false;
|
||||||
if (!networkIsSelected && !networksTabIsInAddMode) {
|
if (!networkIsSelected) {
|
||||||
selectedNetwork =
|
selectedNetwork =
|
||||||
networksToRender.find((network) => {
|
networksToRender.find((network) => {
|
||||||
return (
|
return (
|
||||||
@ -73,12 +76,12 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
selectedNetwork,
|
selectedNetwork,
|
||||||
networksToRender,
|
networksToRender,
|
||||||
networkIsSelected,
|
networkIsSelected,
|
||||||
networksTabIsInAddMode,
|
|
||||||
providerType: provider.type,
|
providerType: provider.type,
|
||||||
providerUrl: provider.rpcUrl,
|
providerUrl: provider.rpcUrl,
|
||||||
networkDefaultedToProvider,
|
networkDefaultedToProvider,
|
||||||
isFullScreen,
|
isFullScreen,
|
||||||
shouldRenderNetworkForm,
|
shouldRenderNetworkForm,
|
||||||
|
addNewNetwork,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,13 +100,14 @@ const mapDispatchToProps = (dispatch) => {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
displayWarning: (warning) => dispatch(displayWarning(warning)),
|
displayWarning: (warning) => dispatch(displayWarning(warning)),
|
||||||
setNetworksTabAddMode: (isInAddMode) =>
|
|
||||||
dispatch(setNetworksTabAddMode(isInAddMode)),
|
|
||||||
editRpc: (oldRpc, newRpc, chainId, ticker, nickname, rpcPrefs) => {
|
editRpc: (oldRpc, newRpc, chainId, ticker, nickname, rpcPrefs) => {
|
||||||
return dispatch(
|
return dispatch(
|
||||||
editRpc(oldRpc, newRpc, chainId, ticker, nickname, rpcPrefs),
|
editRpc(oldRpc, newRpc, chainId, ticker, nickname, rpcPrefs),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
setNewNetworkAdded: (newNetwork) => {
|
||||||
|
dispatch(setNewNetworkAdded(newNetwork));
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ import {
|
|||||||
CONTACT_EDIT_ROUTE,
|
CONTACT_EDIT_ROUTE,
|
||||||
CONTACT_VIEW_ROUTE,
|
CONTACT_VIEW_ROUTE,
|
||||||
EXPERIMENTAL_ROUTE,
|
EXPERIMENTAL_ROUTE,
|
||||||
|
ADD_NETWORK_ROUTE,
|
||||||
} from '../../helpers/constants/routes';
|
} from '../../helpers/constants/routes';
|
||||||
import SettingsTab from './settings-tab';
|
import SettingsTab from './settings-tab';
|
||||||
import AlertsTab from './alerts-tab';
|
import AlertsTab from './alerts-tab';
|
||||||
@ -39,6 +40,7 @@ class SettingsPage extends PureComponent {
|
|||||||
breadCrumbTextKey: PropTypes.string,
|
breadCrumbTextKey: PropTypes.string,
|
||||||
initialBreadCrumbKey: PropTypes.string,
|
initialBreadCrumbKey: PropTypes.string,
|
||||||
mostRecentOverviewPage: PropTypes.string.isRequired,
|
mostRecentOverviewPage: PropTypes.string.isRequired,
|
||||||
|
addNewNetwork: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
@ -51,6 +53,7 @@ class SettingsPage extends PureComponent {
|
|||||||
backRoute,
|
backRoute,
|
||||||
currentPath,
|
currentPath,
|
||||||
mostRecentOverviewPage,
|
mostRecentOverviewPage,
|
||||||
|
addNewNetwork,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -69,7 +72,13 @@ class SettingsPage extends PureComponent {
|
|||||||
{this.renderTitle()}
|
{this.renderTitle()}
|
||||||
<div
|
<div
|
||||||
className="settings-page__close-button"
|
className="settings-page__close-button"
|
||||||
onClick={() => history.push(mostRecentOverviewPage)}
|
onClick={() => {
|
||||||
|
if (addNewNetwork) {
|
||||||
|
history.push(NETWORKS_ROUTE);
|
||||||
|
} else {
|
||||||
|
history.push(mostRecentOverviewPage);
|
||||||
|
}
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="settings-page__content">
|
<div className="settings-page__content">
|
||||||
@ -222,6 +231,7 @@ class SettingsPage extends PureComponent {
|
|||||||
<Route exact path={ABOUT_US_ROUTE} component={InfoTab} />
|
<Route exact path={ABOUT_US_ROUTE} component={InfoTab} />
|
||||||
<Route exact path={ADVANCED_ROUTE} component={AdvancedTab} />
|
<Route exact path={ADVANCED_ROUTE} component={AdvancedTab} />
|
||||||
<Route exact path={ALERTS_ROUTE} component={AlertsTab} />
|
<Route exact path={ALERTS_ROUTE} component={AlertsTab} />
|
||||||
|
<Route exact path={ADD_NETWORK_ROUTE} component={NetworksTab} />
|
||||||
<Route path={NETWORKS_ROUTE} component={NetworksTab} />
|
<Route path={NETWORKS_ROUTE} component={NetworksTab} />
|
||||||
<Route exact path={SECURITY_ROUTE} component={SecurityTab} />
|
<Route exact path={SECURITY_ROUTE} component={SecurityTab} />
|
||||||
<Route exact path={EXPERIMENTAL_ROUTE} component={ExperimentalTab} />
|
<Route exact path={EXPERIMENTAL_ROUTE} component={ExperimentalTab} />
|
||||||
|
@ -24,6 +24,7 @@ import {
|
|||||||
SECURITY_ROUTE,
|
SECURITY_ROUTE,
|
||||||
SETTINGS_ROUTE,
|
SETTINGS_ROUTE,
|
||||||
EXPERIMENTAL_ROUTE,
|
EXPERIMENTAL_ROUTE,
|
||||||
|
ADD_NETWORK_ROUTE,
|
||||||
} from '../../helpers/constants/routes';
|
} from '../../helpers/constants/routes';
|
||||||
import Settings from './settings.component';
|
import Settings from './settings.component';
|
||||||
|
|
||||||
@ -38,6 +39,7 @@ const ROUTES_TO_I18N_KEYS = {
|
|||||||
[CONTACT_VIEW_ROUTE]: 'viewContact',
|
[CONTACT_VIEW_ROUTE]: 'viewContact',
|
||||||
[NETWORKS_ROUTE]: 'networks',
|
[NETWORKS_ROUTE]: 'networks',
|
||||||
[NETWORKS_FORM_ROUTE]: 'networks',
|
[NETWORKS_FORM_ROUTE]: 'networks',
|
||||||
|
[ADD_NETWORK_ROUTE]: 'networks',
|
||||||
[SECURITY_ROUTE]: 'securityAndPrivacy',
|
[SECURITY_ROUTE]: 'securityAndPrivacy',
|
||||||
[EXPERIMENTAL_ROUTE]: 'experimental',
|
[EXPERIMENTAL_ROUTE]: 'experimental',
|
||||||
};
|
};
|
||||||
@ -50,7 +52,10 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
const isAddressEntryPage = pathNameTail.includes('0x');
|
const isAddressEntryPage = pathNameTail.includes('0x');
|
||||||
const isAddContactPage = Boolean(pathname.match(CONTACT_ADD_ROUTE));
|
const isAddContactPage = Boolean(pathname.match(CONTACT_ADD_ROUTE));
|
||||||
const isEditContactPage = Boolean(pathname.match(CONTACT_EDIT_ROUTE));
|
const isEditContactPage = Boolean(pathname.match(CONTACT_EDIT_ROUTE));
|
||||||
const isNetworksFormPage = Boolean(pathname.match(NETWORKS_FORM_ROUTE));
|
const isNetworksFormPage =
|
||||||
|
Boolean(pathname.match(NETWORKS_FORM_ROUTE)) ||
|
||||||
|
Boolean(pathname.match(ADD_NETWORK_ROUTE));
|
||||||
|
const addNewNetwork = Boolean(pathname.match(ADD_NETWORK_ROUTE));
|
||||||
|
|
||||||
const isPopup = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP;
|
const isPopup = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP;
|
||||||
const pathnameI18nKey = ROUTES_TO_I18N_KEYS[pathname];
|
const pathnameI18nKey = ROUTES_TO_I18N_KEYS[pathname];
|
||||||
@ -85,6 +90,7 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
initialBreadCrumbRoute,
|
initialBreadCrumbRoute,
|
||||||
initialBreadCrumbKey,
|
initialBreadCrumbKey,
|
||||||
mostRecentOverviewPage: getMostRecentOverviewPage(state),
|
mostRecentOverviewPage: getMostRecentOverviewPage(state),
|
||||||
|
addNewNetwork,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -659,3 +659,12 @@ export function doesAddressRequireLedgerHidConnection(state, address) {
|
|||||||
addressIsLedger && transportTypePreferenceIsWebHID && webHidIsNotConnected
|
addressIsLedger && transportTypePreferenceIsWebHID && webHidIsNotConnected
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To retrieve the name of the new Network added using add network form
|
||||||
|
* @param {*} state
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export function getNewNetworkAdded(state) {
|
||||||
|
return state.appState.newNetworkAdded;
|
||||||
|
}
|
||||||
|
@ -88,7 +88,7 @@ export const CLEAR_PENDING_TOKENS = 'CLEAR_PENDING_TOKENS';
|
|||||||
export const SET_FIRST_TIME_FLOW_TYPE = 'SET_FIRST_TIME_FLOW_TYPE';
|
export const SET_FIRST_TIME_FLOW_TYPE = 'SET_FIRST_TIME_FLOW_TYPE';
|
||||||
|
|
||||||
export const SET_SELECTED_SETTINGS_RPC_URL = 'SET_SELECTED_SETTINGS_RPC_URL';
|
export const SET_SELECTED_SETTINGS_RPC_URL = 'SET_SELECTED_SETTINGS_RPC_URL';
|
||||||
export const SET_NETWORKS_TAB_ADD_MODE = 'SET_NETWORKS_TAB_ADD_MODE';
|
export const SET_NEW_NETWORK_ADDED = 'SET_NEW_NETWORK_ADDED';
|
||||||
|
|
||||||
export const LOADING_METHOD_DATA_STARTED = 'LOADING_METHOD_DATA_STARTED';
|
export const LOADING_METHOD_DATA_STARTED = 'LOADING_METHOD_DATA_STARTED';
|
||||||
export const LOADING_METHOD_DATA_FINISHED = 'LOADING_METHOD_DATA_FINISHED';
|
export const LOADING_METHOD_DATA_FINISHED = 'LOADING_METHOD_DATA_FINISHED';
|
||||||
|
@ -2446,10 +2446,10 @@ export function setSelectedSettingsRpcUrl(newRpcUrl) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setNetworksTabAddMode(isInAddMode) {
|
export function setNewNetworkAdded(newNetworkAdded) {
|
||||||
return {
|
return {
|
||||||
type: actionConstants.SET_NETWORKS_TAB_ADD_MODE,
|
type: actionConstants.SET_NEW_NETWORK_ADDED,
|
||||||
value: isInAddMode,
|
value: newNetworkAdded,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user