status-desktop/ui/app/AppLayouts/Wallet/components/SendModalContent.qml

171 lines
5.7 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Dialogs 1.3
import "../../../../imports"
import "../../../../shared"
Item {
id: sendModalContent
property var closePopup: function(){}
property alias amountInput: txtAmount
property alias passwordInput: transactionSigner.passwordInput
property string passwordValidationError: ""
function send() {
if (!validate() || !validatePassword()) {
return;
}
let result = walletModel.onSendTransaction(selectFromAccount.selectedAccount.address,
selectRecipient.selectedRecipient,
txtAmount.selectedAsset.address,
txtAmount.text,
transactionSigner.passwordInput.text)
if (!result.startsWith('0x')) {
// It's an error
sendingError.text = result
return sendingError.open()
}
sendingSuccess.text = qsTr("Transaction sent to the blockchain. You can watch the progress on Etherscan: %2/%1").arg(result).arg(walletModel.etherscanLink)
sendingSuccess.open()
}
function validatePassword() {
if (transactionSigner.passwordInput.text === "") {
//% "You need to enter a password"
passwordValidationError = qsTrId("you-need-to-enter-a-password")
} else if (transactionSigner.passwordInput.text.length < 4) {
//% "Password needs to be 4 characters or more"
passwordValidationError = qsTrId("password-needs-to-be-4-characters-or-more")
} else {
passwordValidationError = ""
}
return passwordValidationError === ""
}
function validate() {
const isRecipientValid = selectRecipient.validate()
const isAssetAndAmountValid = txtAmount.validate()
return isRecipientValid && isAssetAndAmountValid
}
function showPreview() {
pvwTransaction.visible = true
transactionSigner.visible = true
txtAmount.visible = selectFromAccount.visible = selectRecipient.visible = gasSelector.visible = false
}
function showInputs() {
pvwTransaction.visible = false
transactionSigner.visible = false
txtAmount.visible = selectFromAccount.visible = selectRecipient.visible = gasSelector.visible = true
}
anchors.left: parent.left
anchors.right: parent.right
MessageDialog {
id: sendingError
title: "Error sending the transaction"
icon: StandardIcon.Critical
standardButtons: StandardButton.Ok
onAccepted: {
sendModalContent.showInputs()
}
}
MessageDialog {
id: sendingSuccess
//% "Success sending the transaction"
title: qsTrId("success-sending-the-transaction")
icon: StandardIcon.NoIcon
standardButtons: StandardButton.Ok
onAccepted: {
closePopup()
sendModalContent.showInputs()
}
}
AssetAndAmountInput {
id: txtAmount
selectedAccount: walletModel.currentAccount
defaultCurrency: walletModel.defaultCurrency
anchors.top: parent.top
getFiatValue: walletModel.getFiatValue
getCryptoValue: walletModel.getCryptoValue
}
AccountSelector {
id: selectFromAccount
accounts: walletModel.accounts
currency: walletModel.defaultCurrency
anchors.top: txtAmount.bottom
anchors.topMargin: Style.current.padding
anchors.left: parent.left
anchors.right: parent.right
label: qsTr("From account")
onSelectedAccountChanged: {
txtAmount.selectedAccount = selectFromAccount.selectedAccount
}
}
GasSelector {
id: gasSelector
anchors.top: selectFromAccount.bottom
anchors.topMargin: Style.current.bigPadding
slowestGasPrice: walletModel.safeLowGasPrice
fastestGasPrice: walletModel.fastestGasPrice
getGasEthValue: walletModel.getGasEthValue
getFiatValue: walletModel.getFiatValue
defaultCurrency: walletModel.defaultCurrency
}
RecipientSelector {
id: selectRecipient
accounts: walletModel.accounts
contacts: profileModel.addedContacts
label: qsTr("Recipient")
anchors.top: gasSelector.bottom
anchors.topMargin: Style.current.padding
anchors.left: parent.left
anchors.right: parent.right
}
TransactionPreview {
id: pvwTransaction
visible: false
anchors.left: parent.left
anchors.right: parent.right
fromAccount: selectFromAccount.selectedAccount
gas: {
const value = walletModel.getGasEthValue(gasSelector.selectedGasPrice, gasSelector.selectedGasLimit)
const fiatValue = walletModel.getFiatValue(value, "ETH", walletModel.defaultCurrency)
return { value, "symbol": "ETH", fiatValue }
}
toAccount: selectRecipient.selectedRecipient
asset: txtAmount.selectedAsset
amount: { "value": txtAmount.selectedAmount, "fiatValue": txtAmount.selectedFiatAmount }
currency: walletModel.defaultCurrency
}
TransactionSigner {
id: transactionSigner
visible: false
anchors.left: parent.left
anchors.right: parent.right
anchors.top: pvwTransaction.bottom
anchors.topMargin: Style.current.smallPadding
signingPhrase: walletModel.signingPhrase
validationError: sendModalContent.passwordValidationError
}
}
/*##^##
Designer {
D{i:0;autoSize:true;formeditorColor:"#ffffff";height:480;width:640}
}
##^##*/