From 46b578bf108d73ab6bb5322aed86d2ce5d493fd9 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 20 Jun 2024 19:06:37 -0300 Subject: [PATCH 01/31] feat: implement Nano Contract integration with Wallet Connect --- locale/da/texts.po | 244 +++++++++++----- locale/pt-br/texts.po | 249 ++++++++++++----- locale/ru-ru/texts.po | 244 +++++++++++----- locale/texts.pot | 243 +++++++++++----- src/App.js | 4 + src/actions.js | 74 ++++- src/components/FeedbackContent.js | 28 +- src/components/FeedbackModal.js | 13 + src/components/HathorFlatList.js | 2 +- src/components/Icons/CircleInfo.icon.js | 2 +- .../NanoContractTransactionHeader.js | 1 + .../NanoContract/DappContainer.js | 84 ++++++ .../NanoContract/DeclineModal.js | 54 ++++ .../NanoContract/NanoContractActions.js | 151 ++++++++++ .../NanoContract/NanoContractExecInfo.js | 79 ++++++ .../NanoContract/NanoContractMethodArgs.js | 71 +++++ .../NewNanoContractTransactionModal.js | 177 ++++++++++++ .../NewNanoContractTransactionRequest.js | 262 ++++++++++++++++++ src/components/WalletConnect/theme.js | 71 +++++ src/constants.js | 12 + src/reducers/reducer.js | 101 ++++++- src/sagas/wallet.js | 15 +- .../NewNanoContractTransactionScreen.js | 44 +++ src/styles/themes.js | 2 + 24 files changed, 1963 insertions(+), 264 deletions(-) create mode 100644 src/components/WalletConnect/NanoContract/DappContainer.js create mode 100644 src/components/WalletConnect/NanoContract/DeclineModal.js create mode 100644 src/components/WalletConnect/NanoContract/NanoContractActions.js create mode 100644 src/components/WalletConnect/NanoContract/NanoContractExecInfo.js create mode 100644 src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js create mode 100644 src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js create mode 100644 src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js create mode 100644 src/components/WalletConnect/theme.js create mode 100644 src/screens/WalletConnect/NewNanoContractTransactionScreen.js diff --git a/locale/da/texts.po b/locale/da/texts.po index a0eff693a..0e56a5f18 100644 --- a/locale/da/texts.po +++ b/locale/da/texts.po @@ -57,11 +57,11 @@ msgid "[Last] dddd [•] HH:mm" msgstr "[Sidste] dddd [•] HH:mm" #. See https://momentjs.com/docs/#/displaying/calendar-time/ -#: src/models.js:107 src/utils.js:415 +#: src/models.js:107 src/utils.js:416 msgid "DD MMM YYYY [•] HH:mm" msgstr "DD MMM YYYY [•] HH:mm" -#: src/utils.js:160 +#: src/utils.js:161 msgid "Invalid address" msgstr "Ugyldig adresse" @@ -432,9 +432,10 @@ msgstr "Ord" msgid "Enter your seed words separated by space" msgstr "Indtast dine seed-ord adskilt med mellemrum" -#: src/components/NanoContract/NanoContractDetails.component.js:194 +#: src/components/NanoContract/NanoContractDetails.js:194 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:167 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" msgstr "" @@ -534,6 +535,7 @@ msgstr "Indtast din pinkode " msgid "Unlock Hathor Wallet" msgstr "Lås Hathor-wallet op" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -698,8 +700,8 @@ msgstr "Autoriserer overførslen" msgid "Your transfer of **${ this.amountAndToken }** has been confirmed" msgstr "Din overførsel af **${ _this.amountAndToken }** er bekræftet" -#: src/components/NanoContract/EditAddressModal.component.js:60 -#: src/components/NanoContract/SelectAddressModal.component.js:117 +#: src/components/NanoContract/EditAddressModal.js:60 +#: src/components/NanoContract/SelectAddressModal.js:117 #: src/screens/SendConfirmScreen.js:161 msgid "Address" msgstr "Adresse" @@ -797,6 +799,11 @@ msgstr "Jeg vil afregistrere token **${ tokenLabel }**" msgid "Unregister token" msgstr "Afregistrer token" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 +msgid "New Nano Contract Transaction" +msgstr "" + #: src/screens/WalletConnect/WalletConnectList.js:33 msgid "There was an error connecting. Please try again later." msgstr "" @@ -932,53 +939,55 @@ msgstr "" msgid "Nano Contract Details" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:67 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:58 msgid "Nano Contract ID is required." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:157 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:151 msgid "See contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:175 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:169 msgid "Load First Addresses Error" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:158 -#: src/components/NanoContract/SelectAddressModal.component.js:105 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:183 +#: src/components/NanoContract/NanoContractDetails.js:158 +#: src/components/NanoContract/SelectAddressModal.js:105 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:184 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:178 msgid "Loading first wallet address." msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:88 +#: src/components/NanoContract/NanoContractDetailsHeader.js:142 +#: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:193 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:201 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:195 msgid "Wallet Address" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:211 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:205 msgid "If you want to change the wallet address, you will be able to do" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:213 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:207 msgid "after the contract is registered." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:232 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:226 msgid "Register Nano Contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:250 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:244 msgid "Nano Contract Registration" msgstr "" @@ -1060,21 +1069,21 @@ msgstr "Transaktion" msgid "Open" msgstr "Åben" -#: src/sagas/wallet.js:744 +#: src/sagas/wallet.js:752 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:760 +#: src/sagas/wallet.js:768 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:770 +#: src/sagas/wallet.js:778 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:786 +#: src/sagas/wallet.js:794 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1246,12 +1255,12 @@ msgstr "" msgid "Description" msgstr "Beskrivelse" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:47 +#: src/components/NanoContract/NanoContractTransactionHeader.js:48 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:92 +#: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 msgid "Blueprint Method" msgstr "" @@ -1264,7 +1273,7 @@ msgstr "" msgid "Nano Contract Status" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:79 +#: src/components/NanoContract/NanoContractDetailsHeader.js:79 #: src/components/TxDetailsModal.js:120 msgid "Nano Contract" msgstr "" @@ -1298,83 +1307,196 @@ msgid "" "address derived from your root key on the m/44'/280'/0'/0/0 derivation path." msgstr "" +#: src/components/WalletConnect/NanoContract/DappContainer.js:41 +msgid "Review your transaction from this dApp" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DappContainer.js:44 +msgid "Stay vigilant and protect your data from potential phishing attempts." +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:26 +msgid "Decline transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:29 +msgid "Are you sure you want to decline this transaction?" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:33 +msgid "Yes, decline transaction" +msgstr "" + +#: src/components/NanoContract/UnregisterNanoContractModal.js:50 +#: src/components/WalletConnect/NanoContract/DeclineModal.js:39 +msgid "No, go back" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#, javascript-format +msgid "${ tokenSymbol } Deposit" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +msgid "${ tokenSymbol } Withdrawal" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +msgid "Action List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +msgid "To Address:" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 +msgid "BluePrint ID" +msgstr "" + +#: src/components/NanoContract/NanoContractDetailsHeader.js:146 +#: src/components/NanoContract/NanoContractsListItem.js:59 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +msgid "Blueprint Name" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 +msgid "Argument List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 +#, javascript-format +msgid "Position ${ index }" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +msgid "You have received a new Nano Contract Transaction. Please" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +msgid "carefully review the details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +msgid "before deciding to accept or decline." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +msgid "Review transaction details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +msgid "" +"Caution: There are risks associated with signing dapp transaction requests." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +msgid "Read More." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +msgid "Decline Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +msgid "Sending transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +msgid "Please wait." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +msgid "Transaction successfully sent." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +msgid "Ok, close" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +msgid "Error while sending transaction." +msgstr "" + #: src/components/NetworkSettings/NetworkStatusBar.js:14 msgid "Custom network" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:41 +#: src/components/NanoContract/EditAddressModal.js:41 msgid "New Nano Contract Address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:49 +#: src/components/NanoContract/EditAddressModal.js:49 msgid "" "This address signs any transaction you create with Nano Contracts method. " "Switching to a new one means" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:51 +#: src/components/NanoContract/EditAddressModal.js:51 msgid "all future transactions will use this address." msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:57 +#: src/components/NanoContract/EditAddressModal.js:57 msgid "Selected Information" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:67 +#: src/components/NanoContract/EditAddressModal.js:67 msgid "Index" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:74 +#: src/components/NanoContract/EditAddressModal.js:74 msgid "Confirm new address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:78 +#: src/components/NanoContract/EditAddressModal.js:78 msgid "Go back" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:159 +#: src/components/NanoContract/NanoContractDetails.js:159 msgid "Loading Nano Contract transactions." msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:173 +#: src/components/NanoContract/NanoContractDetails.js:173 msgid "Nano Contract Transactions Error" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:146 -#: src/components/NanoContract/NanoContractsListItem.js:59 -msgid "Blueprint Name" -msgstr "" - -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:150 +#: src/components/NanoContract/NanoContractDetailsHeader.js:150 msgid "Registered Address" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:153 +#: src/components/NanoContract/NanoContractDetailsHeader.js:153 msgid "See status details" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:154 +#: src/components/NanoContract/NanoContractDetailsHeader.js:154 msgid "Unregister contract" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:96 +#: src/components/NanoContract/NanoContractTransactionHeader.js:97 msgid "Date and Time" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:103 -#: src/components/NanoContract/NanoContractTransactionsListItem.component.js:62 +#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:106 +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 msgid "Caller" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:109 +#: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" msgstr "" @@ -1392,42 +1514,38 @@ msgstr "" msgid "Register new" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:90 +#: src/components/NanoContract/SelectAddressModal.js:90 msgid "Choose New Wallet Address" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:97 +#: src/components/NanoContract/SelectAddressModal.js:97 msgid "Load Addresses Error" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:106 +#: src/components/NanoContract/SelectAddressModal.js:106 msgid "Loading wallet addresses." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:114 +#: src/components/NanoContract/SelectAddressModal.js:114 msgid "Current Information" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:115 +#: src/components/NanoContract/SelectAddressModal.js:115 msgid "To change, select other address on the list below." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:178 +#: src/components/NanoContract/SelectAddressModal.js:178 msgid "index" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:39 +#: src/components/NanoContract/UnregisterNanoContractModal.js:39 msgid "Unregister Nano Contract" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:41 +#: src/components/NanoContract/UnregisterNanoContractModal.js:41 msgid "Are you sure you want to unregister this Nano Contract?" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:44 +#: src/components/NanoContract/UnregisterNanoContractModal.js:44 msgid "Yes, unregister contract" msgstr "" - -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:50 -msgid "No, go back" -msgstr "" diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index 8e5a2d442..e625c888a 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -57,11 +57,11 @@ msgid "[Last] dddd [•] HH:mm" msgstr "[Última] dddd [•] HH:mm" #. See https://momentjs.com/docs/#/displaying/calendar-time/ -#: src/models.js:107 src/utils.js:415 +#: src/models.js:107 src/utils.js:416 msgid "DD MMM YYYY [•] HH:mm" msgstr "DD MMM YYYY [•] HH:mm" -#: src/utils.js:160 +#: src/utils.js:161 msgid "Invalid address" msgstr "Endereço inválido" @@ -443,9 +443,10 @@ msgstr "Palavras" msgid "Enter your seed words separated by space" msgstr "Digite suas palavras separadas por espaços" -#: src/components/NanoContract/NanoContractDetails.component.js:194 +#: src/components/NanoContract/NanoContractDetails.js:194 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:167 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" msgstr "Tente novamente" @@ -547,6 +548,7 @@ msgstr "Digite seu PIN " msgid "Unlock Hathor Wallet" msgstr "Desbloqueie sua Hathor Wallet" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -714,8 +716,8 @@ msgstr "Autorizar operação" msgid "Your transfer of **${ this.amountAndToken }** has been confirmed" msgstr "Sua transferência de **${ this.amountAndToken }** foi confirmada" -#: src/components/NanoContract/EditAddressModal.component.js:60 -#: src/components/NanoContract/SelectAddressModal.component.js:117 +#: src/components/NanoContract/EditAddressModal.js:60 +#: src/components/NanoContract/SelectAddressModal.js:117 #: src/screens/SendConfirmScreen.js:161 msgid "Address" msgstr "Endereço" @@ -815,6 +817,11 @@ msgstr "Eu quero desregistrar o token **${ tokenLabel }**" msgid "Unregister token" msgstr "Desregistrar token" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 +msgid "New Nano Contract Transaction" +msgstr "Nova Transação de Nano Contract" + #: src/screens/WalletConnect/WalletConnectList.js:33 msgid "There was an error connecting. Please try again later." msgstr "" @@ -958,53 +965,55 @@ msgstr "" msgid "Nano Contract Details" msgstr "Detalhes do Nano Contract" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:67 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:58 msgid "Nano Contract ID is required." msgstr "ID do Nano Contract é obrigatório." -#: src/screens/NanoContract/NanoContractRegisterScreen.js:157 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:151 msgid "See contract" msgstr "Ver contrato" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:175 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:169 msgid "Load First Addresses Error" msgstr "Erro ao carregar primeiro endereço da wallet" -#: src/components/NanoContract/NanoContractDetails.component.js:158 -#: src/components/NanoContract/SelectAddressModal.component.js:105 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:183 +#: src/components/NanoContract/NanoContractDetails.js:158 +#: src/components/NanoContract/SelectAddressModal.js:105 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "Carregando" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:184 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:178 msgid "Loading first wallet address." msgstr "Carregando primeiro endereço da wallet." -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:88 +#: src/components/NanoContract/NanoContractDetailsHeader.js:142 +#: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:193 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "ID do Nano Contract" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:201 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:195 msgid "Wallet Address" msgstr "Endereço da Carteira" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:211 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:205 msgid "If you want to change the wallet address, you will be able to do" msgstr "Se deseja alterar o endereço de assinatura, você pode alterar" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:213 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:207 msgid "after the contract is registered." msgstr "depois do contrato ser registrado." -#: src/screens/NanoContract/NanoContractRegisterScreen.js:232 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:226 msgid "Register Nano Contract" msgstr "Registrar Nano Contract" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:250 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:244 msgid "Nano Contract Registration" msgstr "Registro do Nano Contract" @@ -1087,22 +1096,21 @@ msgstr "Transação" msgid "Open" msgstr "Abrir" -#: src/sagas/wallet.js:744 +#: src/sagas/wallet.js:752 msgid "Wallet is not ready to load addresses." msgstr "A wallet não está pronta para carregar os endereços." #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:760 +#: src/sagas/wallet.js:768 msgid "There was an error while loading wallet addresses. Try again." -msgstr "" -"Ocorreu um erro ao carregar os endereços da wallet. Tente novamente." +msgstr "Ocorreu um erro ao carregar os endereços da wallet. Tente novamente." -#: src/sagas/wallet.js:770 +#: src/sagas/wallet.js:778 msgid "Wallet is not ready to load the first address." msgstr "A wallet não está pronta para carregar o primeiro endereço." #. This will show the message in the feedback content -#: src/sagas/wallet.js:786 +#: src/sagas/wallet.js:794 msgid "There was an error while loading first wallet address. Try again." msgstr "" "Ocorreu um erro ao carregar o primeiro endereço da wallet. Tente novamente." @@ -1277,12 +1285,12 @@ msgstr "Inválida" msgid "Description" msgstr "Descrição" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:47 +#: src/components/NanoContract/NanoContractTransactionHeader.js:48 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "ID da Transação" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:92 +#: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 msgid "Blueprint Method" msgstr "Método do Blueprint" @@ -1295,7 +1303,7 @@ msgstr "Endereço de assinatura do Nano Contract" msgid "Nano Contract Status" msgstr "Status do Nano Contract" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:79 +#: src/components/NanoContract/NanoContractDetailsHeader.js:79 #: src/components/TxDetailsModal.js:120 msgid "Nano Contract" msgstr "Nano Contract" @@ -1336,15 +1344,135 @@ msgstr "" "endereço derivado da sua chave raiz no caminho de derivação " "m/44'/280'/0'/0/0." +#: src/components/WalletConnect/NanoContract/DappContainer.js:41 +msgid "Review your transaction from this dApp" +msgstr "Revise sua transação originada neste dApp" + +#: src/components/WalletConnect/NanoContract/DappContainer.js:44 +msgid "Stay vigilant and protect your data from potential phishing attempts." +msgstr "Fique atento e proteja seus dados de potenciais tentativas de phising." + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:26 +msgid "Decline transaction" +msgstr "Recusar transação" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:29 +msgid "Are you sure you want to decline this transaction?" +msgstr "Está certo de recursar esta transação?" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:33 +msgid "Yes, decline transaction" +msgstr "Sim, recusar transação" + +#: src/components/NanoContract/UnregisterNanoContractModal.js:50 +#: src/components/WalletConnect/NanoContract/DeclineModal.js:39 +msgid "No, go back" +msgstr "Não, voltar" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#, javascript-format +msgid "${ tokenSymbol } Deposit" +msgstr "${ tokenSymbol } Depósito" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +msgid "${ tokenSymbol } Withdrawal" +msgstr "${ tokenSymbol } Saque" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +msgid "Action List" +msgstr "Lista de Actions" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +msgid "To Address:" +msgstr "Para o endereço:" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 +msgid "BluePrint ID" +msgstr "ID do BluePrint" + +#: src/components/NanoContract/NanoContractDetailsHeader.js:146 +#: src/components/NanoContract/NanoContractsListItem.js:59 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +msgid "Blueprint Name" +msgstr "Nome do Blueprint" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 +msgid "Argument List" +msgstr "List de Argumentos" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 +#, javascript-format +msgid "Position ${ index }" +msgstr "Posição ${ index }" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +msgid "You have received a new Nano Contract Transaction. Please" +msgstr "" +"Você recebeu um pedido para criar uma transação de Nano Contract. Por favor," + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +msgid "carefully review the details" +msgstr "revise os detalhes com cuidado" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +msgid "before deciding to accept or decline." +msgstr "antes de decidir aceitar ou recusar." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +msgid "Review transaction details" +msgstr "Revisar detalhes da transação" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +msgid "" +"Caution: There are risks associated with signing dapp transaction requests." +msgstr "" +"Cuidado: Há riscos associados a pedidos de assinatura de transação via dApp." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +msgid "Read More." +msgstr "Ler mais." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 +msgid "Loading transaction information." +msgstr "Carregando informações da transação." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 +msgid "Accept Transaction" +msgstr "Aceitar transação" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +msgid "Decline Transaction" +msgstr "Recusar transação" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +msgid "Sending transaction" +msgstr "Enviando transação" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +msgid "Please wait." +msgstr "Por favor, espere." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +msgid "Transaction successfully sent." +msgstr "Transação enviada com sucesso." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +msgid "Ok, close" +msgstr "Ok, fechar" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +msgid "Error while sending transaction." +msgstr "Ocorreu um erro durante o envio da transação." + #: src/components/NetworkSettings/NetworkStatusBar.js:14 msgid "Custom network" msgstr "Rede personalizada" -#: src/components/NanoContract/EditAddressModal.component.js:41 +#: src/components/NanoContract/EditAddressModal.js:41 msgid "New Nano Contract Address" msgstr "Novo endereço para o Nano Contract" -#: src/components/NanoContract/EditAddressModal.component.js:49 +#: src/components/NanoContract/EditAddressModal.js:49 msgid "" "This address signs any transaction you create with Nano Contracts method. " "Switching to a new one means" @@ -1352,69 +1480,64 @@ msgstr "" "Este endereço assina toda transação criada com os métodos do Nano Contract. " "Ao alterar para um novo endereço significa que" -#: src/components/NanoContract/EditAddressModal.component.js:51 +#: src/components/NanoContract/EditAddressModal.js:51 msgid "all future transactions will use this address." msgstr "todas as transações futuras usarão este endereço." -#: src/components/NanoContract/EditAddressModal.component.js:57 +#: src/components/NanoContract/EditAddressModal.js:57 msgid "Selected Information" msgstr "Informação Selecionada" -#: src/components/NanoContract/EditAddressModal.component.js:67 +#: src/components/NanoContract/EditAddressModal.js:67 msgid "Index" msgstr "Índice" -#: src/components/NanoContract/EditAddressModal.component.js:74 +#: src/components/NanoContract/EditAddressModal.js:74 msgid "Confirm new address" msgstr "Confirmar novo endereço" -#: src/components/NanoContract/EditAddressModal.component.js:78 +#: src/components/NanoContract/EditAddressModal.js:78 msgid "Go back" msgstr "Voltar" -#: src/components/NanoContract/NanoContractDetails.component.js:159 +#: src/components/NanoContract/NanoContractDetails.js:159 msgid "Loading Nano Contract transactions." msgstr "Carregando transações do Nano Contract" -#: src/components/NanoContract/NanoContractDetails.component.js:173 +#: src/components/NanoContract/NanoContractDetails.js:173 msgid "Nano Contract Transactions Error" msgstr "Erro em Transações do Nano Contract" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:146 -#: src/components/NanoContract/NanoContractsListItem.js:59 -msgid "Blueprint Name" -msgstr "Nome do Blueprint" - -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:150 +#: src/components/NanoContract/NanoContractDetailsHeader.js:150 msgid "Registered Address" msgstr "Endereço Registrado" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:153 +#: src/components/NanoContract/NanoContractDetailsHeader.js:153 msgid "See status details" msgstr "Ver detalhes" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:154 +#: src/components/NanoContract/NanoContractDetailsHeader.js:154 msgid "Unregister contract" msgstr "Desregistrar contract" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:96 +#: src/components/NanoContract/NanoContractTransactionHeader.js:97 msgid "Date and Time" msgstr "Data & Hora" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:103 -#: src/components/NanoContract/NanoContractTransactionsListItem.component.js:62 +#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "Desta wallet" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:106 +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 msgid "Caller" msgstr "Caller" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:109 +#: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" msgstr "Ver detalhes" @@ -1432,42 +1555,38 @@ msgstr "Você pode acompanhar os Nano Contracts registrados nesta tela." msgid "Register new" msgstr "Registrar novo" -#: src/components/NanoContract/SelectAddressModal.component.js:90 +#: src/components/NanoContract/SelectAddressModal.js:90 msgid "Choose New Wallet Address" msgstr "Escolha o Novo Endereço" -#: src/components/NanoContract/SelectAddressModal.component.js:97 +#: src/components/NanoContract/SelectAddressModal.js:97 msgid "Load Addresses Error" msgstr "Erro ao carregar endereços" -#: src/components/NanoContract/SelectAddressModal.component.js:106 +#: src/components/NanoContract/SelectAddressModal.js:106 msgid "Loading wallet addresses." msgstr "Carregando endereços da wallet." -#: src/components/NanoContract/SelectAddressModal.component.js:114 +#: src/components/NanoContract/SelectAddressModal.js:114 msgid "Current Information" msgstr "Informação Atual" -#: src/components/NanoContract/SelectAddressModal.component.js:115 +#: src/components/NanoContract/SelectAddressModal.js:115 msgid "To change, select other address on the list below." msgstr "Para alterar, selecione outro endereço da lista abaixo." -#: src/components/NanoContract/SelectAddressModal.component.js:178 +#: src/components/NanoContract/SelectAddressModal.js:178 msgid "index" msgstr "índice" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:39 +#: src/components/NanoContract/UnregisterNanoContractModal.js:39 msgid "Unregister Nano Contract" msgstr "Desregistrar Nano Contract" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:41 +#: src/components/NanoContract/UnregisterNanoContractModal.js:41 msgid "Are you sure you want to unregister this Nano Contract?" msgstr "Confirma que deseja desregistrar este Nano Contract?" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:44 +#: src/components/NanoContract/UnregisterNanoContractModal.js:44 msgid "Yes, unregister contract" msgstr "Sim, desregistrar" - -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:50 -msgid "No, go back" -msgstr "Não, voltar" diff --git a/locale/ru-ru/texts.po b/locale/ru-ru/texts.po index 95fb124b3..d1b248e4c 100644 --- a/locale/ru-ru/texts.po +++ b/locale/ru-ru/texts.po @@ -58,11 +58,11 @@ msgid "[Last] dddd [•] HH:mm" msgstr "[Последний] dddd [•] HH:mm" #. See https://momentjs.com/docs/#/displaying/calendar-time/ -#: src/models.js:107 src/utils.js:415 +#: src/models.js:107 src/utils.js:416 msgid "DD MMM YYYY [•] HH:mm" msgstr "DD MMM YYYY [•] HH:mm" -#: src/utils.js:160 +#: src/utils.js:161 msgid "Invalid address" msgstr "Неправильный адрес" @@ -433,9 +433,10 @@ msgstr "Слова" msgid "Enter your seed words separated by space" msgstr "Введите seed-фразу" -#: src/components/NanoContract/NanoContractDetails.component.js:194 +#: src/components/NanoContract/NanoContractDetails.js:194 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:167 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" msgstr "" @@ -536,6 +537,7 @@ msgstr "Введите свой PIN-код " msgid "Unlock Hathor Wallet" msgstr "Разблокировать Hathor Wallet" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -700,8 +702,8 @@ msgstr "Авторизовать операцию" msgid "Your transfer of **${ this.amountAndToken }** has been confirmed" msgstr "Ваш перевод **${ this.amountAndToken }** был подтвержден" -#: src/components/NanoContract/EditAddressModal.component.js:60 -#: src/components/NanoContract/SelectAddressModal.component.js:117 +#: src/components/NanoContract/EditAddressModal.js:60 +#: src/components/NanoContract/SelectAddressModal.js:117 #: src/screens/SendConfirmScreen.js:161 msgid "Address" msgstr "Адрес" @@ -801,6 +803,11 @@ msgstr "Я хочу отменить регистрацию токена **${ to msgid "Unregister token" msgstr "Отменить регистрацию токена" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 +msgid "New Nano Contract Transaction" +msgstr "" + #: src/screens/WalletConnect/WalletConnectList.js:33 msgid "There was an error connecting. Please try again later." msgstr "" @@ -936,53 +943,55 @@ msgstr "" msgid "Nano Contract Details" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:67 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:58 msgid "Nano Contract ID is required." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:157 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:151 msgid "See contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:175 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:169 msgid "Load First Addresses Error" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:158 -#: src/components/NanoContract/SelectAddressModal.component.js:105 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:183 +#: src/components/NanoContract/NanoContractDetails.js:158 +#: src/components/NanoContract/SelectAddressModal.js:105 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:184 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:178 msgid "Loading first wallet address." msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:88 +#: src/components/NanoContract/NanoContractDetailsHeader.js:142 +#: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:193 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:201 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:195 msgid "Wallet Address" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:211 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:205 msgid "If you want to change the wallet address, you will be able to do" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:213 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:207 msgid "after the contract is registered." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:232 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:226 msgid "Register Nano Contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:250 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:244 msgid "Nano Contract Registration" msgstr "" @@ -1064,21 +1073,21 @@ msgstr "" msgid "Open" msgstr "Открыть" -#: src/sagas/wallet.js:744 +#: src/sagas/wallet.js:752 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:760 +#: src/sagas/wallet.js:768 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:770 +#: src/sagas/wallet.js:778 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:786 +#: src/sagas/wallet.js:794 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1235,12 +1244,12 @@ msgstr "" msgid "Description" msgstr "Описание" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:47 +#: src/components/NanoContract/NanoContractTransactionHeader.js:48 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:92 +#: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 msgid "Blueprint Method" msgstr "" @@ -1253,7 +1262,7 @@ msgstr "" msgid "Nano Contract Status" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:79 +#: src/components/NanoContract/NanoContractDetailsHeader.js:79 #: src/components/TxDetailsModal.js:120 msgid "Nano Contract" msgstr "" @@ -1287,83 +1296,196 @@ msgid "" "address derived from your root key on the m/44'/280'/0'/0/0 derivation path." msgstr "" +#: src/components/WalletConnect/NanoContract/DappContainer.js:41 +msgid "Review your transaction from this dApp" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DappContainer.js:44 +msgid "Stay vigilant and protect your data from potential phishing attempts." +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:26 +msgid "Decline transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:29 +msgid "Are you sure you want to decline this transaction?" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:33 +msgid "Yes, decline transaction" +msgstr "" + +#: src/components/NanoContract/UnregisterNanoContractModal.js:50 +#: src/components/WalletConnect/NanoContract/DeclineModal.js:39 +msgid "No, go back" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#, javascript-format +msgid "${ tokenSymbol } Deposit" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +msgid "${ tokenSymbol } Withdrawal" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +msgid "Action List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +msgid "To Address:" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 +msgid "BluePrint ID" +msgstr "" + +#: src/components/NanoContract/NanoContractDetailsHeader.js:146 +#: src/components/NanoContract/NanoContractsListItem.js:59 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +msgid "Blueprint Name" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 +msgid "Argument List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 +#, javascript-format +msgid "Position ${ index }" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +msgid "You have received a new Nano Contract Transaction. Please" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +msgid "carefully review the details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +msgid "before deciding to accept or decline." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +msgid "Review transaction details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +msgid "" +"Caution: There are risks associated with signing dapp transaction requests." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +msgid "Read More." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +msgid "Decline Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +msgid "Sending transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +msgid "Please wait." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +msgid "Transaction successfully sent." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +msgid "Ok, close" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +msgid "Error while sending transaction." +msgstr "" + #: src/components/NetworkSettings/NetworkStatusBar.js:14 msgid "Custom network" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:41 +#: src/components/NanoContract/EditAddressModal.js:41 msgid "New Nano Contract Address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:49 +#: src/components/NanoContract/EditAddressModal.js:49 msgid "" "This address signs any transaction you create with Nano Contracts method. " "Switching to a new one means" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:51 +#: src/components/NanoContract/EditAddressModal.js:51 msgid "all future transactions will use this address." msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:57 +#: src/components/NanoContract/EditAddressModal.js:57 msgid "Selected Information" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:67 +#: src/components/NanoContract/EditAddressModal.js:67 msgid "Index" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:74 +#: src/components/NanoContract/EditAddressModal.js:74 msgid "Confirm new address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:78 +#: src/components/NanoContract/EditAddressModal.js:78 msgid "Go back" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:159 +#: src/components/NanoContract/NanoContractDetails.js:159 msgid "Loading Nano Contract transactions." msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:173 +#: src/components/NanoContract/NanoContractDetails.js:173 msgid "Nano Contract Transactions Error" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:146 -#: src/components/NanoContract/NanoContractsListItem.js:59 -msgid "Blueprint Name" -msgstr "" - -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:150 +#: src/components/NanoContract/NanoContractDetailsHeader.js:150 msgid "Registered Address" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:153 +#: src/components/NanoContract/NanoContractDetailsHeader.js:153 msgid "See status details" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:154 +#: src/components/NanoContract/NanoContractDetailsHeader.js:154 msgid "Unregister contract" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:96 +#: src/components/NanoContract/NanoContractTransactionHeader.js:97 msgid "Date and Time" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:103 -#: src/components/NanoContract/NanoContractTransactionsListItem.component.js:62 +#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:106 +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 msgid "Caller" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:109 +#: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" msgstr "" @@ -1381,42 +1503,38 @@ msgstr "" msgid "Register new" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:90 +#: src/components/NanoContract/SelectAddressModal.js:90 msgid "Choose New Wallet Address" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:97 +#: src/components/NanoContract/SelectAddressModal.js:97 msgid "Load Addresses Error" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:106 +#: src/components/NanoContract/SelectAddressModal.js:106 msgid "Loading wallet addresses." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:114 +#: src/components/NanoContract/SelectAddressModal.js:114 msgid "Current Information" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:115 +#: src/components/NanoContract/SelectAddressModal.js:115 msgid "To change, select other address on the list below." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:178 +#: src/components/NanoContract/SelectAddressModal.js:178 msgid "index" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:39 +#: src/components/NanoContract/UnregisterNanoContractModal.js:39 msgid "Unregister Nano Contract" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:41 +#: src/components/NanoContract/UnregisterNanoContractModal.js:41 msgid "Are you sure you want to unregister this Nano Contract?" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:44 +#: src/components/NanoContract/UnregisterNanoContractModal.js:44 msgid "Yes, unregister contract" msgstr "" - -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:50 -msgid "No, go back" -msgstr "" diff --git a/locale/texts.pot b/locale/texts.pot index f11693ef4..19ac117c4 100644 --- a/locale/texts.pot +++ b/locale/texts.pot @@ -48,12 +48,12 @@ msgid "[Last] dddd [•] HH:mm" msgstr "" #: src/models.js:107 -#: src/utils.js:415 +#: src/utils.js:416 #. See https://momentjs.com/docs/#/displaying/calendar-time/ msgid "DD MMM YYYY [•] HH:mm" msgstr "" -#: src/utils.js:160 +#: src/utils.js:161 msgid "Invalid address" msgstr "" @@ -421,10 +421,11 @@ msgstr "" msgid "Enter your seed words separated by space" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:194 +#: src/components/NanoContract/NanoContractDetails.js:194 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 #: src/screens/LoadHistoryScreen.js:51 #: src/screens/LoadWalletErrorScreen.js:20 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:167 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" msgstr "" @@ -529,6 +530,7 @@ msgstr "" msgid "Unlock Hathor Wallet" msgstr "" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -696,8 +698,8 @@ msgstr "" msgid "Your transfer of **${ this.amountAndToken }** has been confirmed" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:60 -#: src/components/NanoContract/SelectAddressModal.component.js:117 +#: src/components/NanoContract/EditAddressModal.js:60 +#: src/components/NanoContract/SelectAddressModal.js:117 #: src/screens/SendConfirmScreen.js:161 msgid "Address" msgstr "" @@ -794,6 +796,11 @@ msgstr "" msgid "Unregister token" msgstr "" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 +msgid "New Nano Contract Transaction" +msgstr "" + #: src/screens/WalletConnect/WalletConnectList.js:33 msgid "There was an error connecting. Please try again later." msgstr "" @@ -929,53 +936,55 @@ msgstr "" msgid "Nano Contract Details" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:67 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:58 msgid "Nano Contract ID is required." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:157 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:151 msgid "See contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:175 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:169 msgid "Load First Addresses Error" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:158 -#: src/components/NanoContract/SelectAddressModal.component.js:105 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:183 +#: src/components/NanoContract/NanoContractDetails.js:158 +#: src/components/NanoContract/SelectAddressModal.js:105 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:184 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:178 msgid "Loading first wallet address." msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:88 +#: src/components/NanoContract/NanoContractDetailsHeader.js:142 +#: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/screens/NanoContract/NanoContractRegisterScreen.js:193 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:201 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:195 msgid "Wallet Address" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:211 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:205 msgid "If you want to change the wallet address, you will be able to do" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:213 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:207 msgid "after the contract is registered." msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:232 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:226 msgid "Register Nano Contract" msgstr "" -#: src/screens/NanoContract/NanoContractRegisterScreen.js:250 +#: src/screens/NanoContract/NanoContractRegisterScreen.js:244 msgid "Nano Contract Registration" msgstr "" @@ -1057,20 +1066,20 @@ msgstr "" msgid "Open" msgstr "" -#: src/sagas/wallet.js:744 +#: src/sagas/wallet.js:752 msgid "Wallet is not ready to load addresses." msgstr "" -#: src/sagas/wallet.js:760 +#: src/sagas/wallet.js:768 #. This will show the message in the feedback content at SelectAddressModal msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:770 +#: src/sagas/wallet.js:778 msgid "Wallet is not ready to load the first address." msgstr "" -#: src/sagas/wallet.js:786 +#: src/sagas/wallet.js:794 #. This will show the message in the feedback content msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1228,12 +1237,12 @@ msgstr "" msgid "Description" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:47 +#: src/components/NanoContract/NanoContractTransactionHeader.js:48 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:92 +#: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 msgid "Blueprint Method" msgstr "" @@ -1246,7 +1255,7 @@ msgstr "" msgid "Nano Contract Status" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:79 +#: src/components/NanoContract/NanoContractDetailsHeader.js:79 #: src/components/TxDetailsModal.js:120 msgid "Nano Contract" msgstr "" @@ -1280,82 +1289,194 @@ msgid "" "address derived from your root key on the m/44'/280'/0'/0/0 derivation path." msgstr "" +#: src/components/WalletConnect/NanoContract/DappContainer.js:41 +msgid "Review your transaction from this dApp" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DappContainer.js:44 +msgid "Stay vigilant and protect your data from potential phishing attempts." +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:26 +msgid "Decline transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:29 +msgid "Are you sure you want to decline this transaction?" +msgstr "" + +#: src/components/WalletConnect/NanoContract/DeclineModal.js:33 +msgid "Yes, decline transaction" +msgstr "" + +#: src/components/NanoContract/UnregisterNanoContractModal.js:50 +#: src/components/WalletConnect/NanoContract/DeclineModal.js:39 +msgid "No, go back" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#, javascript-format +msgid "${ tokenSymbol } Deposit" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +msgid "${ tokenSymbol } Withdrawal" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +msgid "Action List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +msgid "To Address:" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 +msgid "BluePrint ID" +msgstr "" + +#: src/components/NanoContract/NanoContractDetailsHeader.js:146 +#: src/components/NanoContract/NanoContractsListItem.js:59 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +msgid "Blueprint Name" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 +msgid "Argument List" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 +#, javascript-format +msgid "Position ${ index }" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +msgid "You have received a new Nano Contract Transaction. Please" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +msgid "carefully review the details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +msgid "before deciding to accept or decline." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +msgid "Review transaction details" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +msgid "Caution: There are risks associated with signing dapp transaction requests." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +msgid "Read More." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +msgid "Decline Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +msgid "Sending transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +msgid "Please wait." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +msgid "Transaction successfully sent." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +msgid "Ok, close" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +msgid "Error while sending transaction." +msgstr "" + #: src/components/NetworkSettings/NetworkStatusBar.js:14 msgid "Custom network" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:41 +#: src/components/NanoContract/EditAddressModal.js:41 msgid "New Nano Contract Address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:49 +#: src/components/NanoContract/EditAddressModal.js:49 msgid "" "This address signs any transaction you create with Nano Contracts method. " "Switching to a new one means" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:51 +#: src/components/NanoContract/EditAddressModal.js:51 msgid "all future transactions will use this address." msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:57 +#: src/components/NanoContract/EditAddressModal.js:57 msgid "Selected Information" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:67 +#: src/components/NanoContract/EditAddressModal.js:67 msgid "Index" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:74 +#: src/components/NanoContract/EditAddressModal.js:74 msgid "Confirm new address" msgstr "" -#: src/components/NanoContract/EditAddressModal.component.js:78 +#: src/components/NanoContract/EditAddressModal.js:78 msgid "Go back" msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:159 +#: src/components/NanoContract/NanoContractDetails.js:159 msgid "Loading Nano Contract transactions." msgstr "" -#: src/components/NanoContract/NanoContractDetails.component.js:173 +#: src/components/NanoContract/NanoContractDetails.js:173 msgid "Nano Contract Transactions Error" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:146 -#: src/components/NanoContract/NanoContractsListItem.js:59 -msgid "Blueprint Name" -msgstr "" - -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:150 +#: src/components/NanoContract/NanoContractDetailsHeader.js:150 msgid "Registered Address" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:153 +#: src/components/NanoContract/NanoContractDetailsHeader.js:153 msgid "See status details" msgstr "" -#: src/components/NanoContract/NanoContractDetailsHeader.component.js:154 +#: src/components/NanoContract/NanoContractDetailsHeader.js:154 msgid "Unregister contract" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:96 +#: src/components/NanoContract/NanoContractTransactionHeader.js:97 #. XXX: add when shrank component can be used. msgid "Date and Time" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:103 -#: src/components/NanoContract/NanoContractTransactionsListItem.component.js:62 +#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionsListItem.js:62 #. XXX: add when shrank component can be used. msgid "From this wallet" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:106 +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 #. XXX: add when shrank component can be used. msgid "Caller" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.component.js:109 +#: src/components/NanoContract/NanoContractTransactionHeader.js:110 #. XXX: add when shrank component can be used. msgid "See transaction details" msgstr "" @@ -1374,42 +1495,38 @@ msgstr "" msgid "Register new" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:90 +#: src/components/NanoContract/SelectAddressModal.js:90 msgid "Choose New Wallet Address" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:97 +#: src/components/NanoContract/SelectAddressModal.js:97 msgid "Load Addresses Error" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:106 +#: src/components/NanoContract/SelectAddressModal.js:106 msgid "Loading wallet addresses." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:114 +#: src/components/NanoContract/SelectAddressModal.js:114 msgid "Current Information" msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:115 +#: src/components/NanoContract/SelectAddressModal.js:115 msgid "To change, select other address on the list below." msgstr "" -#: src/components/NanoContract/SelectAddressModal.component.js:178 +#: src/components/NanoContract/SelectAddressModal.js:178 msgid "index" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:39 +#: src/components/NanoContract/UnregisterNanoContractModal.js:39 msgid "Unregister Nano Contract" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:41 +#: src/components/NanoContract/UnregisterNanoContractModal.js:41 msgid "Are you sure you want to unregister this Nano Contract?" msgstr "" -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:44 +#: src/components/NanoContract/UnregisterNanoContractModal.js:44 msgid "Yes, unregister contract" msgstr "" - -#: src/components/NanoContract/UnregisterNanoContractModal.component.js:50 -msgid "No, go back" -msgstr "" diff --git a/src/App.js b/src/App.js index 16a6115ec..b7cb67260 100644 --- a/src/App.js +++ b/src/App.js @@ -89,6 +89,8 @@ import { NetworkStatusBar } from './components/NetworkSettings/NetworkStatusBar' import { NanoContractDetailsScreen } from './screens/NanoContract/NanoContractDetailsScreen'; import { NanoContractTransactionScreen } from './screens/NanoContract/NanoContractTransactionScreen'; import { NanoContractRegisterScreen } from './screens/NanoContract/NanoContractRegisterScreen'; +import { NewNanoContractTransactionScreen } from './screens/WalletConnect/NewNanoContractTransactionScreen'; +import { NewNanoContractTransactionModal } from './components/WalletConnect/NanoContract/NewNanoContractTransactionModal'; /** * This Stack Navigator is exhibited when there is no wallet initialized on the local storage. @@ -387,6 +389,7 @@ const AppStack = () => { + ( > + diff --git a/src/actions.js b/src/actions.js index 0fb3f0c9c..01d8f99f8 100644 --- a/src/actions.js +++ b/src/actions.js @@ -11,7 +11,7 @@ import { metadataApi, } from '@hathor/wallet-lib'; import { - METADATA_CONCURRENT_DOWNLOAD, + METADATA_CONCURRENT_DOWNLOAD, WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS, } from './constants'; import { mapToTxHistory } from './utils'; @@ -57,6 +57,8 @@ export const types = { TOKEN_METADATA_LOADED: 'TOKEN_METADATA_LOADED', SET_UNIQUE_DEVICE_ID: 'SET_UNIQUE_DEVICE_ID', SET_IS_SHOWING_PIN_SCREEN: 'SET_IS_SHOWING_PIN_SCREEN', + /* It initiates download of tokens metadata. */ + TOKENS_FETCH_METADATA_REQUESTED: 'TOKENS_FETCH_METADATA_REQUESTED', TOKEN_FETCH_METADATA_REQUESTED: 'TOKEN_FETCH_METADATA_REQUESTED', TOKEN_FETCH_METADATA_SUCCESS: 'TOKEN_FETCH_METADATA_SUCCESS', TOKEN_FETCH_METADATA_FAILED: 'TOKEN_FETCH_METADATA_FAILED', @@ -113,6 +115,9 @@ export const types = { SET_WALLET_CONNECT: 'SET_WALLET_CONNECT', SET_WALLET_CONNECT_MODAL: 'SET_WALLET_CONNECT_MODAL', SET_WALLET_CONNECT_SESSIONS: 'SET_WALLET_CONNECT_SESSIONS', + WALLET_CONNECT_ACCEPT: 'WALLET_CONNECT_ACCEPT', + WALLET_CONNECT_REJECT: 'WALLET_CONNECT_REJECT', + SET_NEW_NANO_CONTRACT_TRANSACTION: 'SET_NEW_NANO_CONTRACT_TRANSACTION', SET_UNLEASH_CLIENT: 'SET_UNLEASH_CLIENT', WC_URI_INPUTTED: 'WC_URI_INPUTTED', WC_CANCEL_SESSION: 'WC_CANCEL_SESSION', @@ -175,6 +180,8 @@ export const types = { FIRSTADDRESS_SUCCESS: 'FIRSTADDRESS_SUCCESS', /* It signals a fetch failure due to an error. */ FIRSTADDRESS_FAILURE: 'FIRSTADDRESS_FAILURE', + /* It updates the redux state of new nano contract transaction status on wallet connect register. */ + WALLETCONNECT_NEW_NANOCONTRACT_STATUS: 'WALLETCONNECT_NEW_NANOCONTRACT_STATUS', }; export const featureToggleInitialized = () => ({ @@ -235,6 +242,30 @@ export const walletConnectCancelSession = (sessionKey) => ({ payload: sessionKey, }); +/** + * @param {Object} data Data that the user has accepted. + */ +export const walletConnectAccept = (data) => ({ + type: types.WALLET_CONNECT_ACCEPT, + payload: data, +}); + +export const walletWalletReject = () => ({ + type: types.WALLET_CONNECT_REJECT, +}); + +/** + * @param {Object} ncRequest + * @param {boolean} ncRequest.show + * @param {Object} ncRequest.data + * @param {Object} ncRequest.data.nc + * @param {Object} ncRequest.data.dapp + */ +export const setNewNanoContractTransaction = (ncRequest) => ({ + type: types.SET_NEW_NANO_CONTRACT_TRANSACTION, + payload: ncRequest +}); + /** * isShowingPinScreen {bool} * */ @@ -1205,3 +1236,44 @@ export const firstAddressFailure = (failurePayload) => ({ type: types.FIRSTADDRESS_FAILURE, payload: failurePayload, }); + +/** + * Request the downalod of token metadata for a list of tokens. + * @param {string[]} tokens A list of token uid + */ +export const tokensFetchMetadataRequest = (tokens) => ({ + type: types.TOKENS_FETCH_METADATA_REQUESTED, + tokens +}); + +/** + * Signals update on new nano contract status to ready. + */ +export const setNewNanoContractStatusReady = () => ({ + type: types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS, + payload: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.READY, +}); + +/** + * Signals update on new nano contract status to loading. + */ +export const setNewNanoContractStatusLoading = () => ({ + type: types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS, + payload: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING, +}); + +/** + * Signals update on new nano contract status to failed. + */ +export const setNewNanoContractStatusFailure = () => ({ + type: types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS, + payload: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.FAILED, +}); + +/** + * Signals update on new nano contract status to successful. + */ +export const setNewNanoContractStatusSuccess = () => ({ + type: types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS, + payload: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.SUCCESSFUL, +}); diff --git a/src/components/FeedbackContent.js b/src/components/FeedbackContent.js index b50e5db1b..ae38fb256 100644 --- a/src/components/FeedbackContent.js +++ b/src/components/FeedbackContent.js @@ -25,6 +25,7 @@ import { COLORS } from '../styles/themes'; * @param {Object?} props.action A react component or react element containing a call to action, * if provided, it renders underneath the content * @param {boolean} props.offcard Renders a feedback without card style + * @param {boolean} props.offmargin Renders a feedback without margins * * @example * } * /> */ -export const FeedbackContent = ({ title, message, icon, action, offcard }) => ( - +export const FeedbackContent = ({ + title, + message, + icon, + action, + offcard, + offmargin, + offbackground +}) => ( + {icon @@ -55,8 +70,8 @@ const styles = StyleSheet.create({ alignSelf: 'stretch', marginTop: 16, marginBottom: 45, - backgroundColor: COLORS.backgroundColor, marginHorizontal: 16, + backgroundColor: COLORS.backgroundColor, }, card: { borderRadius: 16, @@ -65,6 +80,13 @@ const styles = StyleSheet.create({ shadowColor: COLORS.textColor, shadowOpacity: 0.08, }, + offMargin: { + marginHorizontal: 0, + marginVertical: 0, + }, + offBackground: { + backgroundColor: COLORS.lowContrastDetail, + }, wrapper: { overflow: 'scroll', }, diff --git a/src/components/FeedbackModal.js b/src/components/FeedbackModal.js index 4f7b371d4..4509bb187 100644 --- a/src/components/FeedbackModal.js +++ b/src/components/FeedbackModal.js @@ -10,6 +10,19 @@ import { Text, View } from 'react-native'; import PropTypes from 'prop-types'; import HathorModal from './HathorModal'; +/** + * It renders a modal with some feedback to user. + * + * @param {Object} props + * + * @example + * )} + * text={t`Error while sending transaction.`} + * onDismiss={handleFeedbackModalDismiss} + * action={()} + * /> + */ const FeedbackModal = (props) => ( ( - + ( > diff --git a/src/components/NanoContract/NanoContractTransactionHeader.js b/src/components/NanoContract/NanoContractTransactionHeader.js index b2302e93a..dfb31fedb 100644 --- a/src/components/NanoContract/NanoContractTransactionHeader.js +++ b/src/components/NanoContract/NanoContractTransactionHeader.js @@ -20,6 +20,7 @@ import { COLORS } from '../../styles/themes'; import { combineURLs, getShortContent, getShortHash, getTimestampFormat } from '../../utils'; import SimpleButton from '../SimpleButton'; import { ArrowDownIcon } from '../Icons/ArrowDown.icon'; +import { ArrowUpIcon } from '../Icons/ArrowUp.icon'; import { TextValue } from '../TextValue'; import { TextLabel } from '../TextLabel'; import { TransactionStatusLabel } from '../TransactionStatusLabel'; diff --git a/src/components/WalletConnect/NanoContract/DappContainer.js b/src/components/WalletConnect/NanoContract/DappContainer.js new file mode 100644 index 000000000..e3b6ebf11 --- /dev/null +++ b/src/components/WalletConnect/NanoContract/DappContainer.js @@ -0,0 +1,84 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, + Text, + Image +} from 'react-native'; +import { t } from 'ttag'; +import { commonStyles } from '../theme'; + +/** + * Renders DApp information. + * + * @param {Object} props + * @param {Object} props.dapp + */ +export const DappContainer = ({ dapp }) => ( + + + + + + + {dapp.proposer} + {'• '}{'mainnet'} + + + + {t`Review your transaction from this dApp`} + + + {t`Stay vigilant and protect your data from potential phishing attempts.`} + + +); + +const styles = StyleSheet.create({ + container: { + gap: 16, + paddingVertical: 16, + paddingHorizontal: 16, + }, + header: { + flexDirection: 'row', + gap: 16, + }, + avatar: { + flexShrink: 1, + alignSelf: 'flex-start', + maxWidth: 48, + maxHeight: 48, + }, + avatarIcon: { + width: 48, + height: 48, + backgroundColor: 'hsla(0, 0%, 85%, 1)', + borderRadius: 24, + }, + proposer: [ + commonStyles.text, + commonStyles.bold, + commonStyles.mb4, + ], + network: [ + commonStyles.text, + { color: 'hsla(263, 100%, 64%, 1)', } + ], + emphasis: [ + commonStyles.text, + commonStyles.bold + ] +}); diff --git a/src/components/WalletConnect/NanoContract/DeclineModal.js b/src/components/WalletConnect/NanoContract/DeclineModal.js new file mode 100644 index 000000000..f93959237 --- /dev/null +++ b/src/components/WalletConnect/NanoContract/DeclineModal.js @@ -0,0 +1,54 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + Text, +} from 'react-native'; +import { t } from 'ttag'; +import { ModalBase } from '../../ModalBase'; + +/** + * It renders a confirmation modal to decline the tranaction creation. + * + * @param {Object} props + * @param {boolean} props.show Flag that determines the if the modal should appear or not. + * @param {() => void} props.onDecline Callback fn for decline action. + * @param {() => void} props.onDismiss Callback fn for dismiss action. + */ +export const DeclineModal = ({ show, onDecline, onDismiss }) => ( + + {t`Decline transaction`} + + + {t`Are you sure you want to decline this transaction?`} + + + + + +); + +const styles = StyleSheet.create({ + declineModalBody: { + paddingBottom: 24, + }, + text: { + fontSize: 16, + lineHeight: 20, + textAlign: 'center', + }, +}); diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js new file mode 100644 index 000000000..515bcc377 --- /dev/null +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -0,0 +1,151 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, + Text, +} from 'react-native'; +import { t } from 'ttag'; +import { HathorFlatList } from '../../HathorFlatList'; +import { commonStyles } from '../theme'; +import { getShortHash, renderValue } from '../../../utils'; +import { ReceivedIcon } from '../../Icons/Received.icon'; +import { SentIcon } from '../../Icons/Sent.icon'; +import { COLORS } from '../../../styles/themes'; +import { DEFAULT_TOKEN } from '../../../constants'; + +/** + * It returns the title template for each action type, + * which is either 'deposit' or 'withdrawal'. + * + * @param {string} tokenSymbol The token symbol fetched from metadata, + * or a shortened token hash. + * + * @returns {string} A title template by action type. + */ +const actionTitleMap = (tokenSymbol) => ({ + deposit: t`${tokenSymbol} Deposit`, + withdrawal: t`${tokenSymbol} Withdrawal`, +}); + +/** + * Get action title depending on the action type. + * @param {Object} tokens A map of token metadata by token uid + * @param {Object} action An action object + * + * @example + * getActionTitle({ '123': { ..., symbol: 'STR' }}, { ..., token: '123', type: 'deposit' }) + * >>> 'STR Deposit' + * + * @example + * getActionTitle({}, { ..., token: '1234...5678', type: 'deposit' }) + * >>> '1234...5678 Deposit' + */ +const getActionTitle = (tokens, action) => { + const tokenMetadata = tokens[action.token]; + if (tokenMetadata) { + return actionTitleMap(tokenMetadata.symbol)[action.type]; + } + + if (action.token === DEFAULT_TOKEN.uid) { + return actionTitleMap(DEFAULT_TOKEN.symbol)[action.type] + } + + return actionTitleMap(getShortHash(action.token))[action.type]; +}; + +/** + * It renders a list of actions with a proper title for each one. + * + * @param {Object} props + * @param {Object[]} props.ncActions A list of Nano Contract actions. + * @param {Object} props.tokens A map of token metadata by token uid. + */ +export const NanoContractActions = ({ ncActions, tokens }) => { + const styles = StyleSheet.create({ + wrapper: { marginTop: 0, marginBottom: 0, marginHorizontal: 0 }, + action: [commonStyles.text, commonStyles.bold], + valueLabel: [commonStyles.text, commonStyles.value, commonStyles.bold, commonStyles.mb4], + value: [commonStyles.text, commonStyles.value], + }); + + return ( + + + {t`Action List`} + + ( + + + + {getActionTitle(tokens, item)} + {item.address + && ( + + {t`To Address:`} + {item.address} + + )} + + + + )} + /> + + ); +}; + +/** + * It renders an icon by action type, either 'deposit' or 'withdrawal'. + * + * @param {Object} props + * @param {'deposit'|'withdrawal'} props.type Action type. + */ +const Icon = ({ type }) => { + const iconMap = { + deposit: SentIcon({ type: 'default' }), + withdrawal: ReceivedIcon({ type: 'default' }), + }; + + return (iconMap[type]); +}; + +/** + * It renders an amount with the right format. + * + * @param {Object} props + * @param {number} props.amount + * @param {boolean} props.isNft + */ +const Amount = ({ amount, isNft }) => { + const amountToRender = renderValue(amount, isNft); + + const styles = StyleSheet.create({ + wrapper: { + marginLeft: 'auto', + }, + amount: { + fontSize: 16, + lineHeight: 20, + color: COLORS.black, + }, + }); + + return ( + + + {amountToRender} + + + ) +}; diff --git a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js new file mode 100644 index 000000000..d2f18a75d --- /dev/null +++ b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js @@ -0,0 +1,79 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, + Text, + TouchableOpacity, +} from 'react-native'; +import { t } from 'ttag'; +import { COLORS } from '../../../styles/themes'; +import { NanoContractIcon } from '../../Icons/NanoContract.icon'; +import { PenIcon } from '../../Icons/Pen.icon'; +import { commonStyles } from '../theme'; + +/** + * It renders a card with basic information to execute the Nano Contract creation. + * + * @param {Object} props + * @param {Object} props.nc Nano Contract info. + * @param {string} props.blueprintName Nano Contract's blueprint name. + * @param {() => void} props.onSelectAddress Callback fn for tap on caller address component. + */ +export const NanoContractExecInfo = ({ nc, blueprintName, onSelectAddress }) => ( + + + + + + + {t`Nano Contract ID`} + {nc.ncId} + + + {t`BluePrint ID`} + {nc.blueprintId} + + + {t`Blueprint Name`} + {blueprintName} + + + + + + Caller + {nc.caller} + + + + + + + + +); + +const styles = StyleSheet.create({ + property: [commonStyles.text, commonStyles.bold, commonStyles.mb4], + value: [commonStyles.text, commonStyles.value], + contentEditable: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + contentEditableValue: { + flexShrink: 1, + paddingRight: 8, + }, + contentEditableIcon: { + width: 24, + paddingRight: 2, + }, +}); diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js new file mode 100644 index 000000000..58e8bf042 --- /dev/null +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -0,0 +1,71 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, + Text, +} from 'react-native'; +import { t } from 'ttag'; +import { COLORS } from '../../../styles/themes'; +import { commonStyles } from '../theme'; + +/** + * It renders a list of method arguments for when the Nano Contract executes. + * + * @param {Object} props + * @param {string[]} props.ncArgs A list of method's argument. + */ +export const NanoContractMethodArgs = ({ ncArgs }) => ( + + + {t`Argument List`} + + {ncArgs.length + && ( + + + {ncArgs.map((argValue, index) => ( + + + {t`Position ${index}`} + + + {argValue} + + + ))} + + + )} + +); + +const styles = StyleSheet.create({ + argPosition: { + flexShrink: 10, + width: '30%', + paddingRight: 8, + }, + argPositionText: [ + commonStyles.text, + commonStyles.bold + ], + argValue: { + maxWidth: '70%', + backgroundColor: 'hsla(0, 0%, 96%, 1)', + paddingVertical: 2, + paddingHorizontal: 8, + borderRadius: 4, + }, + argValueText: { + fontSize: 12, + lineHeight: 16, + color: COLORS.black, + }, +}); diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js new file mode 100644 index 000000000..d26e6f40a --- /dev/null +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js @@ -0,0 +1,177 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, + Text, +} from 'react-native'; +import { t } from 'ttag'; +import { useNavigation } from '@react-navigation/native'; +import { useDispatch, useSelector } from 'react-redux'; +import { COLORS } from '../../../styles/themes'; +import { CircleInfoIcon } from '../../Icons/CircleInfo.icon'; +import { ModalBase } from '../../ModalBase'; +import SimpleButton from '../../SimpleButton'; +import { setNewNanoContractTransaction, walletWalletReject } from '../../../actions'; +import { WALLET_STATUS } from '../../../sagas/wallet'; +import { NANO_CONTRACT_INFO_URL } from '../../../constants'; + +export const NewNanoContractTransactionModal = () => { + const navigation = useNavigation(); + const dispatch = useDispatch(); + const readMoreUrl = NANO_CONTRACT_INFO_URL; + + const { + showModal, + ncTxRequest, + } = useSelector((state) => { + const { + walletStartState, + walletConnect: { + newNanoContractTransaction: { + showModal, + data, + } + }, + } = state; + const isWalletReady = walletStartState === WALLET_STATUS.READY; + + return { + showModal: showModal && isWalletReady, + ncTxRequest: data, + }; + }); + + const onDismiss = () => { + dispatch(walletWalletReject()); + dispatch(setNewNanoContractTransaction({ show: false, data: null })); + }; + + const navigatesToNewNanoContractScreen = () => { + dispatch(setNewNanoContractTransaction({ show: false, data: null })); + navigation.navigate('NewNanoContractTransactionScreen', { ncTxRequest }); + }; + + // XXX: Make it navigates to readMoreUrl + const onReadMore = () => {}; + + return ( + + {t`New Nano Contract Transaction`} + + + + {t`You have received a new Nano Contract Transaction. Please`} + + {' '}{t`carefully review the details`}{' '} + + {t`before deciding to accept or decline.`} + + + + + + ); +}; + +const WarnDisclaimer = ({ onReadMore }) => ( + + + + + + + {t`Caution: There are risks associated with signing dapp transaction requests.`} + + + + + + +); + +const styles = StyleSheet.create({ + pd0: { + paddingBottom: 0, + }, + pd8: { + paddingBottom: 8, + }, + body: { + paddingBottom: 24, + }, + fieldContainer: { + width: '100%', + paddingBottom: 4, + }, + text: { + fontSize: 14, + lineHeight: 20, + }, + bold: { + fontWeight: 'bold', + }, + warnContainer: { + flexShrink: 1, + flexDirection: 'row', + alignItems: 'center', + marginBottom: 24, + borderRadius: 8, + paddingTop: 12, + /* It should have been 12 but it is adjusted to compensate the negative + * margin on learnMoreWrapper and the difference between the font size + * and the line height, which amounts to 8 points of compensation. + */ + paddingBottom: 20, + paddingHorizontal: 16, + backgroundColor: COLORS.cardWarning100, + }, + warnContent: { + paddingLeft: 8, + }, + warnMessage: { + fontSize: 12, + lineHeight: 16, + }, + selectionContainer: { + borderRadius: 8, + paddingVertical: 8, + paddingHorizontal: 16, + backgroundColor: COLORS.freeze100, + }, + learnMoreWrapper: { + display: 'inline-block', + /* We are using negative margin here to correct the text position + * and create an optic effect of alignment. */ + marginBottom: -4, + paddingLeft: 2, + marginRight: 'auto', + }, + learnMoreContainer: { + justifyContent: 'flex-start', + borderBottomWidth: 1, + }, + learnMoreText: { + fontSize: 12, + lineHeight: 16, + fontWeight: 'bold', + color: 'hsla(0, 0%, 25%, 1)', + }, +}); diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js new file mode 100644 index 000000000..33db85cad --- /dev/null +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -0,0 +1,262 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React, { + useEffect, + useMemo, + useState +} from 'react'; +import { + StyleSheet, + View, + ScrollView, + TouchableWithoutFeedback, + Image +} from 'react-native'; +import { useDispatch, useSelector } from 'react-redux'; +import { useNavigation } from '@react-navigation/native'; +import { t } from 'ttag'; +import { + setNewNanoContractStatusReady, + tokensFetchMetadataRequest, + walletConnectAccept, + walletWalletReject +} from '../../../actions'; +import { COLORS } from '../../../styles/themes'; +import NewHathorButton from '../../NewHathorButton'; +import { SelectAddressModal } from '../../NanoContract/SelectAddressModal'; +import { FeedbackContent } from '../../FeedbackContent'; +import { DEFAULT_TOKEN, WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS } from '../../../constants'; +import Spinner from '../../Spinner'; +import FeedbackModal from '../../FeedbackModal'; +import errorIcon from '../../../assets/images/icErrorBig.png'; +import checkIcon from '../../../assets/images/icCheckBig.png'; +import { DappContainer } from './DappContainer'; +import { NanoContractExecInfo } from './NanoContractExecInfo'; +import { NanoContractActions } from './NanoContractActions'; +import { NanoContractMethodArgs } from './NanoContractMethodArgs'; +import { DeclineModal } from './DeclineModal'; + +/** + * @param {Object} props + * @param {Object} props.ncTxRequest + * @param {Object} props.ncTxRequest.nc + * @param {Object} props.ncTxRequest.dapp + * @param {string} props.ncTxRequest.dapp.icon + * @param {string} props.ncTxRequest.dapp.proposer + * @param {string} props.ncTxRequest.dapp.url + * @param {string} props.ncTxRequest.dapp.description + */ +export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { + const { nc, dapp } = ncTxRequest; + const dispatch = useDispatch(); + const navigation = useNavigation(); + const newTxStatus = useSelector((state) => state.walletConnect.newNanoContractTransaction.status); + const { blueprintName, address } = useSelector((state) => state.nanoContract.registered[nc.ncId]); + const registeredTokensMetadata = useSelector((state) => state.tokenMetadata); + // Use it to add loading feedback + const metadataLoaded = useSelector((state) => state.metadataLoaded); + + const [showSelectAddressModal, setShowSelectAddressModal] = useState(false); + const [showDeclineModal, setShowDeclineModal] = useState(false); + const [ncAddress, setNcAddress] = useState(address); + const ncToAccept = useMemo(() => ({ ...nc, caller: ncAddress }), [ncAddress]) + + // Controle SelectAddressModal + const toggleSelectAddressModal = () => setShowSelectAddressModal(!showSelectAddressModal); + const handleAddressSelection = (newAddress) => { + setNcAddress(newAddress); + toggleSelectAddressModal(); + }; + + // Accepts the Nano Contract data preseted. + const onAcceptTransaction = () => { + // Update the caller with the address selected by the user. + const acceptedNc = { ...nc, caller: ncAddress }; + // Signal the user has accepted the current request and pass the accepted data. + dispatch(walletConnectAccept(acceptedNc)); + }; + + const onDeclineTransaction = () => { + setShowDeclineModal(true); + }; + const onDeclineConfirmation = () => { + setShowDeclineModal(false); + dispatch(walletWalletReject()); + navigation.goBack(); + // TODO: It is not being dimissed automatically + }; + const onDismissDeclineModal = () => { + setShowDeclineModal(false); + }; + + useEffect(() => { + if (!blueprintName) { + throw new Error(`Nano Contract ${nc.ncId} not registered.`); + } + + // Get tokens metadata + const tokensUid = nc.actions.map((each) => each.token); + const tokensMetadataToDownload = []; + + tokensUid.forEach((uid) => { + if (uid !== DEFAULT_TOKEN.uid && !(uid in registeredTokensMetadata)) { + tokensMetadataToDownload.push(uid); + } + }); + + if (tokensMetadataToDownload.length) { + dispatch(tokensFetchMetadataRequest(tokensMetadataToDownload)); + } + }, []); + + const onFeedbackModalDismiss = () => { + dispatch(setNewNanoContractStatusReady()); + navigation.goBack(); + }; + + const onNavigateToDashboard = () => { + dispatch(setNewNanoContractStatusReady()); + navigation.navigate('Dashboard'); + }; + + const onTryAgain = () => { + dispatch(setNewNanoContractStatusReady()); + }; + + const isTxInfoLoading = () => !metadataLoaded; + const isTxInfoLoaded = () => ( + metadataLoaded && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + ); + const isTxProcessing = () => ( + metadataLoaded && newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + ); + const isTxSuccessful = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.SUCCESSFUL; + const isTxFailed = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.FAILED; + + return ( + <> + + + + {isTxInfoLoading() && ( + } + offmargin + offcard + offbackground + /> + )} + {isTxInfoLoaded() && ( + + + + + + + {/* User actions */} + + + + + + )} + {isTxProcessing() && ( + } + offmargin + offcard + offbackground + /> + )} + + + + + + + {isTxSuccessful() && ( + )} + text={t`Transaction successfully sent.`} + onDismiss={onFeedbackModalDismiss} + action={()} + /> + )} + {isTxFailed() && ( + )} + text={t`Error while sending transaction.`} + onDismiss={onFeedbackModalDismiss} + action={()} + /> + )} + + ); +}; + +const styles = StyleSheet.create({ + wide: { + width: '100%' + }, + wrapper: { + flex: 1, + paddingHorizontal: 16, + backgroundColor: COLORS.lowContrastDetail, // Defines an outer area on the main list content + }, + content: { + flex: 1, + rowGap: 24, + width: '100%', + paddingVertical: 16, + }, + balanceReceived: { + color: 'hsla(180, 85%, 34%, 1)', + fontWeight: 'bold', + }, + actionContainer: { + flexDirection: 'column', + gap: 8, + paddingBottom: 48, + }, + declineModalBody: { + paddingBottom: 24, + }, + text: { + fontSize: 16, + lineHeight: 20, + textAlign: 'center', + }, +}); diff --git a/src/components/WalletConnect/theme.js b/src/components/WalletConnect/theme.js new file mode 100644 index 000000000..d4f2b74fe --- /dev/null +++ b/src/components/WalletConnect/theme.js @@ -0,0 +1,71 @@ +import { StyleSheet } from 'react-native'; +import { COLORS } from '../../styles/themes'; + +export const commonStyles = StyleSheet.create({ + // Card + card: { + paddingVertical: 16, + paddingHorizontal: 16, + backgroundColor: COLORS.backgroundColor, + borderTopLeftRadius: 16, + borderTopRightRadius: 16, + borderBottomLeftRadius: 16, + borderBottomRightRadius: 16, + shadowOffset: { height: 2, width: 0 }, + shadowRadius: 4, + shadowColor: COLORS.textColor, + shadowOpacity: 0.08, + }, + cardSplit: { + flexDirection: 'row', + gap: 16, + }, + cardSplitIcon: { + flexShrink: 1, + alignSelf: 'flex-start', + }, + cardSplitContent: { + maxWidth: '80%', + flexDirection: 'column', + gap: 8, + }, + cardSeparator: { + width: '100%', + height: 1, + backgroundColor: COLORS.borderColor + }, + cardStack: { + flexDirection: 'column', + }, + cardStackItem: { + flexDirection: 'row', + paddingVertical: 16, + }, + listItem: { + paddingVertical: 24, + paddingHorizontal: 16, + }, + + // General + text: { + fontSize: 14, + lineHeight: 20, + color: COLORS.black, + }, + bold: { + fontWeight: 'bold', + }, + value: { + color: 'hsla(0, 0%, 38%, 1)', + }, + mb4: { + marginBottom: 4, + }, + sectionTitle: { + fontSize: 16, + fontWeight: 'bold', + lineHeight: 20, + color: COLORS.black, + marginBottom: 24, + }, +}); diff --git a/src/constants.js b/src/constants.js index 63e206411..0ffec28dc 100644 --- a/src/constants.js +++ b/src/constants.js @@ -240,6 +240,13 @@ export const NANOCONTRACT_REGISTER_STATUS = { SUCCESSFUL: 'successful', }; +export const WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS = { + READY: 'ready', + FAILED: 'failed', + LOADING: 'loading', + SUCCESSFUL: 'successful', +}; + /** * Timeout in miliseconds to call wallet-service. */ @@ -262,7 +269,12 @@ export const NETWORK_PRIVATENET = 'privatenet'; export const MAX_RETRIES = 8; export const INITIAL_RETRY_LATENCY = 300; // ms export const LATENCY_MULTIPLIER = 30; // multiplier per iteration + /** * Nano Contract's transaction history list size. */ export const NANO_CONTRACT_TX_HISTORY_SIZE = 20; +/** + * Nano Contract documentation URL. + */ +export const NANO_CONTRACT_INFO_URL = 'https://docs.hathor.network/explanations/features/nano-contracts/'; diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 4c92d330a..5cc8ed9e8 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -14,7 +14,8 @@ import { FEATURE_TOGGLE_DEFAULTS, PRE_SETTINGS_MAINNET, NETWORKSETTINGS_STATUS, - NANOCONTRACT_REGISTER_STATUS + NANOCONTRACT_REGISTER_STATUS, + WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS } from '../constants'; import { types } from '../actions'; import { TOKEN_DOWNLOAD_STATUS } from '../sagas/tokens'; @@ -231,6 +232,38 @@ const initialState = { modal: { show: false, }, + /** + * newNanoContractTransaction {{ + * showModal: boolean; + * data: { + * nc: { + * network: string; + * ncId: string; + * blueprintId: string; + * method: string; + * caller: string; + * actions: { + * type: string; + * token: string; + * amount: number; + * address?: string; + * }[]; + * args: string[]; + * }; + * dapp: { + * icon: string; + * proposer: string; + * url: string; + * description: string; + * }; + * }; + * }} + */ + newNanoContractTransaction: { + status: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.READY, + showModal: false, + data: null, + }, connectionFailed: false, sessions: {}, }, @@ -387,6 +420,8 @@ export const reducer = (state = initialState, action) => { return onUpdateLoadedData(state, action); case types.SET_USE_WALLET_SERVICE: return onSetUseWalletService(state, action); + case types.TOKENS_FETCH_METADATA_REQUESTED: + return onTokensFetchMetadataRequested(state); case types.TOKEN_METADATA_UPDATED: return onTokenMetadataUpdated(state, action); case types.TOKEN_METADATA_REMOVED: @@ -531,6 +566,10 @@ export const reducer = (state = initialState, action) => { return onFirstAddressFailure(state, action); case types.FIRSTADDRESS_SUCCESS: return onFirstAddressSuccess(state, action); + case types.SET_NEW_NANO_CONTRACT_TRANSACTION: + return onSetNewNanoContractTransaction(state, action); + case types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS: + return onSetNewNanoContractTransactionStatus(state, action); default: return state; } @@ -773,6 +812,14 @@ const onTokenMetadataLoaded = (state, action) => ({ metadataLoaded: action.payload, }); +/** + * Update token metadata status to false, meaning it is loading. + */ +const onTokensFetchMetadataRequested = (state) => ({ + ...state, + metadataLoaded: false, +}); + /** * Update token metadata */ @@ -1683,3 +1730,55 @@ export const onFirstAddressSuccess = (state, { payload }) => ({ error: null, }, }); + +/** + * @param {Object} state + * @param {{ + * payload: { + * showModal: boolean; + * data: { + * nc: { + * network: string; + * ncId: string; + * blueprintId: string; + * method: string; + * caller: string; + * actions: { + * type: string; + * token: string; + * amount: number; + * address?: string; + * }[]; + * args: string[]; + * }; + * dapp: { + * icon: string; + * proposer: string; + * url: string; + * description: string; + * }; + * }; + * }; + * }} action + */ +export const onSetNewNanoContractTransaction = (state, { payload }) => ({ + ...state, + walletConnect: { + ...state.walletConnect, + newNanoContractTransaction: { + ...payload, + status: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.READY, + }, + }, +}); + +export const onSetNewNanoContractTransactionStatus = (state, { payload }) => ({ + ...state, + walletConnect: { + ...state.walletConnect, + newNanoContractTransaction: { + ...state.walletConnect.newNanoContractTransaction, + status: payload, + }, + }, +}); diff --git a/src/sagas/wallet.js b/src/sagas/wallet.js index 2745f2c53..68495baef 100644 --- a/src/sagas/wallet.js +++ b/src/sagas/wallet.js @@ -350,13 +350,22 @@ export function* loadTokens() { return registeredUids; } +/** + * It handles the request to fetch tokens metadata and open a thread to process it. + * @param {{ tokens: string[] }} + */ +export function* fetchTokensMetadataRequest(action) { + yield spawn(fetchTokensMetadata, action.tokens); +} + /** * The wallet needs each token metadata to show information correctly * So we fetch the tokens metadata and store on redux */ export function* fetchTokensMetadata(tokens) { - // No tokens to load + // No tokens to load, set metadata as loaded if (!tokens.length) { + yield put(tokenMetadataUpdated({})); return; } @@ -381,8 +390,7 @@ export function* fetchTokensMetadata(tokens) { const tokenMetadatas = {}; for (const response of responses) { if (response.type === types.TOKEN_FETCH_METADATA_FAILED) { - // eslint-disable-next-line - console.log('Error downloading metadata of token', response.tokenId); + log(`Error downloading metadata of token ${response.tokenId}.`); } else if (response.type === types.TOKEN_FETCH_METADATA_SUCCESS) { // When the request returns null, it means that we have no metadata for this token if (response.data) { @@ -805,6 +813,7 @@ export function* saga() { takeEvery('WALLET_UPDATE_TX', handleTx), takeEvery('WALLET_BEST_BLOCK_UPDATE', bestBlockUpdate), takeEvery('WALLET_PARTIAL_UPDATE', loadPartialUpdate), + takeEvery(types.TOKENS_FETCH_METADATA_REQUESTED, fetchTokensMetadataRequest), takeEvery(types.WALLET_REFRESH_SHARED_ADDRESS, refreshSharedAddress), takeEvery(types.SELECTADDRESS_ADDRESSES_REQUEST, fetchAllWalletAddresses), takeEvery(types.FIRSTADDRESS_REQUEST, fetchFirstWalletAddress), diff --git a/src/screens/WalletConnect/NewNanoContractTransactionScreen.js b/src/screens/WalletConnect/NewNanoContractTransactionScreen.js new file mode 100644 index 000000000..666996548 --- /dev/null +++ b/src/screens/WalletConnect/NewNanoContractTransactionScreen.js @@ -0,0 +1,44 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { t } from 'ttag'; +import HathorHeader from '../../components/HathorHeader'; +import OfflineBar from '../../components/OfflineBar'; +import { NewNanoContractTransactionRequest } from '../../components/WalletConnect/NanoContract/NewNanoContractTransactionRequest'; +import { COLORS } from '../../styles/themes'; + +export function NewNanoContractTransactionScreen({ route }) { + const { ncTxRequest } = route.params; + return ( + + + + + + ); +} + +const Wrapper = ({ children }) => ( + + {children} + +); + +const styles = StyleSheet.create({ + wrapper: { + flex: 1, + alignItems: 'center', + backgroundColor: COLORS.lowContrastDetail, // Defines an outer area on the main list content + }, +}); diff --git a/src/styles/themes.js b/src/styles/themes.js index 6a2f44159..970658496 100644 --- a/src/styles/themes.js +++ b/src/styles/themes.js @@ -93,6 +93,8 @@ export const COLORS = { feedbackError600: 'hsla(7, 100%, 30%, 1)', freeze100: 'hsla(0, 0%, 90%, 1)', freeze300: 'hsla(0, 0%, 45%, 1)', + cardWarning100: 'hsla(46, 100%, 95%, 1)', + cardWarning200: 'hsla(46, 100%, 58%, 1)', /** * @type {string} Black with 38% of light and full opaque */ From 4c3cb9d25b04f05fec7ef37691db4ee59c31816e Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 10 Jul 2024 15:45:53 +0100 Subject: [PATCH 02/31] feat: adapt new nc tx to initialize, set result and withdrawal feat: make ncAddress react to firstAddress change --- locale/da/texts.po | 93 ++++++---- locale/pt-br/texts.po | 95 +++++++---- locale/ru-ru/texts.po | 93 ++++++---- locale/texts.pot | 89 ++++++---- src/actions.js | 46 +++++ src/components/FrozenTextValue.js | 30 ++++ src/components/TextValue.js | 11 +- .../NanoContract/NanoContractActions.js | 13 +- .../NanoContract/NanoContractExecInfo.js | 161 ++++++++++++++---- .../NewNanoContractTransactionModal.js | 4 +- .../NewNanoContractTransactionRequest.js | 146 +++++++++------- src/components/WarnTextValue.js | 31 ++++ src/constants.js | 7 + src/reducers/reducer.js | 68 +++++++- src/sagas/nanoContract.js | 32 ++++ 15 files changed, 693 insertions(+), 226 deletions(-) create mode 100644 src/components/FrozenTextValue.js create mode 100644 src/components/WarnTextValue.js diff --git a/locale/da/texts.po b/locale/da/texts.po index 0e56a5f18..e2d4b1e64 100644 --- a/locale/da/texts.po +++ b/locale/da/texts.po @@ -433,7 +433,7 @@ msgid "Enter your seed words separated by space" msgstr "Indtast dine seed-ord adskilt med mellemrum" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -953,7 +953,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -966,7 +966,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:85 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -999,31 +999,39 @@ msgstr "" msgid "Contract successfully registered." msgstr "" -#: src/sagas/nanoContract.js:43 +#: src/sagas/nanoContract.js:45 msgid "Nano Contract already registered." msgstr "" -#: src/sagas/nanoContract.js:44 +#: src/sagas/nanoContract.js:46 msgid "Wallet is not ready yet to register a Nano Contract." msgstr "" -#: src/sagas/nanoContract.js:45 +#: src/sagas/nanoContract.js:47 msgid "The informed address does not belong to the wallet." msgstr "" -#: src/sagas/nanoContract.js:46 +#: src/sagas/nanoContract.js:48 msgid "Nano Contract not found." msgstr "" -#: src/sagas/nanoContract.js:47 +#: src/sagas/nanoContract.js:49 msgid "Error while trying to get Nano Contract state." msgstr "" -#: src/sagas/nanoContract.js:48 +#: src/sagas/nanoContract.js:50 +msgid "Blueprint not found." +msgstr "" + +#: src/sagas/nanoContract.js:51 +msgid "Couldn't get Blueprint info." +msgstr "" + +#: src/sagas/nanoContract.js:52 msgid "Nano Contract not registered." msgstr "" -#: src/sagas/nanoContract.js:49 +#: src/sagas/nanoContract.js:53 msgid "Error while trying to download Nano Contract transactions history." msgstr "" @@ -1262,6 +1270,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:118 msgid "Blueprint Method" msgstr "" @@ -1332,33 +1341,47 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:35 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:87 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 -msgid "BluePrint ID" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:90 +msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:95 msgid "Blueprint Name" msgstr "" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:111 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:142 +msgid "Loading..." +msgstr "" + +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:126 +msgid "Caller" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:145 +msgid "Couldn't determine address, select one" +msgstr "" + #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 msgid "Argument List" msgstr "" @@ -1393,35 +1416,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 -msgid "Loading transaction information." +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 -msgid "Accept Transaction" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +msgid "" +"The Nano Contract requested is not registered. First register the Nano " +"Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 msgid "Error while sending transaction." msgstr "" @@ -1490,11 +1524,6 @@ msgstr "" msgid "From this wallet" msgstr "" -#. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -msgid "Caller" -msgstr "" - #. XXX: add when shrank component can be used. #: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index e625c888a..2655fa5dd 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -444,7 +444,7 @@ msgid "Enter your seed words separated by space" msgstr "Digite suas palavras separadas por espaços" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -979,7 +979,7 @@ msgstr "Erro ao carregar primeiro endereço da wallet" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "Carregando" @@ -992,7 +992,7 @@ msgstr "Carregando primeiro endereço da wallet." #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:87 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "ID do Nano Contract" @@ -1025,31 +1025,39 @@ msgstr "Transação do Nano Contract" msgid "Contract successfully registered." msgstr "Nano Contract registrado com sucesso." -#: src/sagas/nanoContract.js:43 +#: src/sagas/nanoContract.js:45 msgid "Nano Contract already registered." msgstr "Nano Contract já registrado." -#: src/sagas/nanoContract.js:44 +#: src/sagas/nanoContract.js:46 msgid "Wallet is not ready yet to register a Nano Contract." msgstr "A wallet não está pronta ainda para registrar Nano Contracts." -#: src/sagas/nanoContract.js:45 +#: src/sagas/nanoContract.js:47 msgid "The informed address does not belong to the wallet." msgstr "O endereço informado não pertence a esta carteira." -#: src/sagas/nanoContract.js:46 +#: src/sagas/nanoContract.js:48 msgid "Nano Contract not found." msgstr "Nano Contract não encontrado" -#: src/sagas/nanoContract.js:47 +#: src/sagas/nanoContract.js:49 msgid "Error while trying to get Nano Contract state." msgstr "Erro ao obter o estado do Nano Contract." -#: src/sagas/nanoContract.js:48 +#: src/sagas/nanoContract.js:50 +msgid "Blueprint not found." +msgstr "Blueprint não encontrado." + +#: src/sagas/nanoContract.js:51 +msgid "Couldn't get Blueprint info." +msgstr "Não foi possível carregar informações do Blueprint." + +#: src/sagas/nanoContract.js:52 msgid "Nano Contract not registered." msgstr "Nano Contract não registrado." -#: src/sagas/nanoContract.js:49 +#: src/sagas/nanoContract.js:53 msgid "Error while trying to download Nano Contract transactions history." msgstr "Error ao fazer download do histórico de transações do Nano Contract." @@ -1292,6 +1300,7 @@ msgstr "ID da Transação" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:120 msgid "Blueprint Method" msgstr "Método do Blueprint" @@ -1378,24 +1387,38 @@ msgstr "${ tokenSymbol } Depósito" msgid "${ tokenSymbol } Withdrawal" msgstr "${ tokenSymbol } Saque" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 msgid "Action List" msgstr "Lista de Actions" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 msgid "To Address:" msgstr "Para o endereço:" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 -msgid "BluePrint ID" -msgstr "ID do BluePrint" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:92 +msgid "Blueprint ID" +msgstr "ID do Blueprint" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:97 msgid "Blueprint Name" msgstr "Nome do Blueprint" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:113 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:144 +msgid "Loading..." +msgstr "Carregando..." + +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:128 +msgid "Caller" +msgstr "Caller" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:147 +msgid "Couldn't determine address, select one" +msgstr "" + #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 msgid "Argument List" msgstr "List de Argumentos" @@ -1432,35 +1455,48 @@ msgstr "" msgid "Read More." msgstr "Ler mais." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +msgid "Nano Contract Not Found" +msgstr "Nano Contract não nncontrado" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +msgid "" +"The Nano Contract requested is not registered. First register the Nano " +"Contract to interact with it." +msgstr "" +"O Nano Contract solicitado não está registrado. Primeiro registre o Nano " +"Contract para interagir com ele." + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 +msgid "Decline Transaction" +msgstr "Recusar transação" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 msgid "Loading transaction information." msgstr "Carregando informações da transação." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 msgid "Accept Transaction" msgstr "Aceitar transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 -msgid "Decline Transaction" -msgstr "Recusar transação" - -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 msgid "Sending transaction" msgstr "Enviando transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 msgid "Please wait." msgstr "Por favor, espere." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 msgid "Transaction successfully sent." msgstr "Transação enviada com sucesso." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 msgid "Ok, close" msgstr "Ok, fechar" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 msgid "Error while sending transaction." msgstr "Ocorreu um erro durante o envio da transação." @@ -1531,11 +1567,6 @@ msgstr "Data & Hora" msgid "From this wallet" msgstr "Desta wallet" -#. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -msgid "Caller" -msgstr "Caller" - #. XXX: add when shrank component can be used. #: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" diff --git a/locale/ru-ru/texts.po b/locale/ru-ru/texts.po index d1b248e4c..6ec21b583 100644 --- a/locale/ru-ru/texts.po +++ b/locale/ru-ru/texts.po @@ -434,7 +434,7 @@ msgid "Enter your seed words separated by space" msgstr "Введите seed-фразу" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -957,7 +957,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -970,7 +970,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:85 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1003,31 +1003,39 @@ msgstr "" msgid "Contract successfully registered." msgstr "" -#: src/sagas/nanoContract.js:43 +#: src/sagas/nanoContract.js:45 msgid "Nano Contract already registered." msgstr "" -#: src/sagas/nanoContract.js:44 +#: src/sagas/nanoContract.js:46 msgid "Wallet is not ready yet to register a Nano Contract." msgstr "" -#: src/sagas/nanoContract.js:45 +#: src/sagas/nanoContract.js:47 msgid "The informed address does not belong to the wallet." msgstr "" -#: src/sagas/nanoContract.js:46 +#: src/sagas/nanoContract.js:48 msgid "Nano Contract not found." msgstr "" -#: src/sagas/nanoContract.js:47 +#: src/sagas/nanoContract.js:49 msgid "Error while trying to get Nano Contract state." msgstr "" -#: src/sagas/nanoContract.js:48 +#: src/sagas/nanoContract.js:50 +msgid "Blueprint not found." +msgstr "" + +#: src/sagas/nanoContract.js:51 +msgid "Couldn't get Blueprint info." +msgstr "" + +#: src/sagas/nanoContract.js:52 msgid "Nano Contract not registered." msgstr "" -#: src/sagas/nanoContract.js:49 +#: src/sagas/nanoContract.js:53 msgid "Error while trying to download Nano Contract transactions history." msgstr "" @@ -1251,6 +1259,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:118 msgid "Blueprint Method" msgstr "" @@ -1321,33 +1330,47 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:35 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:87 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 -msgid "BluePrint ID" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:90 +msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:95 msgid "Blueprint Name" msgstr "" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:111 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:142 +msgid "Loading..." +msgstr "" + +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:126 +msgid "Caller" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:145 +msgid "Couldn't determine address, select one" +msgstr "" + #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 msgid "Argument List" msgstr "" @@ -1382,35 +1405,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 -msgid "Loading transaction information." +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 -msgid "Accept Transaction" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +msgid "" +"The Nano Contract requested is not registered. First register the Nano " +"Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 msgid "Error while sending transaction." msgstr "" @@ -1479,11 +1513,6 @@ msgstr "" msgid "From this wallet" msgstr "" -#. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -msgid "Caller" -msgstr "" - #. XXX: add when shrank component can be used. #: src/components/NanoContract/NanoContractTransactionHeader.js:110 msgid "See transaction details" diff --git a/locale/texts.pot b/locale/texts.pot index 19ac117c4..831847afd 100644 --- a/locale/texts.pot +++ b/locale/texts.pot @@ -422,7 +422,7 @@ msgid "Enter your seed words separated by space" msgstr "" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 #: src/screens/LoadHistoryScreen.js:51 #: src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 @@ -950,7 +950,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:148 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -963,7 +963,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:36 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:87 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -996,31 +996,39 @@ msgstr "" msgid "Contract successfully registered." msgstr "" -#: src/sagas/nanoContract.js:43 +#: src/sagas/nanoContract.js:45 msgid "Nano Contract already registered." msgstr "" -#: src/sagas/nanoContract.js:44 +#: src/sagas/nanoContract.js:46 msgid "Wallet is not ready yet to register a Nano Contract." msgstr "" -#: src/sagas/nanoContract.js:45 +#: src/sagas/nanoContract.js:47 msgid "The informed address does not belong to the wallet." msgstr "" -#: src/sagas/nanoContract.js:46 +#: src/sagas/nanoContract.js:48 msgid "Nano Contract not found." msgstr "" -#: src/sagas/nanoContract.js:47 +#: src/sagas/nanoContract.js:49 msgid "Error while trying to get Nano Contract state." msgstr "" -#: src/sagas/nanoContract.js:48 +#: src/sagas/nanoContract.js:50 +msgid "Blueprint not found." +msgstr "" + +#: src/sagas/nanoContract.js:51 +msgid "Couldn't get Blueprint info." +msgstr "" + +#: src/sagas/nanoContract.js:52 msgid "Nano Contract not registered." msgstr "" -#: src/sagas/nanoContract.js:49 +#: src/sagas/nanoContract.js:53 msgid "Error while trying to download Nano Contract transactions history." msgstr "" @@ -1244,6 +1252,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:120 msgid "Blueprint Method" msgstr "" @@ -1323,24 +1332,38 @@ msgstr "" msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:40 -msgid "BluePrint ID" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:92 +msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:44 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:97 msgid "Blueprint Name" msgstr "" +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:113 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:144 +msgid "Loading..." +msgstr "" + +#: src/components/NanoContract/NanoContractTransactionHeader.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:128 +msgid "Caller" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:147 +msgid "Couldn't determine address, select one" +msgstr "" + #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 msgid "Argument List" msgstr "" @@ -1374,35 +1397,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:149 -msgid "Loading transaction information." +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:173 -msgid "Accept Transaction" +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +msgid "" +"The Nano Contract requested is not registered. First register the Nano " +"Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:187 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +msgid "Loading transaction information." +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +msgid "Accept Transaction" +msgstr "" + +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:215 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:221 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 msgid "Error while sending transaction." msgstr "" @@ -1471,11 +1505,6 @@ msgstr "" msgid "From this wallet" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#. XXX: add when shrank component can be used. -msgid "Caller" -msgstr "" - #: src/components/NanoContract/NanoContractTransactionHeader.js:110 #. XXX: add when shrank component can be used. msgid "See transaction details" diff --git a/src/actions.js b/src/actions.js index 01d8f99f8..73d0f7714 100644 --- a/src/actions.js +++ b/src/actions.js @@ -168,6 +168,14 @@ export const types = { NANOCONTRACT_UNREGISTER_SUCCESS: 'NANOCONTRACT_UNREGISTER_SUCCESS', /* It initiates a process to change the address on registered Nano Contract. */ NANOCONTRACT_ADDRESS_CHANGE_REQUEST: 'NANOCONTRACT_ADDRESS_CHANGE_REQUEST', + /* It triggers a process to fetch blueprint info. */ + NANOCONTRACT_BLUEPRINTINFO_REQUEST: 'NANOCONTRACT_BLUEPRINTINFO_REQUEST', + /* It signals a failure on fetch blueprint info. */ + NANOCONTRACT_BLUEPRINTINFO_FAILURE: 'NANOCONTRACT_BLUEPRINTINFO_FAILURE', + /* It signals a success on fetch blueprint info. */ + NANOCONTRACT_BLUEPRINTINFO_SUCCESS: 'NANOCONTRACT_BLUEPRINTINFO_SUCCESS', + /* It signals the blueprint info state is ready. */ + NANOCONTRACT_BLUEPRINTINFO_READY: 'NANOCONTRACT_BLUEPRINTINFO_READY', /* It triggers a process to fetch all wallet addresses. */ SELECTADDRESS_ADDRESSES_REQUEST: 'SELECTADDRESS_ADDRESSES_REQUEST', /* It signals the fetch has loaded all the addresses with success. */ @@ -1277,3 +1285,41 @@ export const setNewNanoContractStatusSuccess = () => ({ type: types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS, payload: WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.SUCCESSFUL, }); + +/** + * Blueprint Info request in the context of a Nano Contract. + * @param {string} id Blueprint ID. + */ +export const nanoContractBlueprintInfoRequest = (id) => ({ + type: types.NANOCONTRACT_BLUEPRINTINFO_REQUEST, + payload: { id }, +}); + +/** + * Signals the bluprint info request has failed. + * @param {string} error Request failure reason. + */ +export const nanoContractBlueprintInfoFailure = (error) => ({ + type: types.NANOCONTRACT_BLUEPRINTINFO_FAILURE, + payload: { error }, +}); + +/** + * Signals the blueprint info was fetched with success. + * @param {{ + * data: { + * name: string; + * }; + * }} blueprintInfo + */ +export const nanoContractBlueprintInfoSuccess = (blueprintInfo) => ({ + type: types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS, + payload: blueprintInfo, +}); + +/** + * Signals the blueprint info state is ready. + */ +export const nanoContractBlueprintInfoReady = () => ({ + type: types.NANOCONTRACT_BLUEPRINTINFO_READY, +}); diff --git a/src/components/FrozenTextValue.js b/src/components/FrozenTextValue.js new file mode 100644 index 000000000..8f4056e4b --- /dev/null +++ b/src/components/FrozenTextValue.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import { TextValue } from './TextValue'; + +/** + * @param {Object} props + * @param {boolean} props.title It sets font weight to bold and a larger font size + * @param {boolean} props.bold It sets font weight to bold + * @param {boolean} props.oneline It sets numberOfLines to 1 + * @param {boolean} props.shrink It sets flexShrink to 1 + * @param {boolean} props.pb4 It sets padding bottom to 4 + */ +export const FrozenTextValue = ({ title, bold, oneline, shrink, pb4, children }) => ( + + {children} + +); diff --git a/src/components/TextValue.js b/src/components/TextValue.js index f377e069c..efcf00c71 100644 --- a/src/components/TextValue.js +++ b/src/components/TextValue.js @@ -10,23 +10,28 @@ import { StyleSheet, Text, } from 'react-native'; +import { commonStyles } from './WalletConnect/theme'; /** * @param {Object} props * @param {boolean} props.title It sets font weight to bold and a larger font size + * @param {boolean} props.label It sets font weight to bold and a bottom margin * @param {boolean} props.bold It sets font weight to bold * @param {boolean} props.oneline It sets numberOfLines to 1 * @param {boolean} props.shrink It sets flexShrink to 1 * @param {boolean} props.pb4 It sets padding bottom to 4 + * @param {string} props.color It sets text color */ -export const TextValue = ({ title, bold, oneline, shrink, pb4, children }) => ( +export const TextValue = ({ title, label, bold, oneline, shrink, pb4, color, children }) => ( {children} ); @@ -41,6 +46,10 @@ const styles = StyleSheet.create({ fontSize: 18, fontWeight: 'bold', }, + label: [ + commonStyles.bold, + commonStyles.mb4, + ], pb4: { paddingBottom: 4, }, diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js index 515bcc377..0d3e79bf6 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractActions.js +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -62,12 +62,17 @@ const getActionTitle = (tokens, action) => { /** * It renders a list of actions with a proper title for each one. + * It renders nothing if there aren't actions to render. * * @param {Object} props * @param {Object[]} props.ncActions A list of Nano Contract actions. * @param {Object} props.tokens A map of token metadata by token uid. */ export const NanoContractActions = ({ ncActions, tokens }) => { + if (!ncActions || ncActions.length < 1) { + return null; + } + const styles = StyleSheet.create({ wrapper: { marginTop: 0, marginBottom: 0, marginHorizontal: 0 }, action: [commonStyles.text, commonStyles.bold], @@ -91,10 +96,10 @@ export const NanoContractActions = ({ ncActions, tokens }) => { {getActionTitle(tokens, item)} {item.address && ( - - {t`To Address:`} - {item.address} - + + {t`To Address:`} + {item.address} + )} diff --git a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js index d2f18a75d..eebb64a1c 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js +++ b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js @@ -5,17 +5,24 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, { useEffect, useMemo } from 'react'; import { StyleSheet, View, - Text, TouchableOpacity, } from 'react-native'; +import { useDispatch, useSelector } from 'react-redux'; import { t } from 'ttag'; +import { firstAddressRequest, nanoContractBlueprintInfoRequest } from '../../../actions'; +import { NANOCONTRACT_BLUEPRINTINFO_STATUS } from '../../../constants'; import { COLORS } from '../../../styles/themes'; +import { FrozenTextValue } from '../../FrozenTextValue'; +import { CircleError } from '../../Icons/CircleError.icon'; import { NanoContractIcon } from '../../Icons/NanoContract.icon'; import { PenIcon } from '../../Icons/Pen.icon'; +import Spinner from '../../Spinner'; +import { TextValue } from '../../TextValue'; +import { WarnTextValue } from '../../WarnTextValue'; import { commonStyles } from '../theme'; /** @@ -23,46 +30,132 @@ import { commonStyles } from '../theme'; * * @param {Object} props * @param {Object} props.nc Nano Contract info. - * @param {string} props.blueprintName Nano Contract's blueprint name. * @param {() => void} props.onSelectAddress Callback fn for tap on caller address component. */ -export const NanoContractExecInfo = ({ nc, blueprintName, onSelectAddress }) => ( - - - - - - - {t`Nano Contract ID`} - {nc.ncId} - - - {t`BluePrint ID`} - {nc.blueprintId} - - - {t`Blueprint Name`} - {blueprintName} +export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { + const dispatch = useDispatch(); + const registeredNc = useSelector((state) => state.nanoContract.registered[nc.ncId]); + const blueprintInfo = useSelector((state) => state.nanoContract.blueprintInfo); + const firstAddress = useSelector((state) => state.firstAddress); + + const isInitialize = nc.method === 'initialize'; + const notInitialize = !isInitialize; + + const blueprintName = useMemo(() => { + if (notInitialize && registeredNc) { + return registeredNc.blueprintName; + } + + if (blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.SUCCESSFUL) { + return blueprintInfo.data.name; + } + return null; + }, [blueprintInfo]); + + useEffect(() => { + if (isInitialize) { + // If method is 'initialize' we don't have the nano contract registered, + // therefore we need to request the blueprint info. + dispatch(nanoContractBlueprintInfoRequest(nc.blueprintId)); + + // Load firstAddress if not loaded + if (!firstAddress.address) { + dispatch(firstAddressRequest()); + } + } + }, []); + + const isBlueprintInfoLoading = blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING; + const hasBlueprintInfoFailed = blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.FAILED; + + const hasCaller = nc.caller != null; + const hasFirstAddressFailed = !hasCaller && isInitialize && firstAddress.error; + const isFirstAddressLoading = !hasCaller + && isInitialize + && !hasFirstAddressFailed; + + return ( + + + - - - - - Caller - {nc.caller} - - - + + {notInitialize && ( + + {t`Nano Contract ID`} + {nc.ncId} + )} + + {t`Blueprint ID`} + {nc.blueprintId} - + + + {t`Blueprint Name`} + {isBlueprintInfoLoading && ( + + {' '} + + )} + {hasBlueprintInfoFailed && ( + + {' '} + + )} + + {blueprintName && ( + {blueprintName} + )} + {isBlueprintInfoLoading && ( + {t`Loading...`} + )} + {hasBlueprintInfoFailed && ( + {blueprintInfo.error} + )} + + + {t`Blueprint Method`} + {nc.method} + + + + + + + {t`Caller`} + {isFirstAddressLoading && ( + + {' '} + + )} + {(hasFirstAddressFailed) && ( + + {' '} + + )} + + {hasCaller && ( + {nc.caller || firstAddress.address} + )} + {isFirstAddressLoading && ( + {t`Loading...`} + )} + {hasFirstAddressFailed && ( + {t`Couldn't determine address, select one`} + )} + + + + + + + - -); + ) +}; const styles = StyleSheet.create({ - property: [commonStyles.text, commonStyles.bold, commonStyles.mb4], - value: [commonStyles.text, commonStyles.value], contentEditable: { flexDirection: 'row', justifyContent: 'space-between', diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js index d26e6f40a..e26e7661b 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js @@ -35,7 +35,7 @@ export const NewNanoContractTransactionModal = () => { walletStartState, walletConnect: { newNanoContractTransaction: { - showModal, + showModal: showNcTxModal, data, } }, @@ -43,7 +43,7 @@ export const NewNanoContractTransactionModal = () => { const isWalletReady = walletStartState === WALLET_STATUS.READY; return { - showModal: showModal && isWalletReady, + showModal: showNcTxModal && isWalletReady, ncTxRequest: data, }; }); diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 33db85cad..fda5135de 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -56,15 +56,23 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const dispatch = useDispatch(); const navigation = useNavigation(); const newTxStatus = useSelector((state) => state.walletConnect.newNanoContractTransaction.status); - const { blueprintName, address } = useSelector((state) => state.nanoContract.registered[nc.ncId]); + const firstAddress = useSelector((state) => state.firstAddress); + // Nullable if the nano contract method is 'initialize' + const registeredNc = useSelector((state) => state.nanoContract.registered[nc.ncId]); const registeredTokensMetadata = useSelector((state) => state.tokenMetadata); // Use it to add loading feedback const metadataLoaded = useSelector((state) => state.metadataLoaded); const [showSelectAddressModal, setShowSelectAddressModal] = useState(false); const [showDeclineModal, setShowDeclineModal] = useState(false); - const [ncAddress, setNcAddress] = useState(address); - const ncToAccept = useMemo(() => ({ ...nc, caller: ncAddress }), [ncAddress]) + // If nano-contract's method is 'initialize' then the expression + // should be resolved to firstAddress value by default. + // However, the wallet can have trouble to + const [ncAddress, setNcAddress] = useState(registeredNc?.address || firstAddress.address); + const ncToAccept = useMemo(() => ({ + ...nc, + caller: ncAddress || firstAddress.address, + }), [ncAddress, firstAddress]) // Controle SelectAddressModal const toggleSelectAddressModal = () => setShowSelectAddressModal(!showSelectAddressModal); @@ -94,13 +102,20 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { setShowDeclineModal(false); }; + // Control which content to show, if the nano contract is not registered + // a feedback content should tell user the nano contract must be registered first + // and only let user decline the transaction to get out the page, otherwise interaction + // content is showed. + const notRegistered = ncToAccept.method !== 'initialize' && registeredNc == null; + const isRegistered = !notRegistered; + useEffect(() => { - if (!blueprintName) { - throw new Error(`Nano Contract ${nc.ncId} not registered.`); - } + // Do nothing if nano contract is not registered and don't call initialize method. + if (notRegistered) return; // Get tokens metadata - const tokensUid = nc.actions.map((each) => each.token); + // actions can be null? + const tokensUid = nc.actions?.map((each) => each.token) || []; const tokensMetadataToDownload = []; tokensUid.forEach((uid) => { @@ -140,61 +155,76 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { return ( <> - - - - {isTxInfoLoading() && ( - } - offmargin - offcard - offbackground - /> - )} - {isTxInfoLoaded() && ( - - - - + )} + /> + )} + {isRegistered && ( + + + + {isTxInfoLoading() && ( + } + offmargin + offcard + offbackground /> - - - {/* User actions */} - - + + - + + + {/* User actions */} + + + + - - )} - {isTxProcessing() && ( - } - offmargin - offcard - offbackground - /> - )} - - - + )} + {isTxProcessing() && ( + } + offmargin + offcard + offbackground + /> + )} + + + + )} ( + + {children} + +); diff --git a/src/constants.js b/src/constants.js index 0ffec28dc..9f964e41c 100644 --- a/src/constants.js +++ b/src/constants.js @@ -247,6 +247,13 @@ export const WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS = { SUCCESSFUL: 'successful', }; +export const NANOCONTRACT_BLUEPRINTINFO_STATUS = { + READY: 'ready', + FAILED: 'failed', + LOADING: 'loading', + SUCCESSFUL: 'successful', +}; + /** * Timeout in miliseconds to call wallet-service. */ diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 5cc8ed9e8..1df1526a7 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -15,7 +15,8 @@ import { PRE_SETTINGS_MAINNET, NETWORKSETTINGS_STATUS, NANOCONTRACT_REGISTER_STATUS, - WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS + WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS, + NANOCONTRACT_BLUEPRINTINFO_STATUS } from '../constants'; import { types } from '../actions'; import { TOKEN_DOWNLOAD_STATUS } from '../sagas/tokens'; @@ -355,6 +356,20 @@ const initialState = { * } */ historyMeta: {}, + /** + * blueprintInfo {{ + * status: string; + * data?: { + * name: string; + * }; + * error?: string; + * }} + */ + blueprintInfo: { + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.READY, + data: null, + error: null, + }, }, /** * selectAddressModal {{ @@ -570,6 +585,14 @@ export const reducer = (state = initialState, action) => { return onSetNewNanoContractTransaction(state, action); case types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS: return onSetNewNanoContractTransactionStatus(state, action); + case types.NANOCONTRACT_BLUEPRINTINFO_REQUEST: + return onNanoContractBlueprintInfoRequest(state); + case types.NANOCONTRACT_BLUEPRINTINFO_READY: + return onNanoContractBlueprintInfoReady(state); + case types.NANOCONTRACT_BLUEPRINTINFO_FAILURE: + return onNanoContractBlueprintInfoFailure(state, action); + case types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS: + return onNanoContractBlueprintInfoSuccess(state, action); default: return state; } @@ -1782,3 +1805,46 @@ export const onSetNewNanoContractTransactionStatus = (state, { payload }) => ({ }, }, }); + +export const onNanoContractBlueprintInfoRequest = (state) => ({ + ...state, + nanoContract: { + ...state.nanoContract, + blueprintInfo: { + ...state.nanoContract.blueprintInfo, + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING, + }, + }, +}); + +export const onNanoContractBlueprintInfoFailure = (state, { payload }) => ({ + ...state, + nanoContract: { + ...state.nanoContract, + blueprintInfo: { + ...state.nanoContract.blueprintInfo, + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.FAILED, + error: payload.error, + }, + }, +}); + +export const onNanoContractBlueprintInfoSuccess = (state, { payload }) => ({ + ...state, + nanoContract: { + ...state.nanoContract, + blueprintInfo: { + ...state.nanoContract.blueprintInfo, + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.SUCCESSFUL, + data: payload.data, + }, + }, +}); + +export const onNanoContractBlueprintInfoReady = (state) => ({ + ...state, + nanoContract: { + ...state.nanoContract, + blueprintInfo: initialState.nanoContract.blueprintInfo, + }, +}); diff --git a/src/sagas/nanoContract.js b/src/sagas/nanoContract.js index e8ec59a5d..dfbede0f5 100644 --- a/src/sagas/nanoContract.js +++ b/src/sagas/nanoContract.js @@ -22,6 +22,8 @@ import { import { t } from 'ttag'; import { NanoRequest404Error } from '@hathor/wallet-lib/lib/errors'; import { + nanoContractBlueprintInfoFailure, + nanoContractBlueprintInfoSuccess, nanoContractHistoryClean, nanoContractHistoryFailure, nanoContractHistoryLoading, @@ -45,6 +47,8 @@ export const failureMessage = { addressNotMine: t`The informed address does not belong to the wallet.`, nanoContractStateNotFound: t`Nano Contract not found.`, nanoContractStateFailure: t`Error while trying to get Nano Contract state.`, + blueprintInfoNotFound: t`Blueprint not found.`, + blueprintInfoFailure: t`Couldn't get Blueprint info.`, notRegistered: t`Nano Contract not registered.`, nanoContractHistoryFailure: t`Error while trying to download Nano Contract transactions history.`, }; @@ -348,6 +352,33 @@ export function* requestNanoContractAddressChange({ payload }) { log.debug(`Success persisting Nano Contract address update. ncId = ${ncId}`); } +/** + * Process request to fetch blueprint info. + * @param {{ + * payload: { + * id: string; + * } + * }} + */ +export function* requestBlueprintInfo({ payload }) { + const { id } = payload; + let blueprintInfo = null; + try { + blueprintInfo = yield call([ncApi, ncApi.getBlueprintInformation], id); + } catch (error) { + if (error instanceof NanoRequest404Error) { + yield put(nanoContractBlueprintInfoFailure(failureMessage.blueprintInfoNotFound)); + } else { + log.error('Error while fetching blueprint info.', error); + yield put(nanoContractBlueprintInfoFailure(failureMessage.blueprintInfoFailure)); + } + return; + } + + log.debug(`Success fetching blueprint info. id = ${id}`); + yield put(nanoContractBlueprintInfoSuccess({ data: { name: blueprintInfo.name } })); +} + export function* saga() { yield all([ debounce(500, [[types.START_WALLET_SUCCESS, types.NANOCONTRACT_INIT]], init), @@ -355,5 +386,6 @@ export function* saga() { takeEvery(types.NANOCONTRACT_HISTORY_REQUEST, requestHistoryNanoContract), takeEvery(types.NANOCONTRACT_UNREGISTER_REQUEST, unregisterNanoContract), takeEvery(types.NANOCONTRACT_ADDRESS_CHANGE_REQUEST, requestNanoContractAddressChange), + takeEvery(types.NANOCONTRACT_BLUEPRINTINFO_REQUEST, requestBlueprintInfo), ]); } From 1e15334309ae5b3dac60b76d62e7a83216d05d9c Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 11 Jul 2024 17:05:59 +0100 Subject: [PATCH 03/31] feat: make ncAddress react to firstAddress the right way --- .../NewNanoContractTransactionRequest.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index fda5135de..a7923bd6e 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -71,8 +71,8 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const [ncAddress, setNcAddress] = useState(registeredNc?.address || firstAddress.address); const ncToAccept = useMemo(() => ({ ...nc, - caller: ncAddress || firstAddress.address, - }), [ncAddress, firstAddress]) + caller: ncAddress, + }), [ncAddress]) // Controle SelectAddressModal const toggleSelectAddressModal = () => setShowSelectAddressModal(!showSelectAddressModal); @@ -109,6 +109,14 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const notRegistered = ncToAccept.method !== 'initialize' && registeredNc == null; const isRegistered = !notRegistered; + // This effect should run only once because firstAddress is kept on state when loaded + useEffect(() => { + if (firstAddress.address) { + setNcAddress(firstAddress.address); + } + }, [firstAddress]); + + // This effect runs only once in the construct phase useEffect(() => { // Do nothing if nano contract is not registered and don't call initialize method. if (notRegistered) return; From a35a521a0bb9ee67dd16b07312380405982c7991 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Tue, 16 Jul 2024 22:47:12 +0100 Subject: [PATCH 04/31] feat: add name to method arguments --- src/actions.js | 27 ++- .../NanoContract/NanoContractExecInfo.js | 18 +- .../NanoContract/NanoContractMethodArgs.js | 65 ++++--- .../NewNanoContractTransactionRequest.js | 15 +- src/reducers/reducer.js | 180 +++++++++++++++--- src/sagas/nanoContract.js | 6 +- 6 files changed, 238 insertions(+), 73 deletions(-) diff --git a/src/actions.js b/src/actions.js index 73d0f7714..2e4e6631c 100644 --- a/src/actions.js +++ b/src/actions.js @@ -1297,29 +1297,40 @@ export const nanoContractBlueprintInfoRequest = (id) => ({ /** * Signals the bluprint info request has failed. + * @param {string} id Blueprint ID. * @param {string} error Request failure reason. */ -export const nanoContractBlueprintInfoFailure = (error) => ({ +export const nanoContractBlueprintInfoFailure = (id, error) => ({ type: types.NANOCONTRACT_BLUEPRINTINFO_FAILURE, - payload: { error }, + payload: { id, error }, }); /** * Signals the blueprint info was fetched with success. + * @param {string} id Blueprint ID. * @param {{ - * data: { - * name: string; + * id: string; + * name: string; + * public_methods: { + * [methodName: string]: { + * args: { + * type: string; + * name: string; + * }[]; + * }; * }; - * }} blueprintInfo + * }} blueprintInfo Raw data response from fullnode. */ -export const nanoContractBlueprintInfoSuccess = (blueprintInfo) => ({ +export const nanoContractBlueprintInfoSuccess = (id, blueprintInfo) => ({ type: types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS, - payload: blueprintInfo, + payload: { id, data: { ...blueprintInfo } }, }); /** * Signals the blueprint info state is ready. + * @param {string} id Blueprint ID. */ -export const nanoContractBlueprintInfoReady = () => ({ +export const nanoContractBlueprintInfoReady = (id) => ({ type: types.NANOCONTRACT_BLUEPRINTINFO_READY, + payload: { id }, }); diff --git a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js index eebb64a1c..471fb7c4c 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js +++ b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js @@ -13,8 +13,8 @@ import { } from 'react-native'; import { useDispatch, useSelector } from 'react-redux'; import { t } from 'ttag'; -import { firstAddressRequest, nanoContractBlueprintInfoRequest } from '../../../actions'; -import { NANOCONTRACT_BLUEPRINTINFO_STATUS } from '../../../constants'; +import { firstAddressRequest } from '../../../actions'; +import { NANOCONTRACT_BLUEPRINTINFO_STATUS as STATUS } from '../../../constants'; import { COLORS } from '../../../styles/themes'; import { FrozenTextValue } from '../../FrozenTextValue'; import { CircleError } from '../../Icons/CircleError.icon'; @@ -35,7 +35,7 @@ import { commonStyles } from '../theme'; export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { const dispatch = useDispatch(); const registeredNc = useSelector((state) => state.nanoContract.registered[nc.ncId]); - const blueprintInfo = useSelector((state) => state.nanoContract.blueprintInfo); + const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[nc.blueprintId]); const firstAddress = useSelector((state) => state.firstAddress); const isInitialize = nc.method === 'initialize'; @@ -46,7 +46,7 @@ export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { return registeredNc.blueprintName; } - if (blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.SUCCESSFUL) { + if (blueprintInfo?.status === STATUS.SUCCESSFUL) { return blueprintInfo.data.name; } return null; @@ -54,10 +54,6 @@ export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { useEffect(() => { if (isInitialize) { - // If method is 'initialize' we don't have the nano contract registered, - // therefore we need to request the blueprint info. - dispatch(nanoContractBlueprintInfoRequest(nc.blueprintId)); - // Load firstAddress if not loaded if (!firstAddress.address) { dispatch(firstAddressRequest()); @@ -65,8 +61,8 @@ export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { } }, []); - const isBlueprintInfoLoading = blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING; - const hasBlueprintInfoFailed = blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.FAILED; + const isBlueprintInfoLoading = blueprintInfo?.status === STATUS.LOADING; + const hasBlueprintInfoFailed = blueprintInfo?.status === STATUS.FAILED; const hasCaller = nc.caller != null; const hasFirstAddressFailed = !hasCaller && isInitialize && firstAddress.error; @@ -95,7 +91,7 @@ export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { {t`Blueprint Name`} {isBlueprintInfoLoading && ( - {' '} + {' '} )} {hasBlueprintInfoFailed && ( diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 58e8bf042..9cf719bf8 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -5,13 +5,15 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, { useMemo } from 'react'; import { StyleSheet, View, Text, } from 'react-native'; +import { useSelector } from 'react-redux'; import { t } from 'ttag'; +import { get } from 'lodash'; import { COLORS } from '../../../styles/themes'; import { commonStyles } from '../theme'; @@ -21,30 +23,49 @@ import { commonStyles } from '../theme'; * @param {Object} props * @param {string[]} props.ncArgs A list of method's argument. */ -export const NanoContractMethodArgs = ({ ncArgs }) => ( - +export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { + if (!ncArgs.length) { + return null; + } + + const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[blueprintId]); + const argEntries = useMemo(() => { + const _methodInfo = get(blueprintInfo?.data, `public_methods.${method}`, null); + if (_methodInfo) { + return ncArgs.map((arg, idx) => [_methodInfo.args[idx].name, arg]); + } + + return ncArgs.map((arg, idx) => [t`Position ${idx}`, arg]); + }, [blueprintInfo]); + + return ( - {t`Argument List`} - - {ncArgs.length - && ( - - - {ncArgs.map((argValue, index) => ( - - - {t`Position ${index}`} - - - {argValue} + + {t`Argument List`} + + {argEntries.length + && ( + + + {argEntries.map(([argName, argValue]) => ( + + + {argName} + + + {argValue} + - - ))} + ))} + - - )} - -); + )} + + ) +}; const styles = StyleSheet.create({ argPosition: { diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index a7923bd6e..420ced6d4 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -21,6 +21,7 @@ import { useDispatch, useSelector } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; import { t } from 'ttag'; import { + nanoContractBlueprintInfoRequest, setNewNanoContractStatusReady, tokensFetchMetadataRequest, walletConnectAccept, @@ -62,6 +63,7 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const registeredTokensMetadata = useSelector((state) => state.tokenMetadata); // Use it to add loading feedback const metadataLoaded = useSelector((state) => state.metadataLoaded); + const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[nc.blueprintId]); const [showSelectAddressModal, setShowSelectAddressModal] = useState(false); const [showDeclineModal, setShowDeclineModal] = useState(false); @@ -121,6 +123,13 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { // Do nothing if nano contract is not registered and don't call initialize method. if (notRegistered) return; + // Request blueprint info if not present to feed the components: + // - NanoContractExecInfo, and + // - NanoContractMethodArgs + if (!blueprintInfo) { + dispatch(nanoContractBlueprintInfoRequest(nc.blueprintId)); + } + // Get tokens metadata // actions can be null? const tokensUid = nc.actions?.map((each) => each.token) || []; @@ -202,7 +211,11 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { ncActions={nc.actions} tokens={registeredTokensMetadata} /> - + {/* User actions */} diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 1df1526a7..e5d23b5e7 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -357,19 +357,81 @@ const initialState = { */ historyMeta: {}, /** - * blueprintInfo {{ - * status: string; - * data?: { - * name: string; - * }; - * error?: string; - * }} + * blueprint { + * [blueprintId: string]: { + * status: string; + * data?: { + * id: string; + * name: string; + * public_methods: { + * [methodName: string]: { + * args: { + * type: string; + * name: string; + * }[]; + * }; + * }; + * }; + * error?: string; + * } + * } + * @example + * { + * '3cb032600bdf7db784800e4ea911b10676fa2f67591f82bb62628c234e771595': { + * status: 'success', + * data: { + * id: '3cb032600bdf7db784800e4ea911b10676fa2f67591f82bb62628c234e771595', + * name: 'Bet', + * public_methods: { + * bet: { + * args: [ + * { + * name: "address", + * type: "bytes" + * }, + * { + * name: "score", + * type: "str" + * } + * ], + * return_type: "null" + * }, + * initialize: { + * args: [ + * { + * name: "oracle_script", + * type: "bytes" + * }, + * { + * name: "token_uid", + * type: "bytes" + * }, + * { + * name: "date_last_bet", + * type: "int" + * } + * ], + * return_type: "null" + * }, + * set_result: { + * args: [ + * { + * name: "result", + * type: "SignedData[str]" + * } + * ], + * return_type: "null" + * }, + * withdraw: { + * args: [], + * return_type: "null" + * } + * }, + * }, + * }, + * } */ - blueprintInfo: { - status: NANOCONTRACT_BLUEPRINTINFO_STATUS.READY, - data: null, - error: null, - }, + blueprint: {}, }, /** * selectAddressModal {{ @@ -586,9 +648,9 @@ export const reducer = (state = initialState, action) => { case types.WALLETCONNECT_NEW_NANOCONTRACT_STATUS: return onSetNewNanoContractTransactionStatus(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_REQUEST: - return onNanoContractBlueprintInfoRequest(state); + return onNanoContractBlueprintInfoRequest(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_READY: - return onNanoContractBlueprintInfoReady(state); + return onNanoContractBlueprintInfoReady(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_FAILURE: return onNanoContractBlueprintInfoFailure(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS: @@ -1806,45 +1868,107 @@ export const onSetNewNanoContractTransactionStatus = (state, { payload }) => ({ }, }); -export const onNanoContractBlueprintInfoRequest = (state) => ({ +/** + * @param {Object} state + * @param {{ + * payload: { + * id: string; + * }; + * }} action + */ +export const onNanoContractBlueprintInfoRequest = (state, { payload }) => ({ ...state, nanoContract: { ...state.nanoContract, - blueprintInfo: { - ...state.nanoContract.blueprintInfo, - status: NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING, + blueprint: { + ...state.nanoContract.blueprint, + [payload.id]: { + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING, + data: null, + error: null, + }, }, }, }); +/** + * @param {Object} state + * @param {{ + * payload: { + * id: string; + * error: string; + * }; + * }} action + */ export const onNanoContractBlueprintInfoFailure = (state, { payload }) => ({ ...state, nanoContract: { ...state.nanoContract, - blueprintInfo: { - ...state.nanoContract.blueprintInfo, - status: NANOCONTRACT_BLUEPRINTINFO_STATUS.FAILED, - error: payload.error, + blueprint: { + ...state.nanoContract.blueprint, + [payload.id]: { + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.FAILED, + data: null, + error: payload.error, + }, }, }, }); +/** + * @param {Object} state + * @param {{ + * payload: { + * id: string; + * data: { + * id: string; + * name: string; + * public_methods: { + * [methodName: string]: { + * args: { + * type: string; + * name: string; + * }[]; + * }; + * }; + * }; + * }; + * }} action + */ export const onNanoContractBlueprintInfoSuccess = (state, { payload }) => ({ ...state, nanoContract: { ...state.nanoContract, - blueprintInfo: { - ...state.nanoContract.blueprintInfo, - status: NANOCONTRACT_BLUEPRINTINFO_STATUS.SUCCESSFUL, - data: payload.data, + blueprint: { + ...state.nanoContract.blueprint, + [payload.id]: { + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.SUCCESSFUL, + data: payload.data, + error: null, + }, }, }, }); -export const onNanoContractBlueprintInfoReady = (state) => ({ +/** + * @param {Object} state + * @param {{ + * payload: { + * id: string; + * }; + * }} action + */ +export const onNanoContractBlueprintInfoReady = (state, { payload }) => ({ ...state, nanoContract: { ...state.nanoContract, - blueprintInfo: initialState.nanoContract.blueprintInfo, + blueprint: { + ...state.nanoContract.blueprint, + [payload.id]: { + status: NANOCONTRACT_BLUEPRINTINFO_STATUS.READY, + data: null, + error: null, + }, + }, }, }); diff --git a/src/sagas/nanoContract.js b/src/sagas/nanoContract.js index dfbede0f5..230f43582 100644 --- a/src/sagas/nanoContract.js +++ b/src/sagas/nanoContract.js @@ -367,16 +367,16 @@ export function* requestBlueprintInfo({ payload }) { blueprintInfo = yield call([ncApi, ncApi.getBlueprintInformation], id); } catch (error) { if (error instanceof NanoRequest404Error) { - yield put(nanoContractBlueprintInfoFailure(failureMessage.blueprintInfoNotFound)); + yield put(nanoContractBlueprintInfoFailure(id, failureMessage.blueprintInfoNotFound)); } else { log.error('Error while fetching blueprint info.', error); - yield put(nanoContractBlueprintInfoFailure(failureMessage.blueprintInfoFailure)); + yield put(nanoContractBlueprintInfoFailure(id, failureMessage.blueprintInfoFailure)); } return; } log.debug(`Success fetching blueprint info. id = ${id}`); - yield put(nanoContractBlueprintInfoSuccess({ data: { name: blueprintInfo.name } })); + yield put(nanoContractBlueprintInfoSuccess(id, blueprintInfo)); } export function* saga() { From e2af7d09bd42fd6060b6afb978d3d03c7f689dfe Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 17 Jul 2024 14:59:33 +0100 Subject: [PATCH 05/31] i18n: udpate files --- locale/da/texts.po | 68 +++++++++++++++++++++---------------------- locale/pt-br/texts.po | 62 +++++++++++++++++++-------------------- locale/ru-ru/texts.po | 68 +++++++++++++++++++++---------------------- locale/texts.pot | 60 +++++++++++++++++++------------------- 4 files changed, 129 insertions(+), 129 deletions(-) diff --git a/locale/da/texts.po b/locale/da/texts.po index e2d4b1e64..303bae615 100644 --- a/locale/da/texts.po +++ b/locale/da/texts.po @@ -433,7 +433,7 @@ msgid "Enter your seed words separated by space" msgstr "Indtast dine seed-ord adskilt med mellemrum" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -953,7 +953,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -966,7 +966,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:85 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1077,21 +1077,21 @@ msgstr "Transaktion" msgid "Open" msgstr "Åben" -#: src/sagas/wallet.js:752 +#: src/sagas/wallet.js:758 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:768 +#: src/sagas/wallet.js:774 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:778 +#: src/sagas/wallet.js:784 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:794 +#: src/sagas/wallet.js:800 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1270,7 +1270,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:118 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 msgid "Blueprint Method" msgstr "" @@ -1341,54 +1341,54 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:35 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:87 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:90 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:111 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:142 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 msgid "Loading..." msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:126 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:145 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#, javascript-format +msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 -#, javascript-format -msgid "Position ${ index }" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 +msgid "Argument List" msgstr "" #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 @@ -1416,46 +1416,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Error while sending transaction." msgstr "" diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index 2655fa5dd..fa9fd24d7 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -444,7 +444,7 @@ msgid "Enter your seed words separated by space" msgstr "Digite suas palavras separadas por espaços" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -979,7 +979,7 @@ msgstr "Erro ao carregar primeiro endereço da wallet" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "Carregando" @@ -992,7 +992,7 @@ msgstr "Carregando primeiro endereço da wallet." #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:87 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "ID do Nano Contract" @@ -1104,21 +1104,21 @@ msgstr "Transação" msgid "Open" msgstr "Abrir" -#: src/sagas/wallet.js:752 +#: src/sagas/wallet.js:758 msgid "Wallet is not ready to load addresses." msgstr "A wallet não está pronta para carregar os endereços." #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:768 +#: src/sagas/wallet.js:774 msgid "There was an error while loading wallet addresses. Try again." msgstr "Ocorreu um erro ao carregar os endereços da wallet. Tente novamente." -#: src/sagas/wallet.js:778 +#: src/sagas/wallet.js:784 msgid "Wallet is not ready to load the first address." msgstr "A wallet não está pronta para carregar o primeiro endereço." #. This will show the message in the feedback content -#: src/sagas/wallet.js:794 +#: src/sagas/wallet.js:800 msgid "There was an error while loading first wallet address. Try again." msgstr "" "Ocorreu um erro ao carregar o primeiro endereço da wallet. Tente novamente." @@ -1300,7 +1300,7 @@ msgstr "ID da Transação" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:120 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 msgid "Blueprint Method" msgstr "Método do Blueprint" @@ -1395,39 +1395,39 @@ msgstr "Lista de Actions" msgid "To Address:" msgstr "Para o endereço:" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:92 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 msgid "Blueprint ID" msgstr "ID do Blueprint" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:97 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 msgid "Blueprint Name" msgstr "Nome do Blueprint" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:113 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:144 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 msgid "Loading..." msgstr "Carregando..." #: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:128 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 msgid "Caller" msgstr "Caller" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:147 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#, javascript-format +msgid "Position ${ idx }" +msgstr "Posição ${ idx }" + +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 msgid "Argument List" msgstr "List de Argumentos" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 -#, javascript-format -msgid "Position ${ index }" -msgstr "Posição ${ index }" - #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 msgid "You have received a new Nano Contract Transaction. Please" msgstr "" @@ -1455,11 +1455,11 @@ msgstr "" msgid "Read More." msgstr "Ler mais." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 msgid "Nano Contract Not Found" msgstr "Nano Contract não nncontrado" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." @@ -1467,36 +1467,36 @@ msgstr "" "O Nano Contract solicitado não está registrado. Primeiro registre o Nano " "Contract para interagir com ele." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 msgid "Decline Transaction" msgstr "Recusar transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 msgid "Loading transaction information." msgstr "Carregando informações da transação." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 msgid "Accept Transaction" msgstr "Aceitar transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 msgid "Sending transaction" msgstr "Enviando transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 msgid "Please wait." msgstr "Por favor, espere." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 msgid "Transaction successfully sent." msgstr "Transação enviada com sucesso." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 msgid "Ok, close" msgstr "Ok, fechar" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Error while sending transaction." msgstr "Ocorreu um erro durante o envio da transação." diff --git a/locale/ru-ru/texts.po b/locale/ru-ru/texts.po index 6ec21b583..9c69f456a 100644 --- a/locale/ru-ru/texts.po +++ b/locale/ru-ru/texts.po @@ -434,7 +434,7 @@ msgid "Enter your seed words separated by space" msgstr "Введите seed-фразу" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -957,7 +957,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -970,7 +970,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:85 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1081,21 +1081,21 @@ msgstr "" msgid "Open" msgstr "Открыть" -#: src/sagas/wallet.js:752 +#: src/sagas/wallet.js:758 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:768 +#: src/sagas/wallet.js:774 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:778 +#: src/sagas/wallet.js:784 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:794 +#: src/sagas/wallet.js:800 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1259,7 +1259,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:118 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 msgid "Blueprint Method" msgstr "" @@ -1330,54 +1330,54 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:35 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:87 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:90 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:95 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:111 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:142 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 msgid "Loading..." msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:126 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:145 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#, javascript-format +msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 -#, javascript-format -msgid "Position ${ index }" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 +msgid "Argument List" msgstr "" #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 @@ -1405,46 +1405,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Error while sending transaction." msgstr "" diff --git a/locale/texts.pot b/locale/texts.pot index 831847afd..e7ce434ba 100644 --- a/locale/texts.pot +++ b/locale/texts.pot @@ -422,7 +422,7 @@ msgid "Enter your seed words separated by space" msgstr "" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:250 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 #: src/screens/LoadHistoryScreen.js:51 #: src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 @@ -950,7 +950,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:175 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -963,7 +963,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:89 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:87 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1074,20 +1074,20 @@ msgstr "" msgid "Open" msgstr "" -#: src/sagas/wallet.js:752 +#: src/sagas/wallet.js:758 msgid "Wallet is not ready to load addresses." msgstr "" -#: src/sagas/wallet.js:768 +#: src/sagas/wallet.js:774 #. This will show the message in the feedback content at SelectAddressModal msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:778 +#: src/sagas/wallet.js:784 msgid "Wallet is not ready to load the first address." msgstr "" -#: src/sagas/wallet.js:794 +#: src/sagas/wallet.js:800 #. This will show the message in the feedback content msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:93 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:120 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 msgid "Blueprint Method" msgstr "" @@ -1340,37 +1340,37 @@ msgstr "" msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:92 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:97 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:113 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:144 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 msgid "Loading..." msgstr "" #: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:128 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:147 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:27 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#, javascript-format +msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:36 -#, javascript-format -msgid "Position ${ index }" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 +msgid "Argument List" msgstr "" #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 @@ -1397,46 +1397,46 @@ msgstr "" msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:157 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:158 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:161 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:176 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:199 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:213 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:214 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:240 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:242 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:248 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Error while sending transaction." msgstr "" From 12e4539d85afdc2d61a2e99813a516414e5cf9cc Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 17 Jul 2024 22:10:45 +0100 Subject: [PATCH 06/31] i18n: update translations and fix some typos --- locale/pt-br/texts.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index fa9fd24d7..934ef8325 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -1417,7 +1417,7 @@ msgstr "Caller" #: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 msgid "Couldn't determine address, select one" -msgstr "" +msgstr "Não foi possível determinar um endereço, selecione um" #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 #, javascript-format @@ -1426,7 +1426,7 @@ msgstr "Posição ${ idx }" #: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 msgid "Argument List" -msgstr "List de Argumentos" +msgstr "Lista de Argumentos" #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 msgid "You have received a new Nano Contract Transaction. Please" @@ -1457,7 +1457,7 @@ msgstr "Ler mais." #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 msgid "Nano Contract Not Found" -msgstr "Nano Contract não nncontrado" +msgstr "Nano Contract não encontrado" #: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 msgid "" From 5c968a25a4f16a4cbaa2c609a93a8659ffcaff15 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 8 Aug 2024 23:27:07 +0100 Subject: [PATCH 07/31] review: apply suggestions and do some fixes --- locale/pt-br/texts.po | 2 +- src/actions.js | 4 +-- src/components/HathorFlatList.js | 10 +++++-- .../NanoContractTransactionHeader.js | 1 - .../NanoContract/DappContainer.js | 2 +- .../NanoContract/NanoContractExecInfo.js | 6 +++-- .../NanoContract/NanoContractMethodArgs.js | 2 ++ .../NewNanoContractTransactionModal.js | 26 +++++-------------- .../NewNanoContractTransactionRequest.js | 13 +++++----- src/sagas/wallet.js | 10 +++---- src/sagas/walletConnect.js | 1 + 11 files changed, 37 insertions(+), 40 deletions(-) diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index 934ef8325..52a32edde 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -1367,7 +1367,7 @@ msgstr "Recusar transação" #: src/components/WalletConnect/NanoContract/DeclineModal.js:29 msgid "Are you sure you want to decline this transaction?" -msgstr "Está certo de recursar esta transação?" +msgstr "Tem certeza que deseja recursar esta transação?" #: src/components/WalletConnect/NanoContract/DeclineModal.js:33 msgid "Yes, decline transaction" diff --git a/src/actions.js b/src/actions.js index 2e4e6631c..44777305d 100644 --- a/src/actions.js +++ b/src/actions.js @@ -258,7 +258,7 @@ export const walletConnectAccept = (data) => ({ payload: data, }); -export const walletWalletReject = () => ({ +export const walletConnectReject = () => ({ type: types.WALLET_CONNECT_REJECT, }); @@ -1246,7 +1246,7 @@ export const firstAddressFailure = (failurePayload) => ({ }); /** - * Request the downalod of token metadata for a list of tokens. + * Request the download of token metadata for a list of tokens. * @param {string[]} tokens A list of token uid */ export const tokensFetchMetadataRequest = (tokens) => ({ diff --git a/src/components/HathorFlatList.js b/src/components/HathorFlatList.js index f33445491..2d7cf5aac 100644 --- a/src/components/HathorFlatList.js +++ b/src/components/HathorFlatList.js @@ -5,14 +5,20 @@ * LICENSE file in the root directory of this source tree. */ +/* eslint no-unused-vars: ["warn", { "varsIgnorePattern": "Props" }] -- + * Properties like `FlatListProps` are not counted as used, + * however they are important for coding completion during development. + */ + import React from 'react'; import { - FlatList, StyleSheet, View, + FlatList, StyleSheet, View, FlatListProps } from 'react-native'; import { COLORS } from '../styles/themes'; /** - * param {FlatListProps} props + * @param {FlatListProps} props + * @param {Object} props.wrapperStyle A custom style object used to control the wrapper component. */ export const HathorFlatList = (props) => ( diff --git a/src/components/NanoContract/NanoContractTransactionHeader.js b/src/components/NanoContract/NanoContractTransactionHeader.js index dfb31fedb..b2302e93a 100644 --- a/src/components/NanoContract/NanoContractTransactionHeader.js +++ b/src/components/NanoContract/NanoContractTransactionHeader.js @@ -20,7 +20,6 @@ import { COLORS } from '../../styles/themes'; import { combineURLs, getShortContent, getShortHash, getTimestampFormat } from '../../utils'; import SimpleButton from '../SimpleButton'; import { ArrowDownIcon } from '../Icons/ArrowDown.icon'; -import { ArrowUpIcon } from '../Icons/ArrowUp.icon'; import { TextValue } from '../TextValue'; import { TextLabel } from '../TextLabel'; import { TransactionStatusLabel } from '../TransactionStatusLabel'; diff --git a/src/components/WalletConnect/NanoContract/DappContainer.js b/src/components/WalletConnect/NanoContract/DappContainer.js index e3b6ebf11..7e46f6828 100644 --- a/src/components/WalletConnect/NanoContract/DappContainer.js +++ b/src/components/WalletConnect/NanoContract/DappContainer.js @@ -34,7 +34,7 @@ export const DappContainer = ({ dapp }) => ( {dapp.proposer} - {'• '}{'mainnet'} + {'• '}{dapp.chain} diff --git a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js index 471fb7c4c..c06577d27 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js +++ b/src/components/WalletConnect/NanoContract/NanoContractExecInfo.js @@ -61,8 +61,10 @@ export const NanoContractExecInfo = ({ nc, onSelectAddress }) => { } }, []); - const isBlueprintInfoLoading = blueprintInfo?.status === STATUS.LOADING; - const hasBlueprintInfoFailed = blueprintInfo?.status === STATUS.FAILED; + const isBlueprintInfoLoading = !registeredNc + && blueprintInfo?.status === STATUS.LOADING; + const hasBlueprintInfoFailed = !registeredNc + && blueprintInfo?.status === STATUS.FAILED; const hasCaller = nc.caller != null; const hasFirstAddressFailed = !hasCaller && isInitialize && firstAddress.error; diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 9cf719bf8..60424c621 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -21,6 +21,8 @@ import { commonStyles } from '../theme'; * It renders a list of method arguments for when the Nano Contract executes. * * @param {Object} props + * @param {string} props.blueprintId ID of blueprint. + * @param {string} props.method Method's name. * @param {string[]} props.ncArgs A list of method's argument. */ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js index e26e7661b..204026dc7 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js @@ -10,6 +10,7 @@ import { StyleSheet, View, Text, + Linking, } from 'react-native'; import { t } from 'ttag'; import { useNavigation } from '@react-navigation/native'; @@ -18,7 +19,7 @@ import { COLORS } from '../../../styles/themes'; import { CircleInfoIcon } from '../../Icons/CircleInfo.icon'; import { ModalBase } from '../../ModalBase'; import SimpleButton from '../../SimpleButton'; -import { setNewNanoContractTransaction, walletWalletReject } from '../../../actions'; +import { setNewNanoContractTransaction, walletConnectReject } from '../../../actions'; import { WALLET_STATUS } from '../../../sagas/wallet'; import { NANO_CONTRACT_INFO_URL } from '../../../constants'; @@ -49,7 +50,7 @@ export const NewNanoContractTransactionModal = () => { }); const onDismiss = () => { - dispatch(walletWalletReject()); + dispatch(walletConnectReject()); dispatch(setNewNanoContractTransaction({ show: false, data: null })); }; @@ -58,8 +59,9 @@ export const NewNanoContractTransactionModal = () => { navigation.navigate('NewNanoContractTransactionScreen', { ncTxRequest }); }; - // XXX: Make it navigates to readMoreUrl - const onReadMore = () => {}; + const onReadMore = () => { + Linking.openURL(readMoreUrl) + }; return ( @@ -108,19 +110,9 @@ const WarnDisclaimer = ({ onReadMore }) => ( ); const styles = StyleSheet.create({ - pd0: { - paddingBottom: 0, - }, - pd8: { - paddingBottom: 8, - }, body: { paddingBottom: 24, }, - fieldContainer: { - width: '100%', - paddingBottom: 4, - }, text: { fontSize: 14, lineHeight: 20, @@ -150,12 +142,6 @@ const styles = StyleSheet.create({ fontSize: 12, lineHeight: 16, }, - selectionContainer: { - borderRadius: 8, - paddingVertical: 8, - paddingHorizontal: 16, - backgroundColor: COLORS.freeze100, - }, learnMoreWrapper: { display: 'inline-block', /* We are using negative margin here to correct the text position diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 420ced6d4..5d23e9548 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -25,7 +25,7 @@ import { setNewNanoContractStatusReady, tokensFetchMetadataRequest, walletConnectAccept, - walletWalletReject + walletConnectReject } from '../../../actions'; import { COLORS } from '../../../styles/themes'; import NewHathorButton from '../../NewHathorButton'; @@ -46,6 +46,11 @@ import { DeclineModal } from './DeclineModal'; * @param {Object} props * @param {Object} props.ncTxRequest * @param {Object} props.ncTxRequest.nc + * @param {string} props.ncTxRequest.nc.ncId + * @param {string} props.ncTxRequest.nc.blueprintId + * @param {Object[]} props.ncTxRequest.nc.actions + * @param {string} props.ncTxRequest.nc.method + * @param {string[]} props.ncTxRequest.nc.args * @param {Object} props.ncTxRequest.dapp * @param {string} props.ncTxRequest.dapp.icon * @param {string} props.ncTxRequest.dapp.proposer @@ -69,14 +74,12 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const [showDeclineModal, setShowDeclineModal] = useState(false); // If nano-contract's method is 'initialize' then the expression // should be resolved to firstAddress value by default. - // However, the wallet can have trouble to const [ncAddress, setNcAddress] = useState(registeredNc?.address || firstAddress.address); const ncToAccept = useMemo(() => ({ ...nc, caller: ncAddress, }), [ncAddress]) - // Controle SelectAddressModal const toggleSelectAddressModal = () => setShowSelectAddressModal(!showSelectAddressModal); const handleAddressSelection = (newAddress) => { setNcAddress(newAddress); @@ -96,9 +99,8 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { }; const onDeclineConfirmation = () => { setShowDeclineModal(false); - dispatch(walletWalletReject()); + dispatch(walletConnectReject()); navigation.goBack(); - // TODO: It is not being dimissed automatically }; const onDismissDeclineModal = () => { setShowDeclineModal(false); @@ -131,7 +133,6 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { } // Get tokens metadata - // actions can be null? const tokensUid = nc.actions?.map((each) => each.token) || []; const tokensMetadataToDownload = []; diff --git a/src/sagas/wallet.js b/src/sagas/wallet.js index 68495baef..4a6371d4a 100644 --- a/src/sagas/wallet.js +++ b/src/sagas/wallet.js @@ -124,7 +124,7 @@ export function* isWalletServiceEnabled() { const delta = now - shouldIgnoreFlagTs; if (delta < EXPIRE_WS_IGNORE_FLAG) { - console.log(`Still ignoring wallet-service, will expire in ${EXPIRE_WS_IGNORE_FLAG - delta}ms`); + log.log(`Still ignoring wallet-service, will expire in ${EXPIRE_WS_IGNORE_FLAG - delta}ms`); return false; } } else { @@ -271,7 +271,7 @@ export function* startWallet(action) { try { yield call(loadTokens); } catch (e) { - console.error('Tokens load failed: ', e); + log.error('Tokens load failed: ', e); yield put(onExceptionCaptured(e, false)); yield put(startWalletFailed()); return; @@ -390,7 +390,7 @@ export function* fetchTokensMetadata(tokens) { const tokenMetadatas = {}; for (const response of responses) { if (response.type === types.TOKEN_FETCH_METADATA_FAILED) { - log(`Error downloading metadata of token ${response.tokenId}.`); + log.log(`Error downloading metadata of token ${response.tokenId}.`); } else if (response.type === types.TOKEN_FETCH_METADATA_SUCCESS) { // When the request returns null, it means that we have no metadata for this token if (response.data) { @@ -403,7 +403,7 @@ export function* fetchTokensMetadata(tokens) { } export function* onWalletServiceDisabled() { - console.debug('We are currently in the wallet-service and the feature-flag is disabled, reloading.'); + log.debug('We are currently in the wallet-service and the feature-flag is disabled, reloading.'); yield put(reloadWalletRequested()); } @@ -698,7 +698,7 @@ export function* onWalletReloadData() { // Finally, set the wallet to READY by dispatching startWalletSuccess yield put(startWalletSuccess()); } catch (e) { - console.log('Wallet reload data failed: ', e); + log.error('Wallet reload data failed: ', e); yield put(onExceptionCaptured(e, false)); yield put(startWalletFailed()); } diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index ea897affa..338798f62 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -243,6 +243,7 @@ export function* onSessionRequest(action) { proposer: get(requestSession.peer, 'metadata.name', ''), url: get(requestSession.peer, 'metadata.url', ''), description: get(requestSession.peer, 'metadata.description', ''), + chain: get(requestSession.namespaces, 'hathor.chains[0]', ''), }; switch (params.request.method) { From 30f55d97a8baaeae0570e6c44cd84e8b322201d9 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Fri, 9 Aug 2024 22:55:26 +0100 Subject: [PATCH 08/31] refactor: load of token details not refistered but used in actions --- src/actions.js | 23 ++++++++ .../NanoContract/NanoContractActions.js | 16 +++++- .../NewNanoContractTransactionRequest.js | 53 ++++++++++--------- src/components/WalletConnect/theme.js | 3 ++ src/reducers/reducer.js | 52 ++++++++++++++++++ src/sagas/wallet.js | 1 - src/sagas/walletConnect.js | 47 ++++++++++++++++ 7 files changed, 167 insertions(+), 28 deletions(-) diff --git a/src/actions.js b/src/actions.js index 44777305d..d486b7ef5 100644 --- a/src/actions.js +++ b/src/actions.js @@ -190,6 +190,8 @@ export const types = { FIRSTADDRESS_FAILURE: 'FIRSTADDRESS_FAILURE', /* It updates the redux state of new nano contract transaction status on wallet connect register. */ WALLETCONNECT_NEW_NANOCONTRACT_STATUS: 'WALLETCONNECT_NEW_NANOCONTRACT_STATUS', + WALLETCONNECT_TOKENS_REQUEST: 'WALLETCONNECT_TOKENS_REQUEST', + WALLETCONNECT_TOKENS_UPDATE: 'WALLETCONNECT_TOKENS_UPDATE', }; export const featureToggleInitialized = () => ({ @@ -1334,3 +1336,24 @@ export const nanoContractBlueprintInfoReady = (id) => ({ type: types.NANOCONTRACT_BLUEPRINTINFO_READY, payload: { id }, }); + +/** + * Signals a request to load a collection of token data by a collection of token UID. + * @param {Object} payload + * @param {string[]} payload.uids A list of token UID. + */ +export const walletConnectTokensRequest = (payload) => ({ + type: types.WALLETCONNECT_TOKENS_REQUEST, + payload, +}); + +/** + * Signals an update to wallet connect's tokens state. + * @param {Object} payload + * @param {Object} payload.tokens A map of token data by its UID. + * @param {string} payload.error The error message as feedback to user + */ +export const walletConnectTokensUpdate = (payload) => ({ + type: types.WALLETCONNECT_TOKENS_UPDATE, + payload, +}); diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js index 0d3e79bf6..6826b7e5c 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractActions.js +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -17,8 +17,10 @@ import { commonStyles } from '../theme'; import { getShortHash, renderValue } from '../../../utils'; import { ReceivedIcon } from '../../Icons/Received.icon'; import { SentIcon } from '../../Icons/Sent.icon'; -import { COLORS } from '../../../styles/themes'; +import { AlertUI, COLORS } from '../../../styles/themes'; import { DEFAULT_TOKEN } from '../../../constants'; +import { WarnTextValue } from '../../WarnTextValue'; +import { CircleError } from '../../Icons/CircleError.icon'; /** * It returns the title template for each action type, @@ -67,8 +69,9 @@ const getActionTitle = (tokens, action) => { * @param {Object} props * @param {Object[]} props.ncActions A list of Nano Contract actions. * @param {Object} props.tokens A map of token metadata by token uid. + * @param {string} props.error A feedback error for tokens not loaded. */ -export const NanoContractActions = ({ ncActions, tokens }) => { +export const NanoContractActions = ({ ncActions, tokens, error }) => { if (!ncActions || ncActions.length < 1) { return null; } @@ -105,6 +108,15 @@ export const NanoContractActions = ({ ncActions, tokens }) => { )} + // If has error, shows the feedback error message in the list header. + ListHeaderComponent={error && ( + + + + {error} + + + )} /> ); diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 5d23e9548..83e4698ea 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -23,9 +23,9 @@ import { t } from 'ttag'; import { nanoContractBlueprintInfoRequest, setNewNanoContractStatusReady, - tokensFetchMetadataRequest, walletConnectAccept, - walletConnectReject + walletConnectReject, + walletConnectTokensRequest } from '../../../actions'; import { COLORS } from '../../../styles/themes'; import NewHathorButton from '../../NewHathorButton'; @@ -65,15 +65,19 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const firstAddress = useSelector((state) => state.firstAddress); // Nullable if the nano contract method is 'initialize' const registeredNc = useSelector((state) => state.nanoContract.registered[nc.ncId]); - const registeredTokensMetadata = useSelector((state) => state.tokenMetadata); - // Use it to add loading feedback - const metadataLoaded = useSelector((state) => state.metadataLoaded); + const knownTokens = useSelector((state) => ({ ...state.tokens, ...state.walletConnect.tokens })); const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[nc.blueprintId]); const [showSelectAddressModal, setShowSelectAddressModal] = useState(false); const [showDeclineModal, setShowDeclineModal] = useState(false); - // If nano-contract's method is 'initialize' then the expression - // should be resolved to firstAddress value by default. + /** + * If nano-contract's method is 'initialize' then the expression + * should be resolved to firstAddress value by default. + * + * In case of failure to load the first address the user will see + * a feedback message instruction it to select an address for the + * transaction. + */ const [ncAddress, setNcAddress] = useState(registeredNc?.address || firstAddress.address); const ncToAccept = useMemo(() => ({ ...nc, @@ -110,8 +114,10 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { // a feedback content should tell user the nano contract must be registered first // and only let user decline the transaction to get out the page, otherwise interaction // content is showed. - const notRegistered = ncToAccept.method !== 'initialize' && registeredNc == null; - const isRegistered = !notRegistered; + const notInitialize = ncToAccept.method !== 'initialize'; + const notRegistered = notInitialize && registeredNc == null; + // It results in true for registered nc and initialize request + const showRequest = !notRegistered; // This effect should run only once because firstAddress is kept on state when loaded useEffect(() => { @@ -132,19 +138,15 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { dispatch(nanoContractBlueprintInfoRequest(nc.blueprintId)); } - // Get tokens metadata - const tokensUid = nc.actions?.map((each) => each.token) || []; - const tokensMetadataToDownload = []; - - tokensUid.forEach((uid) => { - if (uid !== DEFAULT_TOKEN.uid && !(uid in registeredTokensMetadata)) { - tokensMetadataToDownload.push(uid); + // Request token data for each unknown token present in actions + const unknownTokensUid = []; + const actionTokensUid = nc.actions?.map((each) => each.token) || []; + actionTokensUid.forEach((uid) => { + if (uid !== DEFAULT_TOKEN.uid && !(uid in knownTokens)) { + unknownTokensUid.push(uid); } }); - - if (tokensMetadataToDownload.length) { - dispatch(tokensFetchMetadataRequest(tokensMetadataToDownload)); - } + dispatch(walletConnectTokensRequest({ uids: unknownTokensUid })); }, []); const onFeedbackModalDismiss = () => { @@ -161,12 +163,12 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { dispatch(setNewNanoContractStatusReady()); }; - const isTxInfoLoading = () => !metadataLoaded; + const isTxInfoLoading = () => knownTokens.isLoading; const isTxInfoLoaded = () => ( - metadataLoaded && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + !knownTokens.isLoading && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); const isTxProcessing = () => ( - metadataLoaded && newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + !knownTokens.isLoading && newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); const isTxSuccessful = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.SUCCESSFUL; const isTxFailed = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.FAILED; @@ -187,7 +189,7 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { )} /> )} - {isRegistered && ( + {showRequest && ( @@ -210,7 +212,8 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { /> { return onNanoContractBlueprintInfoFailure(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS: return onNanoContractBlueprintInfoSuccess(state, action); + case types.WALLETCONNECT_TOKENS_REQUEST: + return onWalletConnectTokensRequest(state); + case types.WALLETCONNECT_TOKENS_UPDATE: + return onWalletConnectTokensUpdate(state, action); default: return state; } @@ -1972,3 +1985,42 @@ export const onNanoContractBlueprintInfoReady = (state, { payload }) => ({ }, }, }); + +/** + * Remarks + * This reducer aims to clean error feedback message before processing the request. + */ +export const onWalletConnectTokensRequest = (state) => ({ + ...state, + walletConnect: { + ...state.walletConnect, + tokens: { + ...state.walletConnect.tokens, + isLoading: true, + error: null, + }, + }, +}); + +/** + * Update walletConnect.tokens with some tokens data needed to feed UI components + * without the need to register them, also update an error feedback message if present. + * + * @param {Object} state + * @param {Object} action + * @param {Object} action.payload + * @param {Object} action.payload.tokens A map of token data by its UID. + * @param {string} action.payload.error The error message as feedback to user + */ +export const onWalletConnectTokensUpdate = (state, { payload }) => ({ + ...state, + walletConnect: { + ...state.walletConnect, + tokens: { + ...state.walletConnect.tokens, + ...payload.tokens, + isLoading: false, + error: payload.error || null, + }, + }, +}) diff --git a/src/sagas/wallet.js b/src/sagas/wallet.js index 4a6371d4a..a5422aef9 100644 --- a/src/sagas/wallet.js +++ b/src/sagas/wallet.js @@ -365,7 +365,6 @@ export function* fetchTokensMetadataRequest(action) { export function* fetchTokensMetadata(tokens) { // No tokens to load, set metadata as loaded if (!tokens.length) { - yield put(tokenMetadataUpdated({})); return; } diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 338798f62..52d5d3ef4 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -59,6 +59,7 @@ import { select, race, } from 'redux-saga/effects'; +import { t } from 'ttag'; import { eventChannel } from 'redux-saga'; import { get, values } from 'lodash'; @@ -74,6 +75,7 @@ import { setWalletConnectSessions, onExceptionCaptured, setWCConnectionFailed, + walletConnectTokensUpdate, } from '../actions'; import { checkForFeatureFlag, getNetworkSettings, showPinScreenForResult } from './helpers'; @@ -100,6 +102,11 @@ const ERROR_CODES = { const Core = class {}; const Web3Wallet = class {}; +const failureMessage = { + walletNotReadyError: t`Wallet is not ready yet to process a Wallet Connect effect.`, + someTokensNotLoaded: t`Some token details couldn't have been loaded.`, +}; + function* isWalletConnectEnabled() { const walletConnectEnabled = yield call(checkForFeatureFlag, WALLET_CONNECT_FEATURE_TOGGLE); @@ -517,6 +524,45 @@ export function* onSessionDelete(action) { yield call(onCancelSession, action); } +/** + * Request tokens data to feed walletConnect's tokens. + * @param {Object} action + * @param {Object} action.payload + * @param {string[]} action.payload.uids + */ +export function* requestTokens(action) { + const { uids } = action.payload; + + const wallet = yield select((state) => state.wallet); + if (!wallet.isReady()) { + log.error('Fail updating loading tokens data because wallet is not ready yet.'); + // This will show user an error modal with the option to send the error to sentry. + yield put(onExceptionCaptured(new Error(failureMessage.walletNotReadyError), true)); + return; + } + + const tokens = {}; + let someError = false; + for (const uid of uids) { + try { + const { tokenInfo: { symbol, name } } = yield call([wallet, wallet.getTokenDetails], uid); + const token = { uid, symbol, name }; + tokens[uid] = token; + } catch (e) { + log.error(`Fail getting token data for token ${uid}.`, e); + someError = true; + // continue + } + } + + if (someError) { + log.log('There was a failure while getting tokens data to feed walletConnect.tokens.'); + return yield put(walletConnectTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded })); + } + log.log('Success getting tokens data to feed walletConnect.tokens.'); + return yield put(walletConnectTokensUpdate({ tokens })); +} + export function* saga() { yield all([ fork(featureToggleUpdateListener), @@ -528,5 +574,6 @@ export function* saga() { takeEvery('WC_SHUTDOWN', clearSessions), takeEvery(types.RESET_WALLET, onWalletReset), takeLatest(types.WC_URI_INPUTTED, onUriInputted), + takeEvery(types.WALLETCONNECT_TOKENS_REQUEST, requestTokens), ]); } From 15c0a784c13de8a12182a86a579225e63b67ecc0 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Fri, 9 Aug 2024 23:13:20 +0100 Subject: [PATCH 09/31] lint: comply with rules --- src/sagas/walletConnect.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 52d5d3ef4..78baf801b 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -77,8 +77,11 @@ import { setWCConnectionFailed, walletConnectTokensUpdate, } from '../actions'; +import { logger } from '../logger'; import { checkForFeatureFlag, getNetworkSettings, showPinScreenForResult } from './helpers'; +const log = logger('wallet-connect'); + const AVAILABLE_METHODS = { HATHOR_SIGN_MESSAGE: 'hathor_signMessage', }; @@ -557,10 +560,13 @@ export function* requestTokens(action) { if (someError) { log.log('There was a failure while getting tokens data to feed walletConnect.tokens.'); - return yield put(walletConnectTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded })); + yield put( + walletConnectTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded }) + ); + return; } log.log('Success getting tokens data to feed walletConnect.tokens.'); - return yield put(walletConnectTokensUpdate({ tokens })); + yield put(walletConnectTokensUpdate({ tokens })); } export function* saga() { From 24de5421cdcaf523c1f39f22bb365739cddda5ee Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 17:16:42 +0100 Subject: [PATCH 10/31] chore: remove unused action --- src/actions.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/actions.js b/src/actions.js index d486b7ef5..94b72139e 100644 --- a/src/actions.js +++ b/src/actions.js @@ -1247,15 +1247,6 @@ export const firstAddressFailure = (failurePayload) => ({ payload: failurePayload, }); -/** - * Request the download of token metadata for a list of tokens. - * @param {string[]} tokens A list of token uid - */ -export const tokensFetchMetadataRequest = (tokens) => ({ - type: types.TOKENS_FETCH_METADATA_REQUESTED, - tokens -}); - /** * Signals update on new nano contract status to ready. */ From 2f9418ebc9073bcf44bd378c50eba57d5fb2b6b6 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 17:17:22 +0100 Subject: [PATCH 11/31] chore: add undeclared style --- .../NanoContract/NewNanoContractTransactionRequest.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 83e4698ea..c2fc6723e 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -314,4 +314,8 @@ const styles = StyleSheet.create({ lineHeight: 20, textAlign: 'center', }, + feedbackModalIcon: { + height: 105, + width: 105 + }, }); From 86f5f27688d915399a2a0d15bc7a656c913cdbff Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 19:15:56 +0100 Subject: [PATCH 12/31] refactor: walletConnect.tokens to unregisteredTokens --- src/actions.js | 14 ++-- .../NewNanoContractTransactionRequest.js | 6 +- src/reducers/reducer.js | 65 ++++++++++--------- src/sagas/walletConnect.js | 12 ++-- 4 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/actions.js b/src/actions.js index 94b72139e..7f3d5377c 100644 --- a/src/actions.js +++ b/src/actions.js @@ -190,8 +190,8 @@ export const types = { FIRSTADDRESS_FAILURE: 'FIRSTADDRESS_FAILURE', /* It updates the redux state of new nano contract transaction status on wallet connect register. */ WALLETCONNECT_NEW_NANOCONTRACT_STATUS: 'WALLETCONNECT_NEW_NANOCONTRACT_STATUS', - WALLETCONNECT_TOKENS_REQUEST: 'WALLETCONNECT_TOKENS_REQUEST', - WALLETCONNECT_TOKENS_UPDATE: 'WALLETCONNECT_TOKENS_UPDATE', + UNREGISTEREDTOKENS_REQUEST: 'UNREGISTEREDTOKENS_REQUEST', + UNREGISTEREDTOKENS_UPDATE: 'UNREGISTEREDTOKENS_UPDATE', }; export const featureToggleInitialized = () => ({ @@ -1333,18 +1333,18 @@ export const nanoContractBlueprintInfoReady = (id) => ({ * @param {Object} payload * @param {string[]} payload.uids A list of token UID. */ -export const walletConnectTokensRequest = (payload) => ({ - type: types.WALLETCONNECT_TOKENS_REQUEST, +export const unregisteredTokensRequest = (payload) => ({ + type: types.UNREGISTEREDTOKENS_REQUEST, payload, }); /** - * Signals an update to wallet connect's tokens state. + * Signals an update to unregistered tokens state. * @param {Object} payload * @param {Object} payload.tokens A map of token data by its UID. * @param {string} payload.error The error message as feedback to user */ -export const walletConnectTokensUpdate = (payload) => ({ - type: types.WALLETCONNECT_TOKENS_UPDATE, +export const unregisteredTokensUpdate = (payload) => ({ + type: types.UNREGISTEREDTOKENS_UPDATE, payload, }); diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index c2fc6723e..37b86860d 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -25,7 +25,7 @@ import { setNewNanoContractStatusReady, walletConnectAccept, walletConnectReject, - walletConnectTokensRequest + unregisteredTokensRequest } from '../../../actions'; import { COLORS } from '../../../styles/themes'; import NewHathorButton from '../../NewHathorButton'; @@ -65,7 +65,7 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const firstAddress = useSelector((state) => state.firstAddress); // Nullable if the nano contract method is 'initialize' const registeredNc = useSelector((state) => state.nanoContract.registered[nc.ncId]); - const knownTokens = useSelector((state) => ({ ...state.tokens, ...state.walletConnect.tokens })); + const knownTokens = useSelector((state) => ({ ...state.tokens, ...state.unregisteredTokens })); const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[nc.blueprintId]); const [showSelectAddressModal, setShowSelectAddressModal] = useState(false); @@ -146,7 +146,7 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { unknownTokensUid.push(uid); } }); - dispatch(walletConnectTokensRequest({ uids: unknownTokensUid })); + dispatch(unregisteredTokensRequest({ uids: unknownTokensUid })); }, []); const onFeedbackModalDismiss = () => { diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 8171adc06..0ef9feedb 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -99,6 +99,26 @@ const initialState = { * @see {@link INITIAL_TOKENS} */ tokens: INITIAL_TOKENS, + /** + * Remarks + * We use the map of tokens to collect token details for tokens + * used in actions but not registered by the user. + * + * @example + * { + * '000003a3b261e142d3dfd84970d3a50a93b5bc3a66a3b6ba973956148a3eb824': { + * name: 'YanCoin', + * symbol: 'YAN', + * uid: '000003a3b261e142d3dfd84970d3a50a93b5bc3a66a3b6ba973956148a3eb824', + * }, + * isLoading: false, + * error: null, + * } + */ + unregisteredTokens: { + isLoading: false, + error: null, + }, /** * selectedToken {{ * uid: string; @@ -265,15 +285,6 @@ const initialState = { showModal: false, data: null, }, - /** - * Remarks - * We use the map of tokens to collect token details for tokens - * used in actions but not registered by the user. - */ - tokens: { - isLoading: false, - error: null, - }, connectionFailed: false, sessions: {}, }, @@ -664,10 +675,10 @@ export const reducer = (state = initialState, action) => { return onNanoContractBlueprintInfoFailure(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS: return onNanoContractBlueprintInfoSuccess(state, action); - case types.WALLETCONNECT_TOKENS_REQUEST: - return onWalletConnectTokensRequest(state); - case types.WALLETCONNECT_TOKENS_UPDATE: - return onWalletConnectTokensUpdate(state, action); + case types.UNREGISTEREDTOKENS_REQUEST: + return onUnregisteredTokensRequest(state); + case types.UNREGISTEREDTOKENS_UPDATE: + return onUnregisteredTokensUpdate(state, action); default: return state; } @@ -1990,15 +2001,12 @@ export const onNanoContractBlueprintInfoReady = (state, { payload }) => ({ * Remarks * This reducer aims to clean error feedback message before processing the request. */ -export const onWalletConnectTokensRequest = (state) => ({ +export const onUnregisteredTokensRequest = (state) => ({ ...state, - walletConnect: { - ...state.walletConnect, - tokens: { - ...state.walletConnect.tokens, - isLoading: true, - error: null, - }, + unregisteredTokens: { + ...state.unregisteredTokens, + isLoading: true, + error: null, }, }); @@ -2012,15 +2020,12 @@ export const onWalletConnectTokensRequest = (state) => ({ * @param {Object} action.payload.tokens A map of token data by its UID. * @param {string} action.payload.error The error message as feedback to user */ -export const onWalletConnectTokensUpdate = (state, { payload }) => ({ +export const onUnregisteredTokensUpdate = (state, { payload }) => ({ ...state, - walletConnect: { - ...state.walletConnect, - tokens: { - ...state.walletConnect.tokens, - ...payload.tokens, - isLoading: false, - error: payload.error || null, - }, + unregisteredTokens: { + ...state.unregisteredTokens, + ...payload.tokens, + isLoading: false, + error: payload.error || null, }, }) diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 78baf801b..7ea7565e0 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -75,7 +75,7 @@ import { setWalletConnectSessions, onExceptionCaptured, setWCConnectionFailed, - walletConnectTokensUpdate, + unregisteredTokensUpdate, } from '../actions'; import { logger } from '../logger'; import { checkForFeatureFlag, getNetworkSettings, showPinScreenForResult } from './helpers'; @@ -559,14 +559,14 @@ export function* requestTokens(action) { } if (someError) { - log.log('There was a failure while getting tokens data to feed walletConnect.tokens.'); + log.log('There was a failure while getting tokens data to feed unregisteredTokens.'); yield put( - walletConnectTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded }) + unregisteredTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded }) ); return; } - log.log('Success getting tokens data to feed walletConnect.tokens.'); - yield put(walletConnectTokensUpdate({ tokens })); + log.log('Success getting tokens data to feed unregisteredTokens.'); + yield put(unregisteredTokensUpdate({ tokens })); } export function* saga() { @@ -580,6 +580,6 @@ export function* saga() { takeEvery('WC_SHUTDOWN', clearSessions), takeEvery(types.RESET_WALLET, onWalletReset), takeLatest(types.WC_URI_INPUTTED, onUriInputted), - takeEvery(types.WALLETCONNECT_TOKENS_REQUEST, requestTokens), + takeEvery(types.UNREGISTEREDTOKENS_REQUEST, requestTokens), ]); } From 970b501f1606c59ca5defc7d3237f5581591787d Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 20:06:21 +0100 Subject: [PATCH 13/31] chore: remove unused actions, reducer and saga effect --- src/actions.js | 2 -- src/reducers/reducer.js | 10 ---------- src/sagas/wallet.js | 9 --------- 3 files changed, 21 deletions(-) diff --git a/src/actions.js b/src/actions.js index 7f3d5377c..a25d49a82 100644 --- a/src/actions.js +++ b/src/actions.js @@ -57,8 +57,6 @@ export const types = { TOKEN_METADATA_LOADED: 'TOKEN_METADATA_LOADED', SET_UNIQUE_DEVICE_ID: 'SET_UNIQUE_DEVICE_ID', SET_IS_SHOWING_PIN_SCREEN: 'SET_IS_SHOWING_PIN_SCREEN', - /* It initiates download of tokens metadata. */ - TOKENS_FETCH_METADATA_REQUESTED: 'TOKENS_FETCH_METADATA_REQUESTED', TOKEN_FETCH_METADATA_REQUESTED: 'TOKEN_FETCH_METADATA_REQUESTED', TOKEN_FETCH_METADATA_SUCCESS: 'TOKEN_FETCH_METADATA_SUCCESS', TOKEN_FETCH_METADATA_FAILED: 'TOKEN_FETCH_METADATA_FAILED', diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index 0ef9feedb..f8ef3abaa 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -517,8 +517,6 @@ export const reducer = (state = initialState, action) => { return onUpdateLoadedData(state, action); case types.SET_USE_WALLET_SERVICE: return onSetUseWalletService(state, action); - case types.TOKENS_FETCH_METADATA_REQUESTED: - return onTokensFetchMetadataRequested(state); case types.TOKEN_METADATA_UPDATED: return onTokenMetadataUpdated(state, action); case types.TOKEN_METADATA_REMOVED: @@ -921,14 +919,6 @@ const onTokenMetadataLoaded = (state, action) => ({ metadataLoaded: action.payload, }); -/** - * Update token metadata status to false, meaning it is loading. - */ -const onTokensFetchMetadataRequested = (state) => ({ - ...state, - metadataLoaded: false, -}); - /** * Update token metadata */ diff --git a/src/sagas/wallet.js b/src/sagas/wallet.js index a5422aef9..1a61d74f6 100644 --- a/src/sagas/wallet.js +++ b/src/sagas/wallet.js @@ -350,14 +350,6 @@ export function* loadTokens() { return registeredUids; } -/** - * It handles the request to fetch tokens metadata and open a thread to process it. - * @param {{ tokens: string[] }} - */ -export function* fetchTokensMetadataRequest(action) { - yield spawn(fetchTokensMetadata, action.tokens); -} - /** * The wallet needs each token metadata to show information correctly * So we fetch the tokens metadata and store on redux @@ -812,7 +804,6 @@ export function* saga() { takeEvery('WALLET_UPDATE_TX', handleTx), takeEvery('WALLET_BEST_BLOCK_UPDATE', bestBlockUpdate), takeEvery('WALLET_PARTIAL_UPDATE', loadPartialUpdate), - takeEvery(types.TOKENS_FETCH_METADATA_REQUESTED, fetchTokensMetadataRequest), takeEvery(types.WALLET_REFRESH_SHARED_ADDRESS, refreshSharedAddress), takeEvery(types.SELECTADDRESS_ADDRESSES_REQUEST, fetchAllWalletAddresses), takeEvery(types.FIRSTADDRESS_REQUEST, fetchFirstWalletAddress), From e273ab22e85dd0250d477a6705c219fec1a23072 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 20:11:06 +0100 Subject: [PATCH 14/31] chore: improving feedback message --- src/sagas/walletConnect.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 7ea7565e0..1ed6d9e9a 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -107,7 +107,7 @@ const Web3Wallet = class {}; const failureMessage = { walletNotReadyError: t`Wallet is not ready yet to process a Wallet Connect effect.`, - someTokensNotLoaded: t`Some token details couldn't have been loaded.`, + someTokensNotLoaded: t`Error loading the details of some tokens.`, }; function* isWalletConnectEnabled() { From 9994676b9956e8b6243aa10f9f1c7d2f6ae5ccb0 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 20:18:55 +0100 Subject: [PATCH 15/31] refactor: move requestTokens from walletConnect saga to tokens saga --- src/sagas/tokens.js | 51 ++++++++++++++++++++++++++++++++++++++ src/sagas/walletConnect.js | 50 ------------------------------------- 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/src/sagas/tokens.js b/src/sagas/tokens.js index 7e6774fa9..9d629280f 100644 --- a/src/sagas/tokens.js +++ b/src/sagas/tokens.js @@ -15,6 +15,7 @@ import { all, put, } from 'redux-saga/effects'; +import { t } from 'ttag'; import { metadataApi } from '@hathor/wallet-lib'; import { channel } from 'redux-saga'; import { get } from 'lodash'; @@ -28,11 +29,18 @@ import { tokenFetchHistoryRequested, tokenFetchHistorySuccess, tokenFetchHistoryFailed, + onExceptionCaptured, + unregisteredTokensUpdate, } from '../actions'; import { logger } from '../logger'; const log = logger('tokens-saga'); +const failureMessage = { + walletNotReadyError: t`Wallet is not ready yet.`, + someTokensNotLoaded: t`Error loading the details of some tokens.`, +}; + /** * @readonly * @enum {string} @@ -287,6 +295,48 @@ export function* fetchTokenData(tokenId, force = false) { } } +/** + * Request tokens data to feed walletConnect's tokens. + * @param {Object} action + * @param {Object} action.payload + * @param {string[]} action.payload.uids + */ +export function* requestTokens(action) { + const { uids } = action.payload; + + const wallet = yield select((state) => state.wallet); + if (!wallet.isReady()) { + log.error('Fail updating loading tokens data because wallet is not ready yet.'); + // This will show user an error modal with the option to send the error to sentry. + yield put(onExceptionCaptured(new Error(failureMessage.walletNotReadyError), true)); + return; + } + + const tokens = {}; + let someError = false; + for (const uid of uids) { + try { + const { tokenInfo: { symbol, name } } = yield call([wallet, wallet.getTokenDetails], uid); + const token = { uid, symbol, name }; + tokens[uid] = token; + } catch (e) { + log.error(`Fail getting token data for token ${uid}.`, e); + someError = true; + // continue download of tokens + } + } + + if (someError) { + log.log('There was a failure while getting tokens data to feed unregisteredTokens.'); + yield put( + unregisteredTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded }) + ); + return; + } + log.log('Success getting tokens data to feed unregisteredTokens.'); + yield put(unregisteredTokensUpdate({ tokens })); +} + export function* saga() { yield all([ fork(fetchTokenBalanceQueue), @@ -294,5 +344,6 @@ export function* saga() { takeEvery(types.TOKEN_FETCH_HISTORY_REQUESTED, fetchTokenHistory), takeEvery(types.NEW_TOKEN, routeTokenChange), takeEvery(types.SET_TOKENS, routeTokenChange), + takeEvery(types.UNREGISTEREDTOKENS_REQUEST, requestTokens), ]); } diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 1ed6d9e9a..2e8ad7558 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -59,7 +59,6 @@ import { select, race, } from 'redux-saga/effects'; -import { t } from 'ttag'; import { eventChannel } from 'redux-saga'; import { get, values } from 'lodash'; @@ -75,7 +74,6 @@ import { setWalletConnectSessions, onExceptionCaptured, setWCConnectionFailed, - unregisteredTokensUpdate, } from '../actions'; import { logger } from '../logger'; import { checkForFeatureFlag, getNetworkSettings, showPinScreenForResult } from './helpers'; @@ -105,11 +103,6 @@ const ERROR_CODES = { const Core = class {}; const Web3Wallet = class {}; -const failureMessage = { - walletNotReadyError: t`Wallet is not ready yet to process a Wallet Connect effect.`, - someTokensNotLoaded: t`Error loading the details of some tokens.`, -}; - function* isWalletConnectEnabled() { const walletConnectEnabled = yield call(checkForFeatureFlag, WALLET_CONNECT_FEATURE_TOGGLE); @@ -527,48 +520,6 @@ export function* onSessionDelete(action) { yield call(onCancelSession, action); } -/** - * Request tokens data to feed walletConnect's tokens. - * @param {Object} action - * @param {Object} action.payload - * @param {string[]} action.payload.uids - */ -export function* requestTokens(action) { - const { uids } = action.payload; - - const wallet = yield select((state) => state.wallet); - if (!wallet.isReady()) { - log.error('Fail updating loading tokens data because wallet is not ready yet.'); - // This will show user an error modal with the option to send the error to sentry. - yield put(onExceptionCaptured(new Error(failureMessage.walletNotReadyError), true)); - return; - } - - const tokens = {}; - let someError = false; - for (const uid of uids) { - try { - const { tokenInfo: { symbol, name } } = yield call([wallet, wallet.getTokenDetails], uid); - const token = { uid, symbol, name }; - tokens[uid] = token; - } catch (e) { - log.error(`Fail getting token data for token ${uid}.`, e); - someError = true; - // continue - } - } - - if (someError) { - log.log('There was a failure while getting tokens data to feed unregisteredTokens.'); - yield put( - unregisteredTokensUpdate({ tokens, error: failureMessage.someTokensNotLoaded }) - ); - return; - } - log.log('Success getting tokens data to feed unregisteredTokens.'); - yield put(unregisteredTokensUpdate({ tokens })); -} - export function* saga() { yield all([ fork(featureToggleUpdateListener), @@ -580,6 +531,5 @@ export function* saga() { takeEvery('WC_SHUTDOWN', clearSessions), takeEvery(types.RESET_WALLET, onWalletReset), takeLatest(types.WC_URI_INPUTTED, onUriInputted), - takeEvery(types.UNREGISTEREDTOKENS_REQUEST, requestTokens), ]); } From 18bccab3d1ffbccf2e96f1926edfd0145ea4946e Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 20:20:09 +0100 Subject: [PATCH 16/31] refactor: rename effect requestTokens to requestUnregisteredTokens --- src/sagas/tokens.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sagas/tokens.js b/src/sagas/tokens.js index 9d629280f..55e6e2fdd 100644 --- a/src/sagas/tokens.js +++ b/src/sagas/tokens.js @@ -301,7 +301,7 @@ export function* fetchTokenData(tokenId, force = false) { * @param {Object} action.payload * @param {string[]} action.payload.uids */ -export function* requestTokens(action) { +export function* requestUnregisteredTokens(action) { const { uids } = action.payload; const wallet = yield select((state) => state.wallet); @@ -344,6 +344,6 @@ export function* saga() { takeEvery(types.TOKEN_FETCH_HISTORY_REQUESTED, fetchTokenHistory), takeEvery(types.NEW_TOKEN, routeTokenChange), takeEvery(types.SET_TOKENS, routeTokenChange), - takeEvery(types.UNREGISTEREDTOKENS_REQUEST, requestTokens), + takeEvery(types.UNREGISTEREDTOKENS_REQUEST, requestUnregisteredTokens), ]); } From ea57d7d11f5e4b5559962e51a79759d9916f82c8 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 21:03:03 +0100 Subject: [PATCH 17/31] feat: fire sentry error notification for method info not found --- .../NanoContract/NanoContractMethodArgs.js | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 60424c621..ac0c48994 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -11,11 +11,19 @@ import { View, Text, } from 'react-native'; -import { useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { t } from 'ttag'; import { get } from 'lodash'; import { COLORS } from '../../../styles/themes'; import { commonStyles } from '../theme'; +import { onExceptionCaptured } from '../../../actions'; + +/** + * Get method info from registered blueprint data. + */ +function getMethodInfoFromBlueprint(blueprint, method) { + return get(blueprint.data, `public_methods.${method}`, null); +} /** * It renders a list of method arguments for when the Nano Contract executes. @@ -29,16 +37,27 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { if (!ncArgs.length) { return null; } + const dispatch = useDispatch(); const blueprintInfo = useSelector((state) => state.nanoContract.blueprint[blueprintId]); + // It results a in a list of entries like: + // >>> [['oracle_script', 'abc'], ['token_uid', '00'], ['date_last_bet', 123]] + // or a fallback like: + // >>> [['Position 0', 'abc'], ['Position 1', '00'], ['Position 2', 123]] const argEntries = useMemo(() => { - const _methodInfo = get(blueprintInfo?.data, `public_methods.${method}`, null); - if (_methodInfo) { - return ncArgs.map((arg, idx) => [_methodInfo.args[idx].name, arg]); + const methodInfo = getMethodInfoFromBlueprint(blueprintInfo, method); + if (methodInfo) { + return ncArgs.map((arg, idx) => [methodInfo.args[idx].name, arg]); } + // Send this condition to sentry because it should never happen. + // Check any change in the lib or in the fullnode that could cause an impact here. + const errMsg = 'Error while getting the argument names of public_methods on blueprint'; + dispatch(onExceptionCaptured(new Error(errMsg), false)); + + // Still render a fallback return ncArgs.map((arg, idx) => [t`Position ${idx}`, arg]); - }, [blueprintInfo]); + }, [method, ncArgs, blueprintInfo]); return ( From 39a8dbd6d448f56a8962746c6640b0c84f47ecff Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 21:04:46 +0100 Subject: [PATCH 18/31] feat: improve title of Arguments component --- .../WalletConnect/NanoContract/NanoContractMethodArgs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index ac0c48994..6ca966b13 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -62,7 +62,7 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { return ( - {t`Argument List`} + {t`Arguments`} {argEntries.length && ( From 1232f3df19c0812833198be25911e4b8fe2b7809 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 21:20:58 +0100 Subject: [PATCH 19/31] chore: remove blueprint info action and reducer --- src/actions.js | 11 ----------- src/reducers/reducer.js | 25 ------------------------- 2 files changed, 36 deletions(-) diff --git a/src/actions.js b/src/actions.js index a25d49a82..c72b84809 100644 --- a/src/actions.js +++ b/src/actions.js @@ -172,8 +172,6 @@ export const types = { NANOCONTRACT_BLUEPRINTINFO_FAILURE: 'NANOCONTRACT_BLUEPRINTINFO_FAILURE', /* It signals a success on fetch blueprint info. */ NANOCONTRACT_BLUEPRINTINFO_SUCCESS: 'NANOCONTRACT_BLUEPRINTINFO_SUCCESS', - /* It signals the blueprint info state is ready. */ - NANOCONTRACT_BLUEPRINTINFO_READY: 'NANOCONTRACT_BLUEPRINTINFO_READY', /* It triggers a process to fetch all wallet addresses. */ SELECTADDRESS_ADDRESSES_REQUEST: 'SELECTADDRESS_ADDRESSES_REQUEST', /* It signals the fetch has loaded all the addresses with success. */ @@ -1317,15 +1315,6 @@ export const nanoContractBlueprintInfoSuccess = (id, blueprintInfo) => ({ payload: { id, data: { ...blueprintInfo } }, }); -/** - * Signals the blueprint info state is ready. - * @param {string} id Blueprint ID. - */ -export const nanoContractBlueprintInfoReady = (id) => ({ - type: types.NANOCONTRACT_BLUEPRINTINFO_READY, - payload: { id }, -}); - /** * Signals a request to load a collection of token data by a collection of token UID. * @param {Object} payload diff --git a/src/reducers/reducer.js b/src/reducers/reducer.js index f8ef3abaa..1f636ab08 100644 --- a/src/reducers/reducer.js +++ b/src/reducers/reducer.js @@ -667,8 +667,6 @@ export const reducer = (state = initialState, action) => { return onSetNewNanoContractTransactionStatus(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_REQUEST: return onNanoContractBlueprintInfoRequest(state, action); - case types.NANOCONTRACT_BLUEPRINTINFO_READY: - return onNanoContractBlueprintInfoReady(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_FAILURE: return onNanoContractBlueprintInfoFailure(state, action); case types.NANOCONTRACT_BLUEPRINTINFO_SUCCESS: @@ -1964,29 +1962,6 @@ export const onNanoContractBlueprintInfoSuccess = (state, { payload }) => ({ }, }); -/** - * @param {Object} state - * @param {{ - * payload: { - * id: string; - * }; - * }} action - */ -export const onNanoContractBlueprintInfoReady = (state, { payload }) => ({ - ...state, - nanoContract: { - ...state.nanoContract, - blueprint: { - ...state.nanoContract.blueprint, - [payload.id]: { - status: NANOCONTRACT_BLUEPRINTINFO_STATUS.READY, - data: null, - error: null, - }, - }, - }, -}); - /** * Remarks * This reducer aims to clean error feedback message before processing the request. From ef3c95b1fe2f57b9649d205badfee9de756f9ad7 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 22:18:33 +0100 Subject: [PATCH 20/31] feat: retrieve fallback arg entries when blueprint is loading --- .../NanoContract/NanoContractMethodArgs.js | 30 ++++++++++++++++++- src/constants.js | 1 - 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 6ca966b13..3d2d01b90 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -17,14 +17,37 @@ import { get } from 'lodash'; import { COLORS } from '../../../styles/themes'; import { commonStyles } from '../theme'; import { onExceptionCaptured } from '../../../actions'; +import { NANOCONTRACT_BLUEPRINTINFO_STATUS as STATUS } from '../../../constants'; /** * Get method info from registered blueprint data. + * + * @param {{ + * data: Object; + * }} blueprint The blueprint info object + * @param {string} method The method name to get info from blueprint public methods + * + * @returns {Object} */ function getMethodInfoFromBlueprint(blueprint, method) { return get(blueprint.data, `public_methods.${method}`, null); } +/** + * Get the fallback entries for the method arguments. + * + * @param {string[]} args A list of argument value + * + * @returns {[argName: string, value: string][]} + * + * @example + * getFallbackArgEntries([...argValues]) + * >>> [['Position 0', 'abc'], ['Position 1', '00'], ['Position 2', 123]] + */ +function getFallbackArgEntries(args) { + return args.map((arg, idx) => [t`Position ${idx}`, arg]); +} + /** * It renders a list of method arguments for when the Nano Contract executes. * @@ -45,6 +68,11 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { // or a fallback like: // >>> [['Position 0', 'abc'], ['Position 1', '00'], ['Position 2', 123]] const argEntries = useMemo(() => { + // Retrieve the fallback entries while blueprint info is being loading. + if (blueprintInfo.status === STATUS.LOADING) { + return getFallbackArgEntries(ncArgs); + } + const methodInfo = getMethodInfoFromBlueprint(blueprintInfo, method); if (methodInfo) { return ncArgs.map((arg, idx) => [methodInfo.args[idx].name, arg]); @@ -56,7 +84,7 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { dispatch(onExceptionCaptured(new Error(errMsg), false)); // Still render a fallback - return ncArgs.map((arg, idx) => [t`Position ${idx}`, arg]); + return getFallbackArgEntries(ncArgs); }, [method, ncArgs, blueprintInfo]); return ( diff --git a/src/constants.js b/src/constants.js index 9f964e41c..957f8aec5 100644 --- a/src/constants.js +++ b/src/constants.js @@ -248,7 +248,6 @@ export const WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS = { }; export const NANOCONTRACT_BLUEPRINTINFO_STATUS = { - READY: 'ready', FAILED: 'failed', LOADING: 'loading', SUCCESSFUL: 'successful', From d32b6aecd2ca65bb75b30370436089ff4707bf5d Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 22:26:12 +0100 Subject: [PATCH 21/31] feat: add nft check to action token on Actions component --- .../NanoContract/NanoContractActions.js | 73 ++++++++++++++----- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js index 6826b7e5c..9830f6a9c 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractActions.js +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { StyleSheet, View, @@ -14,13 +14,14 @@ import { import { t } from 'ttag'; import { HathorFlatList } from '../../HathorFlatList'; import { commonStyles } from '../theme'; -import { getShortHash, renderValue } from '../../../utils'; +import { getShortHash, isTokenNFT, renderValue } from '../../../utils'; import { ReceivedIcon } from '../../Icons/Received.icon'; import { SentIcon } from '../../Icons/Sent.icon'; import { AlertUI, COLORS } from '../../../styles/themes'; import { DEFAULT_TOKEN } from '../../../constants'; import { WarnTextValue } from '../../WarnTextValue'; import { CircleError } from '../../Icons/CircleError.icon'; +import { useSelector } from 'react-redux'; /** * It returns the title template for each action type, @@ -41,6 +42,8 @@ const actionTitleMap = (tokenSymbol) => ({ * @param {Object} tokens A map of token metadata by token uid * @param {Object} action An action object * + * @returns {string} A formatted title to be used in the action card + * * @example * getActionTitle({ '123': { ..., symbol: 'STR' }}, { ..., token: '123', type: 'deposit' }) * >>> 'STR Deposit' @@ -76,11 +79,20 @@ export const NanoContractActions = ({ ncActions, tokens, error }) => { return null; } + const tokenMetadata = useSelector((state) => state.tokenMetadata); + // A callback to check if the action token is an NFT. + const isNft = useCallback( + (token) => isTokenNFT(token, tokenMetadata), + [tokenMetadata] + ); + // A callback to retrieve the action title by its token symbol of hash. + const getTitle = useCallback( + (action) => getActionTitle(tokens, action), + [tokens] + ); + const styles = StyleSheet.create({ wrapper: { marginTop: 0, marginBottom: 0, marginHorizontal: 0 }, - action: [commonStyles.text, commonStyles.bold], - valueLabel: [commonStyles.text, commonStyles.value, commonStyles.bold, commonStyles.mb4], - value: [commonStyles.text, commonStyles.value], }); return ( @@ -93,20 +105,7 @@ export const NanoContractActions = ({ ncActions, tokens, error }) => { wrapperStyle={styles.wrapper} data={ncActions} renderItem={({ item }) => ( - - - - {getActionTitle(tokens, item)} - {item.address - && ( - - {t`To Address:`} - {item.address} - - )} - - - + )} // If has error, shows the feedback error message in the list header. ListHeaderComponent={error && ( @@ -122,6 +121,42 @@ export const NanoContractActions = ({ ncActions, tokens, error }) => { ); }; +/** + * @param {Object} props + * @param {{ + * type: 'deposit'|'withdrawal'; + * token: string; + * amount: number; + * address: string; + * }} props.action A transaction's action object + * @param {boolean} props.isNft A flag to inform if the token is an NFT or not + * @param {string} props.title The card title for the action + */ +const ActionItem = ({ action, title , isNft }) => { + const styles = StyleSheet.create({ + action: [commonStyles.text, commonStyles.bold], + valueLabel: [commonStyles.text, commonStyles.value, commonStyles.bold, commonStyles.mb4], + value: [commonStyles.text, commonStyles.value], + }); + + return ( + + + + {title} + {action.address + && ( + + {t`To Address:`} + {action.address} + + )} + + + + ) +} + /** * It renders an icon by action type, either 'deposit' or 'withdrawal'. * From dbf3d0a930a9b00e9c2991ff0353aa99757104a6 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 22:46:47 +0100 Subject: [PATCH 22/31] chore: apply suggestions and improve documentation on new nc tx request --- .../NewNanoContractTransactionRequest.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 37b86860d..b8ee5345c 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -119,9 +119,13 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { // It results in true for registered nc and initialize request const showRequest = !notRegistered; - // This effect should run only once because firstAddress is kept on state when loaded + // This effect should run at most twice: + // 1. when in the construct phase + // 2. after firstAddress is set on store after a request to load it + // The mentioned load request at (2) can happen for 'initialize' transaction, + // it is requested from a child component, NanoContractExecInfo. useEffect(() => { - if (firstAddress.address) { + if (ncToAccept.method === 'initialize' && firstAddress.address) { setNcAddress(firstAddress.address); } }, [firstAddress]); @@ -165,10 +169,10 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { const isTxInfoLoading = () => knownTokens.isLoading; const isTxInfoLoaded = () => ( - !knownTokens.isLoading && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + !isTxInfoLoading() && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); const isTxProcessing = () => ( - !knownTokens.isLoading && newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING + !isTxInfoLoading() && newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); const isTxSuccessful = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.SUCCESSFUL; const isTxFailed = () => newTxStatus === WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.FAILED; From 216396c52bf997979786482d7fdbcaf7df1d6a33 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 23:02:57 +0100 Subject: [PATCH 23/31] lint: comply with rules --- .../WalletConnect/NanoContract/NanoContractActions.js | 4 ++-- src/sagas/walletConnect.js | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js index 9830f6a9c..5708c2d08 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractActions.js +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -12,6 +12,7 @@ import { Text, } from 'react-native'; import { t } from 'ttag'; +import { useSelector } from 'react-redux'; import { HathorFlatList } from '../../HathorFlatList'; import { commonStyles } from '../theme'; import { getShortHash, isTokenNFT, renderValue } from '../../../utils'; @@ -21,7 +22,6 @@ import { AlertUI, COLORS } from '../../../styles/themes'; import { DEFAULT_TOKEN } from '../../../constants'; import { WarnTextValue } from '../../WarnTextValue'; import { CircleError } from '../../Icons/CircleError.icon'; -import { useSelector } from 'react-redux'; /** * It returns the title template for each action type, @@ -132,7 +132,7 @@ export const NanoContractActions = ({ ncActions, tokens, error }) => { * @param {boolean} props.isNft A flag to inform if the token is an NFT or not * @param {string} props.title The card title for the action */ -const ActionItem = ({ action, title , isNft }) => { +const ActionItem = ({ action, title, isNft }) => { const styles = StyleSheet.create({ action: [commonStyles.text, commonStyles.bold], valueLabel: [commonStyles.text, commonStyles.value, commonStyles.bold, commonStyles.mb4], diff --git a/src/sagas/walletConnect.js b/src/sagas/walletConnect.js index 2e8ad7558..338798f62 100644 --- a/src/sagas/walletConnect.js +++ b/src/sagas/walletConnect.js @@ -75,11 +75,8 @@ import { onExceptionCaptured, setWCConnectionFailed, } from '../actions'; -import { logger } from '../logger'; import { checkForFeatureFlag, getNetworkSettings, showPinScreenForResult } from './helpers'; -const log = logger('wallet-connect'); - const AVAILABLE_METHODS = { HATHOR_SIGN_MESSAGE: 'hathor_signMessage', }; From 17784c2a5ab1197071511345162fbfd802a470dc Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 23:06:15 +0100 Subject: [PATCH 24/31] fix: check if blueprintInfo is not null --- .../WalletConnect/NanoContract/NanoContractMethodArgs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 3d2d01b90..5484fe54d 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -69,7 +69,7 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { // >>> [['Position 0', 'abc'], ['Position 1', '00'], ['Position 2', 123]] const argEntries = useMemo(() => { // Retrieve the fallback entries while blueprint info is being loading. - if (blueprintInfo.status === STATUS.LOADING) { + if (blueprintInfo == null || blueprintInfo.status === STATUS.LOADING) { return getFallbackArgEntries(ncArgs); } From e3c65d0ed862188c7f7e3a449aa81333d82dbf2a Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 23:19:22 +0100 Subject: [PATCH 25/31] refactor: reanem style value to field --- .../WalletConnect/NanoContract/NanoContractActions.js | 4 ++-- src/components/WalletConnect/theme.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractActions.js b/src/components/WalletConnect/NanoContract/NanoContractActions.js index 5708c2d08..9b38d0d70 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractActions.js +++ b/src/components/WalletConnect/NanoContract/NanoContractActions.js @@ -135,8 +135,8 @@ export const NanoContractActions = ({ ncActions, tokens, error }) => { const ActionItem = ({ action, title, isNft }) => { const styles = StyleSheet.create({ action: [commonStyles.text, commonStyles.bold], - valueLabel: [commonStyles.text, commonStyles.value, commonStyles.bold, commonStyles.mb4], - value: [commonStyles.text, commonStyles.value], + valueLabel: [commonStyles.text, commonStyles.field, commonStyles.bold, commonStyles.mb4], + value: [commonStyles.text, commonStyles.field], }); return ( diff --git a/src/components/WalletConnect/theme.js b/src/components/WalletConnect/theme.js index 2a7e9d4e4..bab0f09ee 100644 --- a/src/components/WalletConnect/theme.js +++ b/src/components/WalletConnect/theme.js @@ -58,7 +58,7 @@ export const commonStyles = StyleSheet.create({ bold: { fontWeight: 'bold', }, - value: { + field: { color: 'hsla(0, 0%, 38%, 1)', }, mb4: { From 73fc6fd30f9e7f99f09b05ff1b046d98fdac5ca5 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 23:19:48 +0100 Subject: [PATCH 26/31] type: recursar --- locale/pt-br/texts.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index 52a32edde..7bef1c438 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -1367,7 +1367,7 @@ msgstr "Recusar transação" #: src/components/WalletConnect/NanoContract/DeclineModal.js:29 msgid "Are you sure you want to decline this transaction?" -msgstr "Tem certeza que deseja recursar esta transação?" +msgstr "Tem certeza que deseja recusar esta transação?" #: src/components/WalletConnect/NanoContract/DeclineModal.js:33 msgid "Yes, decline transaction" From 7ba9afad1f1fcfe9262846179ca9256d2682c6c8 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Wed, 14 Aug 2024 23:31:19 +0100 Subject: [PATCH 27/31] i18n: update translation files --- locale/da/texts.po | 102 ++++++++++++++++++++++------------------- locale/pt-br/texts.po | 104 +++++++++++++++++++++++------------------- locale/ru-ru/texts.po | 102 ++++++++++++++++++++++------------------- locale/texts.pot | 102 ++++++++++++++++++++++------------------- 4 files changed, 221 insertions(+), 189 deletions(-) diff --git a/locale/da/texts.po b/locale/da/texts.po index 303bae615..25992b918 100644 --- a/locale/da/texts.po +++ b/locale/da/texts.po @@ -433,7 +433,7 @@ msgid "Enter your seed words separated by space" msgstr "Indtast dine seed-ord adskilt med mellemrum" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:282 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -535,7 +535,7 @@ msgstr "Indtast din pinkode " msgid "Unlock Hathor Wallet" msgstr "Lås Hathor-wallet op" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:84 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -799,7 +799,7 @@ msgstr "Jeg vil afregistrere token **${ tokenLabel }**" msgid "Unregister token" msgstr "Afregistrer token" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:68 #: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 msgid "New Nano Contract Transaction" msgstr "" @@ -953,7 +953,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:202 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -963,10 +963,10 @@ msgid "Loading first wallet address." msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.js:89 +#: src/components/NanoContract/NanoContractTransactionHeader.js:88 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:83 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1077,21 +1077,29 @@ msgstr "Transaktion" msgid "Open" msgstr "Åben" -#: src/sagas/wallet.js:758 +#: src/sagas/tokens.js:40 +msgid "Wallet is not ready yet." +msgstr "" + +#: src/sagas/tokens.js:41 +msgid "Error loading the details of some tokens." +msgstr "" + +#: src/sagas/wallet.js:749 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:774 +#: src/sagas/wallet.js:765 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:784 +#: src/sagas/wallet.js:775 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:800 +#: src/sagas/wallet.js:791 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1263,14 +1271,14 @@ msgstr "" msgid "Description" msgstr "Beskrivelse" -#: src/components/NanoContract/NanoContractTransactionHeader.js:48 +#: src/components/NanoContract/NanoContractTransactionHeader.js:47 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:93 +#: src/components/NanoContract/NanoContractTransactionHeader.js:92 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:116 msgid "Blueprint Method" msgstr "" @@ -1341,121 +1349,121 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:36 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:37 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:150 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:88 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:93 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:109 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:140 msgid "Loading..." msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 +#: src/components/NanoContract/NanoContractTransactionHeader.js:106 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:124 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:143 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:48 #, javascript-format msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:93 +msgid "Arguments" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 msgid "You have received a new Nano Contract Transaction. Please" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 msgid "carefully review the details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:76 msgid "before deciding to accept or decline." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:80 msgid "Review transaction details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:98 msgid "" "Caution: There are risks associated with signing dapp transaction requests." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:104 msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:184 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:185 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:235 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:231 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:245 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:246 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:280 msgid "Error while sending transaction." msgstr "" @@ -1514,18 +1522,18 @@ msgid "Unregister contract" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:97 +#: src/components/NanoContract/NanoContractTransactionHeader.js:96 msgid "Date and Time" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionHeader.js:103 #: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:110 +#: src/components/NanoContract/NanoContractTransactionHeader.js:109 msgid "See transaction details" msgstr "" diff --git a/locale/pt-br/texts.po b/locale/pt-br/texts.po index 7bef1c438..d9b7fc613 100644 --- a/locale/pt-br/texts.po +++ b/locale/pt-br/texts.po @@ -444,7 +444,7 @@ msgid "Enter your seed words separated by space" msgstr "Digite suas palavras separadas por espaços" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:282 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -548,7 +548,7 @@ msgstr "Digite seu PIN " msgid "Unlock Hathor Wallet" msgstr "Desbloqueie sua Hathor Wallet" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:84 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -817,7 +817,7 @@ msgstr "Eu quero desregistrar o token **${ tokenLabel }**" msgid "Unregister token" msgstr "Desregistrar token" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:68 #: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 msgid "New Nano Contract Transaction" msgstr "Nova Transação de Nano Contract" @@ -979,7 +979,7 @@ msgstr "Erro ao carregar primeiro endereço da wallet" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:202 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "Carregando" @@ -989,10 +989,10 @@ msgid "Loading first wallet address." msgstr "Carregando primeiro endereço da wallet." #: src/components/NanoContract/NanoContractDetailsHeader.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.js:89 +#: src/components/NanoContract/NanoContractTransactionHeader.js:88 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:83 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "ID do Nano Contract" @@ -1104,21 +1104,29 @@ msgstr "Transação" msgid "Open" msgstr "Abrir" -#: src/sagas/wallet.js:758 +#: src/sagas/tokens.js:40 +msgid "Wallet is not ready yet." +msgstr "A wallet não está pronta ainda." + +#: src/sagas/tokens.js:41 +msgid "Error loading the details of some tokens." +msgstr "Ocorreu um erro durante o carregamento de detalhes de alguns tokens." + +#: src/sagas/wallet.js:749 msgid "Wallet is not ready to load addresses." msgstr "A wallet não está pronta para carregar os endereços." #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:774 +#: src/sagas/wallet.js:765 msgid "There was an error while loading wallet addresses. Try again." msgstr "Ocorreu um erro ao carregar os endereços da wallet. Tente novamente." -#: src/sagas/wallet.js:784 +#: src/sagas/wallet.js:775 msgid "Wallet is not ready to load the first address." msgstr "A wallet não está pronta para carregar o primeiro endereço." #. This will show the message in the feedback content -#: src/sagas/wallet.js:800 +#: src/sagas/wallet.js:791 msgid "There was an error while loading first wallet address. Try again." msgstr "" "Ocorreu um erro ao carregar o primeiro endereço da wallet. Tente novamente." @@ -1293,14 +1301,14 @@ msgstr "Inválida" msgid "Description" msgstr "Descrição" -#: src/components/NanoContract/NanoContractTransactionHeader.js:48 +#: src/components/NanoContract/NanoContractTransactionHeader.js:47 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "ID da Transação" -#: src/components/NanoContract/NanoContractTransactionHeader.js:93 +#: src/components/NanoContract/NanoContractTransactionHeader.js:92 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:116 msgid "Blueprint Method" msgstr "Método do Blueprint" @@ -1378,88 +1386,88 @@ msgstr "Sim, recusar transação" msgid "No, go back" msgstr "Não, voltar" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:36 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "${ tokenSymbol } Depósito" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:37 msgid "${ tokenSymbol } Withdrawal" msgstr "${ tokenSymbol } Saque" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "Action List" msgstr "Lista de Actions" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:150 msgid "To Address:" msgstr "Para o endereço:" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:88 msgid "Blueprint ID" msgstr "ID do Blueprint" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:93 msgid "Blueprint Name" msgstr "Nome do Blueprint" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:109 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:140 msgid "Loading..." msgstr "Carregando..." -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 +#: src/components/NanoContract/NanoContractTransactionHeader.js:106 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:124 msgid "Caller" msgstr "Caller" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:143 msgid "Couldn't determine address, select one" msgstr "Não foi possível determinar um endereço, selecione um" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:48 #, javascript-format msgid "Position ${ idx }" msgstr "Posição ${ idx }" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 -msgid "Argument List" -msgstr "Lista de Argumentos" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:93 +msgid "Arguments" +msgstr "Argumentos" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 msgid "You have received a new Nano Contract Transaction. Please" msgstr "" "Você recebeu um pedido para criar uma transação de Nano Contract. Por favor," -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 msgid "carefully review the details" msgstr "revise os detalhes com cuidado" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:76 msgid "before deciding to accept or decline." msgstr "antes de decidir aceitar ou recusar." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:80 msgid "Review transaction details" msgstr "Revisar detalhes da transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:98 msgid "" "Caution: There are risks associated with signing dapp transaction requests." msgstr "" "Cuidado: Há riscos associados a pedidos de assinatura de transação via dApp." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:104 msgid "Read More." msgstr "Ler mais." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:184 msgid "Nano Contract Not Found" msgstr "Nano Contract não encontrado" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:185 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." @@ -1467,36 +1475,36 @@ msgstr "" "O Nano Contract solicitado não está registrado. Primeiro registre o Nano " "Contract para interagir com ele." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:235 msgid "Decline Transaction" msgstr "Recusar transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Loading transaction information." msgstr "Carregando informações da transação." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:231 msgid "Accept Transaction" msgstr "Aceitar transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:245 msgid "Sending transaction" msgstr "Enviando transação" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:246 msgid "Please wait." msgstr "Por favor, espere." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Transaction successfully sent." msgstr "Transação enviada com sucesso." -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 msgid "Ok, close" msgstr "Ok, fechar" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:280 msgid "Error while sending transaction." msgstr "Ocorreu um erro durante o envio da transação." @@ -1557,18 +1565,18 @@ msgid "Unregister contract" msgstr "Desregistrar contract" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:97 +#: src/components/NanoContract/NanoContractTransactionHeader.js:96 msgid "Date and Time" msgstr "Data & Hora" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionHeader.js:103 #: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "Desta wallet" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:110 +#: src/components/NanoContract/NanoContractTransactionHeader.js:109 msgid "See transaction details" msgstr "Ver detalhes" diff --git a/locale/ru-ru/texts.po b/locale/ru-ru/texts.po index 9c69f456a..73c470714 100644 --- a/locale/ru-ru/texts.po +++ b/locale/ru-ru/texts.po @@ -434,7 +434,7 @@ msgid "Enter your seed words separated by space" msgstr "Введите seed-фразу" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:282 #: src/screens/LoadHistoryScreen.js:51 src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 msgid "Try again" @@ -537,7 +537,7 @@ msgstr "Введите свой PIN-код " msgid "Unlock Hathor Wallet" msgstr "Разблокировать Hathor Wallet" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:84 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -803,7 +803,7 @@ msgstr "Я хочу отменить регистрацию токена **${ to msgid "Unregister token" msgstr "Отменить регистрацию токена" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:68 #: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 msgid "New Nano Contract Transaction" msgstr "" @@ -957,7 +957,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:202 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -967,10 +967,10 @@ msgid "Loading first wallet address." msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.js:89 +#: src/components/NanoContract/NanoContractTransactionHeader.js:88 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:83 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1081,21 +1081,29 @@ msgstr "" msgid "Open" msgstr "Открыть" -#: src/sagas/wallet.js:758 +#: src/sagas/tokens.js:40 +msgid "Wallet is not ready yet." +msgstr "" + +#: src/sagas/tokens.js:41 +msgid "Error loading the details of some tokens." +msgstr "" + +#: src/sagas/wallet.js:749 msgid "Wallet is not ready to load addresses." msgstr "" #. This will show the message in the feedback content at SelectAddressModal -#: src/sagas/wallet.js:774 +#: src/sagas/wallet.js:765 msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:784 +#: src/sagas/wallet.js:775 msgid "Wallet is not ready to load the first address." msgstr "" #. This will show the message in the feedback content -#: src/sagas/wallet.js:800 +#: src/sagas/wallet.js:791 msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1252,14 +1260,14 @@ msgstr "" msgid "Description" msgstr "Описание" -#: src/components/NanoContract/NanoContractTransactionHeader.js:48 +#: src/components/NanoContract/NanoContractTransactionHeader.js:47 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:93 +#: src/components/NanoContract/NanoContractTransactionHeader.js:92 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:116 msgid "Blueprint Method" msgstr "" @@ -1330,121 +1338,121 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:36 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:37 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:150 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:88 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:93 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:109 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:140 msgid "Loading..." msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 +#: src/components/NanoContract/NanoContractTransactionHeader.js:106 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:124 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:143 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:48 #, javascript-format msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:93 +msgid "Arguments" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 msgid "You have received a new Nano Contract Transaction. Please" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 msgid "carefully review the details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:76 msgid "before deciding to accept or decline." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:80 msgid "Review transaction details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:98 msgid "" "Caution: There are risks associated with signing dapp transaction requests." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:104 msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:184 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:185 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:235 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:231 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:245 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:246 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:280 msgid "Error while sending transaction." msgstr "" @@ -1503,18 +1511,18 @@ msgid "Unregister contract" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:97 +#: src/components/NanoContract/NanoContractTransactionHeader.js:96 msgid "Date and Time" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionHeader.js:103 #: src/components/NanoContract/NanoContractTransactionsListItem.js:62 msgid "From this wallet" msgstr "" #. XXX: add when shrank component can be used. -#: src/components/NanoContract/NanoContractTransactionHeader.js:110 +#: src/components/NanoContract/NanoContractTransactionHeader.js:109 msgid "See transaction details" msgstr "" diff --git a/locale/texts.pot b/locale/texts.pot index e7ce434ba..5c843988c 100644 --- a/locale/texts.pot +++ b/locale/texts.pot @@ -422,7 +422,7 @@ msgid "Enter your seed words separated by space" msgstr "" #: src/components/NanoContract/NanoContractDetails.js:194 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:282 #: src/screens/LoadHistoryScreen.js:51 #: src/screens/LoadWalletErrorScreen.js:20 #: src/screens/NanoContract/NanoContractRegisterScreen.js:161 @@ -530,7 +530,7 @@ msgstr "" msgid "Unlock Hathor Wallet" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:82 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:84 #: src/screens/PinScreen.js:265 #: src/screens/WalletConnect/WalletConnectList.js:125 msgid "Cancel" @@ -796,7 +796,7 @@ msgstr "" msgid "Unregister token" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:66 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:68 #: src/screens/WalletConnect/NewNanoContractTransactionScreen.js:24 msgid "New Nano Contract Transaction" msgstr "" @@ -950,7 +950,7 @@ msgstr "" #: src/components/NanoContract/NanoContractDetails.js:158 #: src/components/NanoContract/SelectAddressModal.js:105 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:195 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:202 #: src/screens/NanoContract/NanoContractRegisterScreen.js:177 msgid "Loading" msgstr "" @@ -960,10 +960,10 @@ msgid "Loading first wallet address." msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:142 -#: src/components/NanoContract/NanoContractTransactionHeader.js:89 +#: src/components/NanoContract/NanoContractTransactionHeader.js:88 #: src/components/NanoContract/NanoContractsListItem.js:57 #: src/components/TxDetailsModal.js:106 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:81 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:83 #: src/screens/NanoContract/NanoContractRegisterScreen.js:187 msgid "Nano Contract ID" msgstr "" @@ -1074,20 +1074,28 @@ msgstr "" msgid "Open" msgstr "" -#: src/sagas/wallet.js:758 +#: src/sagas/tokens.js:40 +msgid "Wallet is not ready yet." +msgstr "" + +#: src/sagas/tokens.js:41 +msgid "Error loading the details of some tokens." +msgstr "" + +#: src/sagas/wallet.js:749 msgid "Wallet is not ready to load addresses." msgstr "" -#: src/sagas/wallet.js:774 +#: src/sagas/wallet.js:765 #. This will show the message in the feedback content at SelectAddressModal msgid "There was an error while loading wallet addresses. Try again." msgstr "" -#: src/sagas/wallet.js:784 +#: src/sagas/wallet.js:775 msgid "Wallet is not ready to load the first address." msgstr "" -#: src/sagas/wallet.js:800 +#: src/sagas/wallet.js:791 #. This will show the message in the feedback content msgid "There was an error while loading first wallet address. Try again." msgstr "" @@ -1245,14 +1253,14 @@ msgstr "" msgid "Description" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:48 +#: src/components/NanoContract/NanoContractTransactionHeader.js:47 #: src/components/TxDetailsModal.js:104 msgid "Transaction ID" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:93 +#: src/components/NanoContract/NanoContractTransactionHeader.js:92 #: src/components/TxDetailsModal.js:105 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:114 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:116 msgid "Blueprint Method" msgstr "" @@ -1323,120 +1331,120 @@ msgstr "" msgid "No, go back" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:33 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:36 #, javascript-format msgid "${ tokenSymbol } Deposit" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:34 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:37 msgid "${ tokenSymbol } Withdrawal" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:101 msgid "Action List" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractActions.js:100 +#: src/components/WalletConnect/NanoContract/NanoContractActions.js:150 msgid "To Address:" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:86 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:88 msgid "Blueprint ID" msgstr "" #: src/components/NanoContract/NanoContractDetailsHeader.js:146 #: src/components/NanoContract/NanoContractsListItem.js:59 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:91 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:93 msgid "Blueprint Name" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:138 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:109 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:140 msgid "Loading..." msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:107 -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:122 +#: src/components/NanoContract/NanoContractTransactionHeader.js:106 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:124 msgid "Caller" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:141 +#: src/components/WalletConnect/NanoContract/NanoContractExecInfo.js:143 msgid "Couldn't determine address, select one" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:38 +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:48 #, javascript-format msgid "Position ${ idx }" msgstr "" -#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:44 -msgid "Argument List" +#: src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js:93 +msgid "Arguments" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:70 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 msgid "You have received a new Nano Contract Transaction. Please" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:72 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 msgid "carefully review the details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:74 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:76 msgid "before deciding to accept or decline." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:78 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:80 msgid "Review transaction details" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:96 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:98 msgid "Caution: There are risks associated with signing dapp transaction requests." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:102 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionModal.js:104 msgid "Read More." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:177 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:184 msgid "Nano Contract Not Found" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:178 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:185 msgid "" "The Nano Contract requested is not registered. First register the Nano " "Contract to interact with it." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:181 -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:227 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:188 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:235 msgid "Decline Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:196 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:203 msgid "Loading transaction information." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:223 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:231 msgid "Accept Transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:237 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:245 msgid "Sending transaction" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:238 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:246 msgid "Please wait." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:264 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 msgid "Transaction successfully sent." msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:266 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:274 msgid "Ok, close" msgstr "" -#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:272 +#: src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js:280 msgid "Error while sending transaction." msgstr "" @@ -1494,18 +1502,18 @@ msgstr "" msgid "Unregister contract" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:97 +#: src/components/NanoContract/NanoContractTransactionHeader.js:96 #. XXX: add when shrank component can be used. msgid "Date and Time" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:104 +#: src/components/NanoContract/NanoContractTransactionHeader.js:103 #: src/components/NanoContract/NanoContractTransactionsListItem.js:62 #. XXX: add when shrank component can be used. msgid "From this wallet" msgstr "" -#: src/components/NanoContract/NanoContractTransactionHeader.js:110 +#: src/components/NanoContract/NanoContractTransactionHeader.js:109 #. XXX: add when shrank component can be used. msgid "See transaction details" msgstr "" From e764d9d2aa28d1674e1999ca797007aef9de1986 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 15 Aug 2024 15:31:20 +0100 Subject: [PATCH 28/31] feat: add blueprint download to the tx loading flag and a redundancy --- .../NanoContract/NanoContractMethodArgs.js | 20 ++++++++++++++++--- .../NewNanoContractTransactionRequest.js | 9 +++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 5484fe54d..4c3b15341 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -18,6 +18,8 @@ import { COLORS } from '../../../styles/themes'; import { commonStyles } from '../theme'; import { onExceptionCaptured } from '../../../actions'; import { NANOCONTRACT_BLUEPRINTINFO_STATUS as STATUS } from '../../../constants'; +import { FeedbackContent } from '../../FeedbackContent'; +import Spinner from '../../Spinner'; /** * Get method info from registered blueprint data. @@ -68,9 +70,8 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { // or a fallback like: // >>> [['Position 0', 'abc'], ['Position 1', '00'], ['Position 2', 123]] const argEntries = useMemo(() => { - // Retrieve the fallback entries while blueprint info is being loading. if (blueprintInfo == null || blueprintInfo.status === STATUS.LOADING) { - return getFallbackArgEntries(ncArgs); + return []; } const methodInfo = getMethodInfoFromBlueprint(blueprintInfo, method); @@ -87,12 +88,25 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { return getFallbackArgEntries(ncArgs); }, [method, ncArgs, blueprintInfo]); + // Empty while downloading the bleuprint details + const isEmpty = argEntries.length === 0; + const notEmpty = !isEmpty; + return ( {t`Arguments`} - {argEntries.length + {isEmpty /* This is a reduhdancy to the general loading */ + && ( + } + offmargin + /> + ) + } + {notEmpty && ( diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index b8ee5345c..46cf7b8dc 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -31,7 +31,7 @@ import { COLORS } from '../../../styles/themes'; import NewHathorButton from '../../NewHathorButton'; import { SelectAddressModal } from '../../NanoContract/SelectAddressModal'; import { FeedbackContent } from '../../FeedbackContent'; -import { DEFAULT_TOKEN, WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS } from '../../../constants'; +import { DEFAULT_TOKEN, NANOCONTRACT_BLUEPRINTINFO_STATUS, WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS } from '../../../constants'; import Spinner from '../../Spinner'; import FeedbackModal from '../../FeedbackModal'; import errorIcon from '../../../assets/images/icErrorBig.png'; @@ -167,7 +167,12 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { dispatch(setNewNanoContractStatusReady()); }; - const isTxInfoLoading = () => knownTokens.isLoading; + // Loading while downloading: + // 1. each token details + // 2. the blueprint details + const isTxInfoLoading = () => knownTokens.isLoading + || blueprintInfo == null + || blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING; const isTxInfoLoaded = () => ( !isTxInfoLoading() && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); From 5e90771c43cb7c7d795c493ee22114bb2e55f3fb Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 15 Aug 2024 15:32:06 +0100 Subject: [PATCH 29/31] fix: FeedbackContent margin style Remarks: The `marginVertical` and `marginHorizontal` are not being applied. Probably this is a bug in ReactNative. --- src/components/FeedbackContent.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/FeedbackContent.js b/src/components/FeedbackContent.js index ae38fb256..87c47f200 100644 --- a/src/components/FeedbackContent.js +++ b/src/components/FeedbackContent.js @@ -81,8 +81,10 @@ const styles = StyleSheet.create({ shadowOpacity: 0.08, }, offMargin: { - marginHorizontal: 0, - marginVertical: 0, + marginTop: 0, + marginBottom: 0, + marginRight: 0, + marginLeft: 0, }, offBackground: { backgroundColor: COLORS.lowContrastDetail, From cad4cf24d846e1e4a344ef1a9ac7087ec90962a5 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Thu, 15 Aug 2024 17:36:39 +0100 Subject: [PATCH 30/31] lint: comply with rules --- .../WalletConnect/NanoContract/NanoContractMethodArgs.js | 3 +-- .../NanoContract/NewNanoContractTransactionRequest.js | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 4c3b15341..9ff632a71 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -104,8 +104,7 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { icon={} offmargin /> - ) - } + )} {notEmpty && ( diff --git a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js index 46cf7b8dc..238cceded 100644 --- a/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js +++ b/src/components/WalletConnect/NanoContract/NewNanoContractTransactionRequest.js @@ -170,9 +170,11 @@ export const NewNanoContractTransactionRequest = ({ ncTxRequest }) => { // Loading while downloading: // 1. each token details // 2. the blueprint details - const isTxInfoLoading = () => knownTokens.isLoading - || blueprintInfo == null - || blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING; + const isTxInfoLoading = () => ( + knownTokens.isLoading + || blueprintInfo == null + || blueprintInfo.status === NANOCONTRACT_BLUEPRINTINFO_STATUS.LOADING + ); const isTxInfoLoaded = () => ( !isTxInfoLoading() && newTxStatus !== WALLETCONNECT_NEW_NANOCONTRACT_TX_STATUS.LOADING ); From 26b2f967eff91b35bcc3a592456c8bffcab08628 Mon Sep 17 00:00:00 2001 From: Alex Ruzenhack Date: Fri, 16 Aug 2024 15:30:58 +0100 Subject: [PATCH 31/31] fix: typo --- .../WalletConnect/NanoContract/NanoContractMethodArgs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js index 9ff632a71..1c7b945d8 100644 --- a/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js +++ b/src/components/WalletConnect/NanoContract/NanoContractMethodArgs.js @@ -97,7 +97,7 @@ export const NanoContractMethodArgs = ({ blueprintId, method, ncArgs }) => { {t`Arguments`} - {isEmpty /* This is a reduhdancy to the general loading */ + {isEmpty /* This is a redundancy to the general loading */ && (