2020-06-17 19:18:31 +00:00
|
|
|
import QtQuick 2.13
|
2020-07-30 05:18:54 +00:00
|
|
|
import QtQuick.Controls 2.13
|
2020-06-25 19:31:30 +00:00
|
|
|
import QtQuick.Dialogs 1.3
|
2021-09-28 15:04:06 +00:00
|
|
|
|
|
|
|
import utils 1.0
|
2020-06-09 19:29:57 +00:00
|
|
|
import "../../../../shared"
|
2021-01-12 10:58:53 +00:00
|
|
|
import "../../../../shared/status"
|
2020-06-09 19:29:57 +00:00
|
|
|
|
|
|
|
ModalPopup {
|
|
|
|
id: popup
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Add a watch-only account"
|
|
|
|
title: qsTrId("add-watch-account")
|
2020-06-09 19:29:57 +00:00
|
|
|
|
|
|
|
property int marginBetweenInputs: 38
|
2020-06-22 17:26:47 +00:00
|
|
|
property string addressError: ""
|
|
|
|
property string accountNameValidationError: ""
|
2020-06-25 19:31:30 +00:00
|
|
|
property bool loading: false
|
fix: loading of wallet history, display of tx datetime
Fixes: #2539.
Transaction history is now correctly being fetched from status-go as per mobile. Firstly, when accounts are added (ie as watch accounts), `wallet_checkRecentHistory` must be called first so that the status-go db is populated. After that, `wallet_getTransfersByAddress` can be called. On app load, when we run the `initBalance` logic, we are calling `wallet_getTransfersByAddress`, asking for the last 20 transactions with the `loadMore` parameter set to false. When the user navigates to the Wallet > History tab, they can then click “Load More” to fetch more transactions from status-go. Once the number of transactions returns false below the expected amount, the remaining transactions to fetch have been exhausted and the “Load More” button is disabled.
feat: add non-archival node warning to the UI to indicate to the user that they may not have complete results
feat: set active account to the added account
Once an account is added to the wallet, that newly added account is selected as the active account.
1. The “load more” button is active when new transactions that aren’t already displayed are returned from `wallet_getTransfersByAddress`. This is the only way to enable or disable the “Load more” button as status-go is not able to return information regarding whether or not there are more transactions to be fetched. The downside to this is that lets say the last page of transactions is returned, but there are no more pages left. These returned txs are not currently displayed, so the “load more” button will still be enabled. However, the next click of the button will return 0 results, thus disabling it. It’s effectively an extra click to get to the disabled state.
2. For more information on how the `toBlock` parameter operates for the `wallet_getTransfersForAddress` RPC call, see https://notes.status.im/XmENTrVRRaqhwE4gK0m8Mg?view.
2021-05-31 14:03:41 +00:00
|
|
|
property var onAfterAddAccount: function() {}
|
2020-06-22 17:26:47 +00:00
|
|
|
|
|
|
|
function validate() {
|
|
|
|
if (addressInput.text === "") {
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "You need to enter an address"
|
|
|
|
addressError = qsTrId("you-need-to-enter-an-address")
|
2020-06-22 17:26:47 +00:00
|
|
|
} else if (!Utils.isAddress(addressInput.text)) {
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "This needs to be a valid address (starting with 0x)"
|
|
|
|
addressError = qsTrId("this-needs-to-be-a-valid-address-(starting-with-0x)")
|
2020-06-22 17:26:47 +00:00
|
|
|
} else {
|
|
|
|
addressError = ""
|
|
|
|
}
|
|
|
|
|
|
|
|
if (accountNameInput.text === "") {
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "You need to enter an account name"
|
|
|
|
accountNameValidationError = qsTrId("you-need-to-enter-an-account-name")
|
2020-06-22 17:26:47 +00:00
|
|
|
} else {
|
|
|
|
accountNameValidationError = ""
|
|
|
|
}
|
|
|
|
|
|
|
|
return addressError === "" && accountNameValidationError === ""
|
|
|
|
}
|
2020-06-09 19:29:57 +00:00
|
|
|
|
|
|
|
onOpened: {
|
2020-12-02 18:51:56 +00:00
|
|
|
addressError = "";
|
|
|
|
accountNameValidationError = "";
|
2020-06-09 19:29:57 +00:00
|
|
|
addressInput.text = "";
|
2020-11-27 15:13:35 +00:00
|
|
|
accountNameInput.text = "";
|
2021-03-16 19:19:48 +00:00
|
|
|
accountColorInput.selectedColor = Style.current.accountColors[Math.floor(Math.random() * Style.current.accountColors.length)]
|
2020-06-09 19:29:57 +00:00
|
|
|
addressInput.forceActiveFocus(Qt.MouseFocusReason)
|
|
|
|
}
|
|
|
|
|
|
|
|
Input {
|
|
|
|
id: addressInput
|
|
|
|
// TODO add QR code reader for the address
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Enter address..."
|
|
|
|
placeholderText: qsTrId("enter-address...")
|
|
|
|
//% "Account address"
|
|
|
|
label: qsTrId("wallet-key-title")
|
2020-06-22 17:26:47 +00:00
|
|
|
validationError: popup.addressError
|
2020-06-09 19:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Input {
|
|
|
|
id: accountNameInput
|
|
|
|
anchors.top: addressInput.bottom
|
|
|
|
anchors.topMargin: marginBetweenInputs
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Enter an account name..."
|
|
|
|
placeholderText: qsTrId("enter-an-account-name...")
|
|
|
|
//% "Account name"
|
|
|
|
label: qsTrId("account-name")
|
2020-06-22 17:26:47 +00:00
|
|
|
validationError: popup.accountNameValidationError
|
2020-06-09 19:29:57 +00:00
|
|
|
}
|
|
|
|
|
2021-01-20 16:24:21 +00:00
|
|
|
StatusWalletColorSelect {
|
2020-06-09 19:29:57 +00:00
|
|
|
id: accountColorInput
|
|
|
|
anchors.top: accountNameInput.bottom
|
|
|
|
anchors.topMargin: marginBetweenInputs
|
2020-07-30 05:18:54 +00:00
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
2020-06-09 19:29:57 +00:00
|
|
|
}
|
|
|
|
|
2021-01-12 10:58:53 +00:00
|
|
|
footer: StatusButton {
|
2020-06-09 19:29:57 +00:00
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.right: parent.right
|
2021-01-12 10:58:53 +00:00
|
|
|
text: loading ?
|
2020-07-06 20:39:55 +00:00
|
|
|
//% "Loading..."
|
|
|
|
qsTrId("loading") :
|
2021-02-18 16:36:05 +00:00
|
|
|
//% "Add account"
|
|
|
|
qsTrId("add-account")
|
2020-06-09 19:29:57 +00:00
|
|
|
|
2021-01-12 10:58:53 +00:00
|
|
|
enabled: !loading && addressInput.text !== "" && accountNameInput.text !== ""
|
2020-06-25 19:31:30 +00:00
|
|
|
|
|
|
|
MessageDialog {
|
|
|
|
id: accountError
|
|
|
|
title: "Adding the account failed"
|
|
|
|
icon: StandardIcon.Critical
|
|
|
|
standardButtons: StandardButton.Ok
|
|
|
|
}
|
2020-06-09 19:29:57 +00:00
|
|
|
|
|
|
|
onClicked : {
|
2020-06-25 19:31:30 +00:00
|
|
|
// TODO the loaidng doesn't work because the function freezes th eview. Might need to use threads
|
|
|
|
loading = true
|
2020-06-22 17:26:47 +00:00
|
|
|
if (!validate()) {
|
2020-06-30 20:01:37 +00:00
|
|
|
errorSound.play()
|
2020-06-25 19:31:30 +00:00
|
|
|
return loading = false
|
|
|
|
}
|
|
|
|
|
2021-06-08 12:48:31 +00:00
|
|
|
const error = walletModel.accountsView.addWatchOnlyAccount(addressInput.text, accountNameInput.text, accountColorInput.selectedColor);
|
2020-06-25 19:31:30 +00:00
|
|
|
loading = false
|
|
|
|
if (error) {
|
2020-06-30 20:01:37 +00:00
|
|
|
errorSound.play()
|
2020-06-25 19:31:30 +00:00
|
|
|
accountError.text = error
|
|
|
|
return accountError.open()
|
2020-06-22 17:26:47 +00:00
|
|
|
}
|
fix: loading of wallet history, display of tx datetime
Fixes: #2539.
Transaction history is now correctly being fetched from status-go as per mobile. Firstly, when accounts are added (ie as watch accounts), `wallet_checkRecentHistory` must be called first so that the status-go db is populated. After that, `wallet_getTransfersByAddress` can be called. On app load, when we run the `initBalance` logic, we are calling `wallet_getTransfersByAddress`, asking for the last 20 transactions with the `loadMore` parameter set to false. When the user navigates to the Wallet > History tab, they can then click “Load More” to fetch more transactions from status-go. Once the number of transactions returns false below the expected amount, the remaining transactions to fetch have been exhausted and the “Load More” button is disabled.
feat: add non-archival node warning to the UI to indicate to the user that they may not have complete results
feat: set active account to the added account
Once an account is added to the wallet, that newly added account is selected as the active account.
1. The “load more” button is active when new transactions that aren’t already displayed are returned from `wallet_getTransfersByAddress`. This is the only way to enable or disable the “Load more” button as status-go is not able to return information regarding whether or not there are more transactions to be fetched. The downside to this is that lets say the last page of transactions is returned, but there are no more pages left. These returned txs are not currently displayed, so the “load more” button will still be enabled. However, the next click of the button will return 0 results, thus disabling it. It’s effectively an extra click to get to the disabled state.
2. For more information on how the `toBlock` parameter operates for the `wallet_getTransfersForAddress` RPC call, see https://notes.status.im/XmENTrVRRaqhwE4gK0m8Mg?view.
2021-05-31 14:03:41 +00:00
|
|
|
popup.onAfterAddAccount()
|
2020-06-09 19:29:57 +00:00
|
|
|
popup.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*##^##
|
|
|
|
Designer {
|
|
|
|
D{i:0;formeditorColor:"#ffffff";height:500;width:400}
|
|
|
|
}
|
|
|
|
##^##*/
|