status-desktop/ui/app/AppLayouts/Chat/popups/ChatCommandModal.qml

175 lines
6.2 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import utils 1.0
import shared.controls 1.0
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Popups 0.1
import StatusQ.Controls 0.1
import shared.views 1.0
import shared.panels 1.0
StatusModal {
property var store
property var contactsStore
property string commandTitle: qsTr("Send")
property string finalButtonLabel: qsTr("Request address")
property var sendChatCommand: function () {}
property bool isRequested: false
id: root
anchors.centerIn: parent
headerSettings.title: root.commandTitle
height: 504
property alias selectRecipient: selectRecipient
contentItem: Item {
width: root.width
height: childrenRect.height
TransactionStackView {
id: stack
anchors.top: parent.top
anchors.topMargin: 16
anchors.leftMargin: Style.current.padding
anchors.rightMargin: Style.current.padding
onGroupActivated: {
root.headerSettings.title = group.headerText
btnNext.text = group.footerText
}
TransactionFormGroup {
id: group1
headerText: root.commandTitle
footerText: qsTr("Continue")
StatusAccountSelector {
id: selectFromAccount
accounts: root.store.accounts
selectedAccount: {
const currAcc = root.store.currentAccount
if (currAcc.walletType !== Constants.watchWalletType) {
return currAcc
}
return null
}
currency: root.store.currentCurrency
width: stack.width
label: {
return root.isRequested ?
qsTr("Receive on account") :
qsTr("From account")
}
}
SeparatorWithIcon {
id: separator
anchors.top: selectFromAccount.bottom
anchors.topMargin: 19
icon.rotation: root.isRequested ? -90 : 90
}
StatusBaseText {
id: addressRequiredInfo
anchors.right: selectRecipient.right
anchors.bottom: selectRecipient.top
anchors.bottomMargin: -Style.current.padding
text: qsTr("Address request required")
color: Theme.palette.dangerColor1
visible: addressRequiredValidator.isWarn
}
RecipientSelector {
id: selectRecipient
accounts: root.store.accounts
contactsStore: root.contactsStore
label: root.isRequested ?
qsTr("From") :
qsTr("To")
anchors.top: separator.bottom
anchors.topMargin: 10
width: stack.width
onSelectedRecipientChanged: {
addressRequiredValidator.address = root.isRequested ? selectFromAccount.selectedAccount.address : selectRecipient.selectedRecipient.address
}
}
}
TransactionFormGroup {
id: group2
headerText: root.commandTitle
footerText: qsTr("Preview")
AssetAndAmountInput {
id: txtAmount
selectedAccount: selectFromAccount.selectedAccount
currentCurrency: root.store.currentCurrency
getFiatValue: root.store.getFiatValue
// Not Refactored Yet
// getCryptoValue: root.store.walletModelInst.balanceView.getCryptoValue
validateBalance: !root.isRequested
width: stack.width
}
}
TransactionFormGroup {
id: group3
headerText: root.isRequested ?
qsTr("Preview") :
qsTr("Transaction preview")
footerText: root.finalButtonLabel
TransactionPreview {
id: pvwTransaction
width: stack.width
fromAccount: root.isRequested ? selectRecipient.selectedRecipient : selectFromAccount.selectedAccount
toAccount: root.isRequested ? selectFromAccount.selectedAccount : selectRecipient.selectedRecipient
asset: txtAmount.selectedAsset
amount: { "value": txtAmount.selectedAmount, "fiatValue": txtAmount.selectedFiatAmount }
toWarn: addressRequiredValidator.isWarn
currency: root.store.currentCurrency
}
AddressRequiredValidator {
id: addressRequiredValidator
anchors.bottom: parent.bottom
anchors.bottomMargin: Style.current.padding
}
}
}
}
leftButtons: [
StatusBackButton {
visible: !stack.isFirstGroup
onClicked: {
stack.back()
}
}
]
rightButtons: [
StatusButton {
id: btnNext
text: qsTr("Next")
enabled: stack.currentGroup.isValid && !stack.currentGroup.isPending
onClicked: {
const validity = stack.currentGroup.validate()
if (validity.isValid && !validity.isPending) {
if (stack.isLastGroup) {
root.sendChatCommand(selectFromAccount.selectedAccount.address,
txtAmount.selectedAmount,
txtAmount.selectedAsset.symbol,
txtAmount.selectedAsset.decimals)
return root.close()
}
stack.next()
}
}
}
]
}