chire(@desktop/wallet): Streamline send modal folder structure
fixes #12140
This commit is contained in:
parent
a75890d7be
commit
1d99d8ae97
|
@ -6,7 +6,7 @@ import Models 1.0
|
||||||
import Storybook 1.0
|
import Storybook 1.0
|
||||||
import utils 1.0
|
import utils 1.0
|
||||||
|
|
||||||
import shared.popups 1.0
|
import shared.popups.send 1.0
|
||||||
import shared.stores 1.0
|
import shared.stores 1.0
|
||||||
|
|
||||||
import StatusQ.Core.Utils 0.1
|
import StatusQ.Core.Utils 0.1
|
||||||
|
|
|
@ -14,7 +14,7 @@ import utils 1.0
|
||||||
import shared.controls 1.0
|
import shared.controls 1.0
|
||||||
import shared 1.0
|
import shared 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
import "popups"
|
import "popups"
|
||||||
import "controls"
|
import "controls"
|
||||||
|
|
|
@ -1,174 +0,0 @@
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
|
@ -595,22 +595,6 @@ QtObject {
|
||||||
return profileSectionModule.ensUsernamesModule.getGasEthValue(gweiValue, gasLimit)
|
return profileSectionModule.ensUsernamesModule.getGasEthValue(gweiValue, gasLimit)
|
||||||
}
|
}
|
||||||
|
|
||||||
function estimateGas(from_addr, to, assetSymbol, value, chainId, data) {
|
|
||||||
return walletSectionSendInst.estimateGas(from_addr, to, assetSymbol, value === "" ? "0.00" : value, chainId, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
function authenticateAndTransfer(from, to, tokenSymbol, amount, uuid, selectedRoutes) {
|
|
||||||
walletSectionSendInst.authenticateAndTransfer(from, to, tokenSymbol, amount, uuid, selectedRoutes)
|
|
||||||
}
|
|
||||||
|
|
||||||
function suggestedFees(chainId) {
|
|
||||||
return JSON.parse(walletSectionSendInst.suggestedFees(chainId))
|
|
||||||
}
|
|
||||||
|
|
||||||
function suggestedRoutes(account, amount, token, disabledFromChainIDs, disabledToChainIDs, preferredChainIds, sendType, lockedInAmounts) {
|
|
||||||
walletSectionSendInst.suggestedRoutes(account, amount, token, disabledFromChainIDs, disabledToChainIDs, preferredChainIds, sendType, lockedInAmounts)
|
|
||||||
}
|
|
||||||
|
|
||||||
function resolveENS(value) {
|
function resolveENS(value) {
|
||||||
mainModuleInst.resolveENS(value, "")
|
mainModuleInst.resolveENS(value, "")
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import shared.popups 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.controls 1.0
|
import shared.controls 1.0
|
||||||
import shared.views.chat 1.0
|
import shared.views.chat 1.0
|
||||||
|
import shared.popups.send 1.0
|
||||||
import SortFilterProxyModel 0.2
|
import SortFilterProxyModel 0.2
|
||||||
|
|
||||||
import AppLayouts.Communities.popups 1.0
|
import AppLayouts.Communities.popups 1.0
|
||||||
|
|
|
@ -15,6 +15,7 @@ import shared.panels 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
import shared.stores 1.0
|
import shared.stores 1.0
|
||||||
import shared.views.chat 1.0
|
import shared.views.chat 1.0
|
||||||
|
import shared.popups.send.stores 1.0
|
||||||
import utils 1.0
|
import utils 1.0
|
||||||
|
|
||||||
import AppLayouts.Communities.controls 1.0
|
import AppLayouts.Communities.controls 1.0
|
||||||
|
|
|
@ -10,6 +10,7 @@ import StatusQ.Components 0.1
|
||||||
import utils 1.0
|
import utils 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
|
@ -12,7 +12,7 @@ import shared 1.0
|
||||||
import shared.panels 1.0
|
import shared.panels 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.controls 1.0
|
import shared.controls 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
|
@ -6,6 +6,7 @@ import utils 1.0
|
||||||
|
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
import StatusQ.Core 0.1
|
||||||
import StatusQ.Core.Theme 0.1
|
import StatusQ.Core.Theme 0.1
|
||||||
|
|
|
@ -65,6 +65,28 @@ ColumnLayout {
|
||||||
default: return ""
|
default: return ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getErrorMessageColor(status) {
|
||||||
|
switch(status) {
|
||||||
|
case EditNetworkForm.Pending:
|
||||||
|
return Theme.palette.baseColor1
|
||||||
|
case EditNetworkForm.SameAsOther:
|
||||||
|
return Theme.palette.warningColor1
|
||||||
|
case EditNetworkForm.Verified:
|
||||||
|
return Theme.palette.successColor1
|
||||||
|
default: return Theme.palette.dangerColor1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getErrorMessageAlignment(status) {
|
||||||
|
switch(status) {
|
||||||
|
case EditNetworkForm.Pending:
|
||||||
|
case EditNetworkForm.Verified:
|
||||||
|
case EditNetworkForm.SameAsOther:
|
||||||
|
return Text.AlignLeft
|
||||||
|
default: return Text.AlignRight
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onVisibleChanged: if(!visible) {d.revertValues()}
|
onVisibleChanged: if(!visible) {d.revertValues()}
|
||||||
|
@ -152,24 +174,10 @@ ColumnLayout {
|
||||||
Qt.callLater(d.evaluateRpcEndPoint, text, true);
|
Qt.callLater(d.evaluateRpcEndPoint, text, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
errorMessageCmp.horizontalAlignment: d.evaluationStatusMainRpc === EditNetworkForm.Pending ||
|
errorMessageCmp.horizontalAlignment: d.getErrorMessageAlignment(d.evaluationStatusMainRpc)
|
||||||
d.evaluationStatusMainRpc === EditNetworkForm.Verified ||
|
|
||||||
d.evaluationStatusMainRpc === EditNetworkForm.SameAsOther ?
|
|
||||||
Text.AlignLeft: Text.AlignRight
|
|
||||||
errorMessageCmp.visible: d.evaluationStatusMainRpc !== EditNetworkForm.UnTouched
|
errorMessageCmp.visible: d.evaluationStatusMainRpc !== EditNetworkForm.UnTouched
|
||||||
errorMessageCmp.text: d.getUrlStatusText(d.evaluationStatusMainRpc, text)
|
errorMessageCmp.text: d.getUrlStatusText(d.evaluationStatusMainRpc, text)
|
||||||
errorMessageCmp.color: {
|
errorMessageCmp.color: d.getErrorMessageColor(d.evaluationStatusMainRpc)
|
||||||
switch(d.evaluationStatusMainRpc) {
|
|
||||||
case EditNetworkForm.Pending:
|
|
||||||
return Theme.palette.baseColor1
|
|
||||||
case EditNetworkForm.SameAsOther:
|
|
||||||
return Theme.palette.warningColor1
|
|
||||||
case EditNetworkForm.Verified:
|
|
||||||
return Theme.palette.successColor1
|
|
||||||
default: return Theme.palette.dangerColor1
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,23 +202,10 @@ ColumnLayout {
|
||||||
Qt.callLater(d.evaluateRpcEndPoint, text, false);
|
Qt.callLater(d.evaluateRpcEndPoint, text, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
errorMessageCmp.horizontalAlignment: d.evaluationStatusFallBackRpc === EditNetworkForm.Pending ||
|
errorMessageCmp.horizontalAlignment: d.getErrorMessageAlignment(d.evaluationStatusFallBackRpc)
|
||||||
d.evaluationStatusFallBackRpc === EditNetworkForm.Verified ||
|
|
||||||
d.evaluationStatusFallBackRpc === EditNetworkForm.SameAsOther ?
|
|
||||||
Text.AlignLeft: Text.AlignRight
|
|
||||||
errorMessageCmp.visible: d.evaluationStatusFallBackRpc !== EditNetworkForm.UnTouched
|
errorMessageCmp.visible: d.evaluationStatusFallBackRpc !== EditNetworkForm.UnTouched
|
||||||
errorMessageCmp.text: d.getUrlStatusText(d.evaluationStatusFallBackRpc, text)
|
errorMessageCmp.text: d.getUrlStatusText(d.evaluationStatusFallBackRpc, text)
|
||||||
errorMessageCmp.color: {
|
errorMessageCmp.color: d.getErrorMessageColor(d.evaluationStatusFallBackRpc)
|
||||||
switch(d.evaluationStatusFallBackRpc) {
|
|
||||||
case EditNetworkForm.Pending:
|
|
||||||
return Theme.palette.baseColor1
|
|
||||||
case EditNetworkForm.SameAsOther:
|
|
||||||
return Theme.palette.warningColor1
|
|
||||||
case EditNetworkForm.Verified:
|
|
||||||
return Theme.palette.successColor1
|
|
||||||
default: return Theme.palette.dangerColor1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusInput {
|
StatusInput {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import utils 1.0
|
||||||
|
|
||||||
import shared.controls 1.0
|
import shared.controls 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
|
import shared.popups.send.controls 1.0
|
||||||
|
|
||||||
import AppLayouts.stores 1.0
|
import AppLayouts.stores 1.0
|
||||||
import "../stores"
|
import "../stores"
|
||||||
|
|
|
@ -23,6 +23,7 @@ import shared.popups 1.0
|
||||||
import shared.popups.keycard 1.0
|
import shared.popups.keycard 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.stores 1.0
|
import shared.stores 1.0
|
||||||
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
import StatusQ.Core.Theme 0.1
|
import StatusQ.Core.Theme 0.1
|
||||||
import StatusQ.Components 0.1
|
import StatusQ.Components 0.1
|
||||||
|
|
|
@ -1,233 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
import QtGraphicalEffects 1.13
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import shared.stores 1.0
|
|
||||||
import shared.panels 1.0
|
|
||||||
|
|
||||||
|
|
||||||
import "../"
|
|
||||||
import "../panels"
|
|
||||||
import "."
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
property string balanceErrorMessage: qsTr("Insufficient balance")
|
|
||||||
property string greaterThanOrEqualTo0ErrorMessage: qsTr("Must be greater than or equal to 0")
|
|
||||||
property string invalidInputErrorMessage: qsTr("This needs to be a number")
|
|
||||||
property string noInputErrorMessage: qsTr("Please enter an amount")
|
|
||||||
property string currentCurrency: "USD"
|
|
||||||
property alias selectedFiatAmount: txtFiatBalance.text
|
|
||||||
property alias selectedAmount: inputAmount.text
|
|
||||||
property var selectedAccount
|
|
||||||
property alias selectedAsset: selectAsset.selectedAsset
|
|
||||||
property var getFiatValue: function () {}
|
|
||||||
property var getCryptoValue: function () {}
|
|
||||||
property bool isDirty: false
|
|
||||||
property bool validateBalance: true
|
|
||||||
property bool isValid: false
|
|
||||||
property string validationError
|
|
||||||
property var formattedInputValue
|
|
||||||
property var getNetworkIcon: function(chainId){ return ""}
|
|
||||||
|
|
||||||
height: inputAmount.height + (inputAmount.validationError ? -16 - inputAmount.validationErrorTopMargin : 0) + txtFiatBalance.height + txtFiatBalance.anchors.topMargin
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.left: parent.left
|
|
||||||
|
|
||||||
function validate(checkDirty) {
|
|
||||||
let isValid = true
|
|
||||||
let error = ""
|
|
||||||
const hasTyped = checkDirty ? isDirty : true
|
|
||||||
const balance = parseFloat(txtBalance.text || "0.00")
|
|
||||||
formattedInputValue = parseFloat(inputAmount.text || "0.00")
|
|
||||||
const noInput = inputAmount.text === ""
|
|
||||||
if (noInput && hasTyped) {
|
|
||||||
error = noInputErrorMessage
|
|
||||||
isValid = false
|
|
||||||
} else if (isNaN(inputAmount.text)) {
|
|
||||||
error = invalidInputErrorMessage
|
|
||||||
isValid = false
|
|
||||||
} else if (formattedInputValue < 0.00 && hasTyped) {
|
|
||||||
error = greaterThanOrEqualTo0ErrorMessage
|
|
||||||
isValid = false
|
|
||||||
} else if (validateBalance && formattedInputValue > balance && !noInput) {
|
|
||||||
error = balanceErrorMessage
|
|
||||||
isValid = false
|
|
||||||
}
|
|
||||||
if (!isValid) {
|
|
||||||
root.validationError = error
|
|
||||||
txtBalanceDesc.color = Style.current.danger
|
|
||||||
txtBalance.color = Style.current.danger
|
|
||||||
} else {
|
|
||||||
root.validationError = ""
|
|
||||||
txtBalanceDesc.color = Style.current.secondaryText
|
|
||||||
txtBalance.color = Qt.binding(function() { return txtBalance.hovered ? Style.current.textColor : Style.current.secondaryText })
|
|
||||||
}
|
|
||||||
root.isValid = isValid
|
|
||||||
return isValid
|
|
||||||
}
|
|
||||||
|
|
||||||
onSelectedAccountChanged: {
|
|
||||||
selectAsset.assets = Qt.binding(function() {
|
|
||||||
if (selectedAccount) {
|
|
||||||
return selectedAccount.assets
|
|
||||||
}
|
|
||||||
})
|
|
||||||
txtBalance.text = Qt.binding(function() {
|
|
||||||
return selectAsset.selectedAsset ? Utils.stripTrailingZeros(selectAsset.selectedAsset.value) : ""
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
visible: root.validateBalance
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.top: parent.top
|
|
||||||
height: txtBalanceDesc.height
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
id: txtBalanceDesc
|
|
||||||
text: qsTr("Balance: ")
|
|
||||||
anchors.right: txtBalance.left
|
|
||||||
font.weight: Font.Medium
|
|
||||||
font.pixelSize: 13
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
id: txtBalance
|
|
||||||
property bool hovered: false
|
|
||||||
text: selectAsset.selectedAsset ? Utils.stripTrailingZeros(selectAsset.selectedAsset.value) : "0.00"
|
|
||||||
anchors.right: parent.right
|
|
||||||
font.weight: Font.Medium
|
|
||||||
font.pixelSize: 13
|
|
||||||
color: hovered ? Style.current.textColor : Style.current.secondaryText
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
onExited: {
|
|
||||||
txtBalance.hovered = false
|
|
||||||
}
|
|
||||||
onEntered: {
|
|
||||||
txtBalance.hovered = true
|
|
||||||
}
|
|
||||||
onClicked: {
|
|
||||||
inputAmount.text = Utils.stripTrailingZeros(selectAsset.selectedAsset.value)
|
|
||||||
txtFiatBalance.text = root.getFiatValue(inputAmount.text, selectAsset.selectedAsset.symbol, root.currentCurrency)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Input {
|
|
||||||
id: inputAmount
|
|
||||||
label: qsTr("Asset & Amount")
|
|
||||||
placeholderText: "0.00"
|
|
||||||
anchors.top: parent.top
|
|
||||||
customHeight: 56
|
|
||||||
validationErrorAlignment: TextEdit.AlignRight
|
|
||||||
validationErrorTopMargin: 8
|
|
||||||
validationErrorColor: formattedInputValue === 0 ? Style.current.warning : Style.current.danger
|
|
||||||
validationError: {
|
|
||||||
if (root.validationError) {
|
|
||||||
return root.validationError
|
|
||||||
}
|
|
||||||
if (formattedInputValue === 0) {
|
|
||||||
return qsTr("The amount is 0. Proceed only if this is desired.")
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onReleased: {
|
|
||||||
let amount = inputAmount.text.trim()
|
|
||||||
|
|
||||||
if (isNaN(amount)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (amount === "") {
|
|
||||||
txtFiatBalance.text = "0.00"
|
|
||||||
} else {
|
|
||||||
txtFiatBalance.text = root.getFiatValue(amount, selectAsset.selectedAsset.symbol, root.currentCurrency)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onTextChanged: {
|
|
||||||
root.isDirty = true
|
|
||||||
root.validate(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusAssetSelector {
|
|
||||||
id: selectAsset
|
|
||||||
anchors.top: inputAmount.top
|
|
||||||
anchors.topMargin: 28
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: Style.current.smallPadding
|
|
||||||
defaultToken: Style.png("tokens/DEFAULT-TOKEN@3x")
|
|
||||||
tokenAssetSourceFn: function (symbol) {
|
|
||||||
return symbol ? Style.png("tokens/" + symbol) : defaultToken
|
|
||||||
}
|
|
||||||
searchTokenSymbolByAddressFn: function (address) {
|
|
||||||
if(popup.selectedAccount) {
|
|
||||||
return popup.selectedAccount.findTokenSymbolByAddress(address)
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
getNetworkIcon: root.getNetworkIcon
|
|
||||||
onSelectedAssetChanged: {
|
|
||||||
if (!selectAsset.selectedAsset) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
txtBalance.text = Utils.stripTrailingZeros(selectAsset.selectedAsset.balance.amount.toFixed(4))
|
|
||||||
if (inputAmount.text === "" || isNaN(inputAmount.text)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
txtFiatBalance.text = root.getFiatValue(inputAmount.text, selectAsset.selectedAsset.symbol, root.currentCurrency)
|
|
||||||
root.validate(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
height: txtFiatBalance.height
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.top: inputAmount.bottom
|
|
||||||
anchors.topMargin: inputAmount.validationError ? -16 : inputAmount.validationErrorTopMargin
|
|
||||||
|
|
||||||
StyledTextField {
|
|
||||||
id: txtFiatBalance
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.top: parent.top
|
|
||||||
color: txtFiatBalance.activeFocus ? Style.current.textColor : Style.current.secondaryText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
font.pixelSize: 12
|
|
||||||
inputMethodHints: Qt.ImhFormattedNumbersOnly
|
|
||||||
text: "0.00"
|
|
||||||
selectByMouse: true
|
|
||||||
background: Rectangle {
|
|
||||||
color: Style.current.transparent
|
|
||||||
}
|
|
||||||
padding: 0
|
|
||||||
Keys.onReleased: {
|
|
||||||
let balance = txtFiatBalance.text.trim()
|
|
||||||
if (balance === "" || isNaN(balance)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
inputAmount.text = root.getCryptoValue(balance, root.currentCurrency, selectAsset.selectedAsset.symbol)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
id: txtFiatSymbol
|
|
||||||
text: root.currentCurrency
|
|
||||||
font.weight: Font.Medium
|
|
||||||
font.pixelSize: 12
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: txtFiatBalance.right
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import "."
|
|
||||||
|
|
||||||
FormGroup {
|
|
||||||
id: root
|
|
||||||
property string headerText
|
|
||||||
property string footerText
|
|
||||||
property bool showBackBtn: true
|
|
||||||
property bool showNextBtn: true
|
|
||||||
property var onBackClicked
|
|
||||||
property var onNextClicked
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Layouts 1.0
|
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
|
||||||
import StatusQ.Controls 0.1
|
|
||||||
import StatusQ.Components 0.1
|
|
||||||
import StatusQ.Core.Theme 0.1
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
|
|
||||||
StatusRadioButton {
|
|
||||||
id: gasRectangle
|
|
||||||
|
|
||||||
property string primaryText
|
|
||||||
property string timeText
|
|
||||||
property string totalGasFiatValue
|
|
||||||
property double totalGasEthValue
|
|
||||||
|
|
||||||
width: contentItem.implicitWidth
|
|
||||||
|
|
||||||
// To-do Use StatusCard instead. It crashes if I use StatusCard and
|
|
||||||
// already spent 2 days on this, so leaving it out for now
|
|
||||||
contentItem: Rectangle {
|
|
||||||
id: card
|
|
||||||
|
|
||||||
implicitHeight: 76
|
|
||||||
implicitWidth: 128
|
|
||||||
|
|
||||||
radius: 8
|
|
||||||
color: gasRectangle.checked || mouseArea.containsMouse ? "transparent": Theme.palette.baseColor4
|
|
||||||
border.color: gasRectangle.checked || mouseArea.containsMouse ? Theme.palette.primaryColor2: Theme.palette.baseColor4
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.leftMargin: 8
|
|
||||||
anchors.rightMargin: 8
|
|
||||||
anchors.topMargin: 8
|
|
||||||
StatusBaseText {
|
|
||||||
id: primaryText
|
|
||||||
font.pixelSize: 15
|
|
||||||
font.weight: Font.Medium
|
|
||||||
elide: Text.ElideRight
|
|
||||||
text: gasRectangle.primaryText
|
|
||||||
color: Theme.palette.directColor1
|
|
||||||
}
|
|
||||||
StatusBaseText {
|
|
||||||
id: secondaryLabel
|
|
||||||
Layout.maximumWidth: card.width - Style.current.smallPadding
|
|
||||||
font.pixelSize: 13
|
|
||||||
font.weight: Font.Medium
|
|
||||||
text: gasRectangle.totalGasFiatValue
|
|
||||||
color: Theme.palette.primaryColor1
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
StatusBaseText {
|
|
||||||
id: tertiaryText
|
|
||||||
font.pixelSize: 10
|
|
||||||
text: gasRectangle.timeText
|
|
||||||
color: Theme.palette.directColor5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: mouseArea
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
hoverEnabled: true
|
|
||||||
onClicked: gasRectangle.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
indicator: Item {
|
|
||||||
width:card.width
|
|
||||||
height: card.height
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,14 +2,10 @@ AddressInput 1.0 AddressInput.qml
|
||||||
AmountInput 1.0 AmountInput.qml
|
AmountInput 1.0 AmountInput.qml
|
||||||
AssetAndAmountInput 1.0 AssetAndAmountInput.qml
|
AssetAndAmountInput 1.0 AssetAndAmountInput.qml
|
||||||
AssetDelegate 1.0 AssetDelegate.qml
|
AssetDelegate 1.0 AssetDelegate.qml
|
||||||
CollectibleNestedDelegate 1.0 CollectibleNestedDelegate.qml
|
|
||||||
ContactSelector 1.0 ContactSelector.qml
|
ContactSelector 1.0 ContactSelector.qml
|
||||||
ContactsListAndSearch 1.0 ContactsListAndSearch.qml
|
ContactsListAndSearch 1.0 ContactsListAndSearch.qml
|
||||||
CopyToClipBoardButton 1.0 CopyToClipBoardButton.qml
|
CopyToClipBoardButton 1.0 CopyToClipBoardButton.qml
|
||||||
FormGroup 1.0 FormGroup.qml
|
FormGroup 1.0 FormGroup.qml
|
||||||
GasSelector 1.0 GasSelector.qml
|
|
||||||
GasSelectorButton 1.0 GasSelectorButton.qml
|
|
||||||
GasValidator 1.0 GasValidator.qml
|
|
||||||
Input 1.0 Input.qml
|
Input 1.0 Input.qml
|
||||||
RadioButtonSelector 1.0 RadioButtonSelector.qml
|
RadioButtonSelector 1.0 RadioButtonSelector.qml
|
||||||
RecipientSelector 1.0 RecipientSelector.qml
|
RecipientSelector 1.0 RecipientSelector.qml
|
||||||
|
@ -28,7 +24,6 @@ TransactionDelegate 1.0 TransactionDelegate.qml
|
||||||
TransactionAddress 1.0 TransactionAddress.qml
|
TransactionAddress 1.0 TransactionAddress.qml
|
||||||
TransactionAddressTile 1.0 TransactionAddressTile.qml
|
TransactionAddressTile 1.0 TransactionAddressTile.qml
|
||||||
TransactionDataTile 1.0 TransactionDataTile.qml
|
TransactionDataTile 1.0 TransactionDataTile.qml
|
||||||
TransactionFormGroup 1.0 TransactionFormGroup.qml
|
|
||||||
EmojiHash 1.0 EmojiHash.qml
|
EmojiHash 1.0 EmojiHash.qml
|
||||||
InformationTile 1.0 InformationTile.qml
|
InformationTile 1.0 InformationTile.qml
|
||||||
SocialLinkPreview 1.0 SocialLinkPreview.qml
|
SocialLinkPreview 1.0 SocialLinkPreview.qml
|
||||||
|
@ -45,5 +40,4 @@ GetSyncCodeDesktopInstructions 1.0 GetSyncCodeDesktopInstructions.qml
|
||||||
ErrorDetails 1.0 ErrorDetails.qml
|
ErrorDetails 1.0 ErrorDetails.qml
|
||||||
CopyButton 1.0 CopyButton.qml
|
CopyButton 1.0 CopyButton.qml
|
||||||
DisabledTooltipButton 1.0 DisabledTooltipButton.qml
|
DisabledTooltipButton 1.0 DisabledTooltipButton.qml
|
||||||
WalletAccountListItem 1.0 WalletAccountListItem.qml
|
|
||||||
ImportKeypairInfo 1.0 ImportKeypairInfo.qml
|
ImportKeypairInfo 1.0 ImportKeypairInfo.qml
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import "../"
|
|
||||||
import "./"
|
|
||||||
|
|
||||||
Column {
|
|
||||||
id: root
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
visible: !isValid
|
|
||||||
spacing: 5
|
|
||||||
|
|
||||||
property int chainId
|
|
||||||
property var account
|
|
||||||
property double amount
|
|
||||||
property var asset
|
|
||||||
property bool isValid: false
|
|
||||||
property alias errorMessage: txtValidationError.text
|
|
||||||
|
|
||||||
onAccountChanged: validate()
|
|
||||||
onAmountChanged: validate()
|
|
||||||
onAssetChanged: validate()
|
|
||||||
|
|
||||||
function validate() {
|
|
||||||
let isValid = true
|
|
||||||
if (!(account && account.assets && asset && amount >= 0)) {
|
|
||||||
return root.isValid
|
|
||||||
}
|
|
||||||
const currAcctAsset = Utils.findAssetByChainAndSymbol(root.chainId, account.assets, asset.symbol)
|
|
||||||
|
|
||||||
if (currAcctAsset && currAcctAsset.value < amount) {
|
|
||||||
isValid = false
|
|
||||||
}
|
|
||||||
root.isValid = isValid
|
|
||||||
return isValid
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: imgExclamation
|
|
||||||
width: 13.33
|
|
||||||
height: 13.33
|
|
||||||
sourceSize.height: height * 2
|
|
||||||
sourceSize.width: width * 2
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("exclamation_outline")
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtValidationError
|
|
||||||
text: qsTr("Insufficient balance")
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
font.pixelSize: 13
|
|
||||||
height: 18
|
|
||||||
color: Style.current.danger
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,193 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
|
|
||||||
import SortFilterProxyModel 0.2
|
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
|
||||||
import StatusQ.Core.Theme 0.1
|
|
||||||
import StatusQ.Core.Utils 0.1
|
|
||||||
import StatusQ.Controls 0.1
|
|
||||||
import StatusQ.Components 0.1
|
|
||||||
import StatusQ.Core.Backpressure 1.0
|
|
||||||
|
|
||||||
import shared.controls 1.0
|
|
||||||
import utils 1.0
|
|
||||||
|
|
||||||
import "../controls"
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
property var assets
|
|
||||||
property var selectedAsset
|
|
||||||
property string defaultToken
|
|
||||||
property string currentCurrencySymbol
|
|
||||||
property string placeholderText
|
|
||||||
property var hoveredToken
|
|
||||||
|
|
||||||
property var tokenAssetSourceFn: function (symbol) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
property var searchTokenSymbolByAddressFn: function (address) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
property var getNetworkIcon: function(chainId){
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetInternal() {
|
|
||||||
assets = null
|
|
||||||
selectedAsset = null
|
|
||||||
}
|
|
||||||
|
|
||||||
implicitWidth: comboBox.width
|
|
||||||
implicitHeight: comboBox.implicitHeight
|
|
||||||
|
|
||||||
onSelectedAssetChanged: {
|
|
||||||
if (selectedAsset && selectedAsset.symbol) {
|
|
||||||
d.iconSource = tokenAssetSourceFn(selectedAsset.symbol)
|
|
||||||
d.text = selectedAsset.symbol
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onHoveredTokenChanged: {
|
|
||||||
if (hoveredToken && hoveredToken.symbol) {
|
|
||||||
d.iconSource = tokenAssetSourceFn(hoveredToken.symbol)
|
|
||||||
d.text = hoveredToken.symbol
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
id: d
|
|
||||||
property string iconSource: ""
|
|
||||||
property string text: ""
|
|
||||||
property string searchString
|
|
||||||
readonly property bool isTokenSelected: !!root.selectedAsset || !!root.hoveredToken
|
|
||||||
|
|
||||||
readonly property var updateSearchText: Backpressure.debounce(root, 1000, function(inputText) {
|
|
||||||
d.searchString = inputText
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusComboBox {
|
|
||||||
id: comboBox
|
|
||||||
objectName: "assetSelectorButton"
|
|
||||||
|
|
||||||
control.padding: 4
|
|
||||||
control.popup.width: 492
|
|
||||||
control.popup.x: -root.x
|
|
||||||
control.popup.verticalPadding: 0
|
|
||||||
|
|
||||||
popupContentItemObjectName: "assetSelectorList"
|
|
||||||
|
|
||||||
model : SortFilterProxyModel {
|
|
||||||
sourceModel: root.assets
|
|
||||||
filters: [
|
|
||||||
ExpressionFilter {
|
|
||||||
expression: {
|
|
||||||
var tokenSymbolByAddress = searchTokenSymbolByAddressFn(d.searchString)
|
|
||||||
return visibleForNetwork && (
|
|
||||||
symbol.startsWith(d.searchString.toUpperCase()) || name.toUpperCase().startsWith(d.searchString.toUpperCase()) || (tokenSymbolByAddress!=="" && symbol.startsWith(tokenSymbolByAddress))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
control.background: Rectangle {
|
|
||||||
color: "transparent"
|
|
||||||
border.width: d.isTokenSelected ? 0 : 1
|
|
||||||
border.color: d.isTokenSelected ? "transparent" : Theme.palette.directColor7
|
|
||||||
radius: 12
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: RowLayout {
|
|
||||||
id: rowLayout
|
|
||||||
StatusRoundedImage {
|
|
||||||
Layout.preferredWidth: 21
|
|
||||||
Layout.preferredHeight: 21
|
|
||||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
|
||||||
visible: !!d.iconSource
|
|
||||||
image.source: d.iconSource
|
|
||||||
image.onStatusChanged: {
|
|
||||||
if (image.status === Image.Error) {
|
|
||||||
image.source = defaultToken
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
StatusBaseText {
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
font.pixelSize: 28
|
|
||||||
elide: Text.ElideRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
color: Theme.palette.miscColor1
|
|
||||||
text: d.text
|
|
||||||
visible: d.isTokenSelected
|
|
||||||
}
|
|
||||||
StatusIcon {
|
|
||||||
Layout.leftMargin: -3
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
Layout.preferredWidth: 16
|
|
||||||
Layout.preferredHeight: 16
|
|
||||||
icon: "chevron-down"
|
|
||||||
color: Theme.palette.miscColor1
|
|
||||||
visible: d.isTokenSelected
|
|
||||||
}
|
|
||||||
StatusBaseText {
|
|
||||||
Layout.alignment: Qt.AlignCenter
|
|
||||||
visible: !d.isTokenSelected
|
|
||||||
font.pixelSize: 15
|
|
||||||
font.weight: Font.Medium
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
color: Theme.palette.baseColor1
|
|
||||||
elide: Qt.ElideRight
|
|
||||||
text: placeholderText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
control.indicator: null
|
|
||||||
|
|
||||||
delegate: TokenBalancePerChainDelegate {
|
|
||||||
objectName: "AssetSelector_ItemDelegate_" + symbol
|
|
||||||
width: comboBox.control.popup.width
|
|
||||||
getNetworkIcon: root.getNetworkIcon
|
|
||||||
onTokenSelected: {
|
|
||||||
selectedAsset = selectedToken
|
|
||||||
comboBox.control.popup.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
control.currentIndex = -1
|
|
||||||
control.popup.contentItem.header = searchBox
|
|
||||||
}
|
|
||||||
|
|
||||||
control.popup.onOpened: {
|
|
||||||
control.currentIndex = -1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: searchBox
|
|
||||||
StatusInput {
|
|
||||||
width: parent.width
|
|
||||||
input.showBackground: false
|
|
||||||
placeholderText: qsTr("Search for token or enter token address")
|
|
||||||
onTextChanged: Qt.callLater(d.updateSearchText, text)
|
|
||||||
input.clearable: true
|
|
||||||
input.implicitHeight: 56
|
|
||||||
input.rightComponent: StatusFlatRoundButton {
|
|
||||||
icon.name: "search"
|
|
||||||
type: StatusFlatRoundButton.Type.Secondary
|
|
||||||
enabled: false
|
|
||||||
}
|
|
||||||
Rectangle {
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
height: 1
|
|
||||||
width: parent.width
|
|
||||||
color: Theme.palette.baseColor2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
AcceptRejectOptionsButtonsPanel 1.0 AcceptRejectOptionsButtonsPanel.qml
|
AcceptRejectOptionsButtonsPanel 1.0 AcceptRejectOptionsButtonsPanel.qml
|
||||||
Address 1.0 Address.qml
|
Address 1.0 Address.qml
|
||||||
AddressRequiredValidator 1.0 AddressRequiredValidator.qml
|
AddressRequiredValidator 1.0 AddressRequiredValidator.qml
|
||||||
BalanceValidator 1.0 BalanceValidator.qml
|
|
||||||
ChatsLoadingPanel 1.0 ChatsLoadingPanel.qml
|
ChatsLoadingPanel 1.0 ChatsLoadingPanel.qml
|
||||||
ConnectionWarnings 1.0 ConnectionWarnings.qml
|
ConnectionWarnings 1.0 ConnectionWarnings.qml
|
||||||
DidYouKnowSplashScreen 1.0 DidYouKnowSplashScreen.qml
|
DidYouKnowSplashScreen 1.0 DidYouKnowSplashScreen.qml
|
||||||
|
@ -22,9 +21,6 @@ Separator 1.0 Separator.qml
|
||||||
SeparatorWithIcon 1.0 SeparatorWithIcon.qml
|
SeparatorWithIcon 1.0 SeparatorWithIcon.qml
|
||||||
SequenceColumnLayout 1.0 SequenceColumnLayout.qml
|
SequenceColumnLayout 1.0 SequenceColumnLayout.qml
|
||||||
SplitViewHandle 1.0 SplitViewHandle.qml
|
SplitViewHandle 1.0 SplitViewHandle.qml
|
||||||
HoldingItemSelector 1.0 HoldingItemSelector.qml
|
|
||||||
HoldingSelector 1.0 HoldingSelector.qml
|
|
||||||
HoldingTypes 1.0 HoldingTypes.qml
|
|
||||||
StatusAssetSelector 1.0 StatusAssetSelector.qml
|
StatusAssetSelector 1.0 StatusAssetSelector.qml
|
||||||
StyledText 1.0 StyledText.qml
|
StyledText 1.0 StyledText.qml
|
||||||
TextWithLabel 1.0 TextWithLabel.qml
|
TextWithLabel 1.0 TextWithLabel.qml
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
import QtQuick.Dialogs 1.3
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import shared.controls 1.0
|
|
||||||
|
|
||||||
import StatusQ.Popups 0.1
|
|
||||||
import StatusQ.Controls 0.1
|
|
||||||
|
|
||||||
StatusModal {
|
|
||||||
id: root
|
|
||||||
headerSettings.title: qsTr("Select account")
|
|
||||||
height: 284
|
|
||||||
|
|
||||||
property var accounts
|
|
||||||
property string currency
|
|
||||||
property alias accountSelector: selectFromAccount
|
|
||||||
signal selectAndShareAddressButtonClicked()
|
|
||||||
|
|
||||||
contentItem: Item {
|
|
||||||
width: root.width
|
|
||||||
height: childrenRect.height
|
|
||||||
|
|
||||||
TransactionFormGroup {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.leftMargin: Style.current.padding
|
|
||||||
anchors.rightMargin: Style.current.padding
|
|
||||||
StatusAccountSelector {
|
|
||||||
id: selectFromAccount
|
|
||||||
accounts: root.accounts
|
|
||||||
currency: root.currency
|
|
||||||
width: parent.width
|
|
||||||
label: qsTr("Select account to share and receive assets")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rightButtons: [
|
|
||||||
StatusButton {
|
|
||||||
text: qsTr("Confirm and share address")
|
|
||||||
onClicked: root.selectAndShareAddressButtonClicked()
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,364 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
import QtQuick.Dialogs 1.3
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import shared.controls 1.0
|
|
||||||
|
|
||||||
import StatusQ.Popups 0.1
|
|
||||||
import StatusQ.Controls 0.1
|
|
||||||
|
|
||||||
import shared.views 1.0
|
|
||||||
import shared.panels 1.0
|
|
||||||
import shared.popups 1.0
|
|
||||||
import AppLayouts.Wallet 1.0
|
|
||||||
|
|
||||||
StatusModal {
|
|
||||||
id: root
|
|
||||||
headerSettings.title: qsTr("Send")
|
|
||||||
height: 540
|
|
||||||
|
|
||||||
property var store
|
|
||||||
property var contactsStore
|
|
||||||
|
|
||||||
property var selectedAccount
|
|
||||||
property var selectedRecipient
|
|
||||||
property var selectedAsset
|
|
||||||
property var selectedAmount
|
|
||||||
property var selectedFiatAmount
|
|
||||||
property var selectedType: RecipientSelector.Type.Address
|
|
||||||
property bool outgoing: true
|
|
||||||
property bool isARequest: false
|
|
||||||
property string msgId: ""
|
|
||||||
property string trxData: ""
|
|
||||||
property int chainId
|
|
||||||
|
|
||||||
// property alias transactionSigner: transactionSigner
|
|
||||||
|
|
||||||
// property var sendTransaction: function() {
|
|
||||||
// stack.currentGroup.isPending = true
|
|
||||||
// let success = false
|
|
||||||
// success = root.store.transfer(
|
|
||||||
// selectFromAccount.selectedAccount.address,
|
|
||||||
// selectRecipient.selectedRecipient.address,
|
|
||||||
// root.selectedAsset.symbol,
|
|
||||||
// root.selectedAmount,
|
|
||||||
// gasSelector.selectedGasLimit,
|
|
||||||
// gasSelector.suggestedFees.eip1559Enabled ? "" : gasSelector.selectedGasPrice,
|
|
||||||
// gasSelector.selectedTipLimit,
|
|
||||||
// gasSelector.selectedOverallLimit,
|
|
||||||
// transactionSigner.enteredPassword,
|
|
||||||
// root.chainId,
|
|
||||||
// stack.uuid,
|
|
||||||
// gasSelector.suggestedFees.eip1559Enabled,
|
|
||||||
// )
|
|
||||||
// // TODO remove this else once the thread and connection are back
|
|
||||||
//// if(!success){
|
|
||||||
//// //% "Invalid transaction parameters"
|
|
||||||
//// sendingError.text = qsTr("Invalid transaction parameters")
|
|
||||||
//// sendingError.open()
|
|
||||||
//// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
property MessageDialog sendingError: MessageDialog {
|
|
||||||
id: sendingError
|
|
||||||
title: qsTr("Error sending the transaction")
|
|
||||||
icon: StandardIcon.Critical
|
|
||||||
standardButtons: StandardButton.Ok
|
|
||||||
}
|
|
||||||
signal openGasEstimateErrorPopup(string message)
|
|
||||||
|
|
||||||
// onClosed: {
|
|
||||||
// stack.pop(groupPreview, StackView.Immediate)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// onOpened: {
|
|
||||||
// gasSelector.suggestedFees = root.store.suggestedFees(root.chainId)
|
|
||||||
// gasSelector.checkOptimal()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// contentItem: Item {
|
|
||||||
// width: root.width
|
|
||||||
// height: childrenRect.height
|
|
||||||
// TransactionStackView {
|
|
||||||
// id: stack
|
|
||||||
// anchors.leftMargin: Style.current.padding
|
|
||||||
// anchors.rightMargin: Style.current.padding
|
|
||||||
// initialItem: groupPreview
|
|
||||||
// isLastGroup: stack.currentGroup === groupSignTx
|
|
||||||
// onGroupActivated: {
|
|
||||||
// root.headerSettings.title = group.headerText
|
|
||||||
// btnNext.text = group.footerText
|
|
||||||
// }
|
|
||||||
// TransactionFormGroup {
|
|
||||||
// id: groupSelectAcct
|
|
||||||
// headerText: {
|
|
||||||
// // Not Refactored Yet
|
|
||||||
//// if(trxData.startsWith("0x095ea7b3")){
|
|
||||||
//// const approveData = JSON.parse(root.store.walletModelInst.tokensView.decodeTokenApproval(selectedRecipient.address, trxData))
|
|
||||||
//// if(approveData.symbol)
|
|
||||||
//// //% "Authorize %1 %2"
|
|
||||||
//// return qsTr("Error sending the transaction").arg(approveData.amount).arg(approveData.symbol)
|
|
||||||
//// }
|
|
||||||
// return qsTr("Send");
|
|
||||||
// }
|
|
||||||
// footerText: qsTr("Continue")
|
|
||||||
// showNextBtn: false
|
|
||||||
// onBackClicked: function() {
|
|
||||||
// if(validate()) {
|
|
||||||
// stack.pop()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// StatusAccountSelector {
|
|
||||||
// id: selectFromAccount
|
|
||||||
// accounts: root.store.accounts
|
|
||||||
// currency: root.store.currentCurrency
|
|
||||||
// width: stack.width
|
|
||||||
// selectedAccount: root.selectedAccount
|
|
||||||
// label: qsTr("Choose account")
|
|
||||||
// showBalanceForAssetSymbol: root.selectedAsset.symbol
|
|
||||||
// chainId: root.chainId
|
|
||||||
// minRequiredAssetBalance: parseFloat(root.selectedAmount)
|
|
||||||
// onSelectedAccountChanged: if (isValid) { gasSelector.estimateGas() }
|
|
||||||
// }
|
|
||||||
// RecipientSelector {
|
|
||||||
// id: selectRecipient
|
|
||||||
// visible: false
|
|
||||||
// accounts: root.store.accounts
|
|
||||||
// contactsStore: root.contactsStore
|
|
||||||
// selectedRecipient: root.selectedRecipient
|
|
||||||
// selectedType: root.selectedType
|
|
||||||
// readOnly: true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// TransactionFormGroup {
|
|
||||||
// id: groupSelectGas
|
|
||||||
// headerText: qsTr("Network fee")
|
|
||||||
// footerText: qsTr("Continue")
|
|
||||||
// showNextBtn: false
|
|
||||||
// onBackClicked: function() {
|
|
||||||
// stack.pop()
|
|
||||||
// }
|
|
||||||
// GasSelector {
|
|
||||||
// id: gasSelector
|
|
||||||
// anchors.topMargin: Style.current.padding
|
|
||||||
// getGasEthValue: root.store.getGasEthValue
|
|
||||||
// getFiatValue: root.store.getFiatValue
|
|
||||||
// currentCurrency: root.store.currentCurrency
|
|
||||||
// width: stack.width
|
|
||||||
|
|
||||||
// property var estimateGas: Backpressure.debounce(gasSelector, 600, function() {
|
|
||||||
// if (!(selectFromAccount.selectedAccount && selectFromAccount.selectedAccount.address &&
|
|
||||||
// selectRecipient.selectedRecipient && selectRecipient.selectedRecipient.address &&
|
|
||||||
// root.selectedAsset && root.selectedAsset.symbol &&
|
|
||||||
// root.selectedAmount)) {
|
|
||||||
// selectedGasLimit = 250000
|
|
||||||
// defaultGasLimit = selectedGasLimit
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let gasEstimate = JSON.parse(root.store.estimateGas(
|
|
||||||
// selectFromAccount.selectedAccount.address,
|
|
||||||
// selectRecipient.selectedRecipient.address,
|
|
||||||
// root.selectedAsset.symbol,
|
|
||||||
// root.selectedAmount,
|
|
||||||
// root.chainId,
|
|
||||||
// trxData
|
|
||||||
// ))
|
|
||||||
|
|
||||||
// if (!gasEstimate.success) {
|
|
||||||
// let message = qsTr("Error estimating gas: %1").arg(gasEstimate.error.message)
|
|
||||||
// root.openGasEstimateErrorPopup(message);
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// selectedGasLimit = gasEstimate.result
|
|
||||||
// defaultGasLimit = selectedGasLimit
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// GasValidator {
|
|
||||||
// id: gasValidator
|
|
||||||
// anchors.top: gasSelector.bottom
|
|
||||||
// anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
//// selectedAccount: selectFromAccount.selectedAccount
|
|
||||||
//// selectedAmount: parseFloat(root.selectedAmount)
|
|
||||||
//// selectedAsset: root.selectedAsset
|
|
||||||
//// selectedGasEthValue: gasSelector.selectedGasEthValue
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TransactionFormGroup {
|
|
||||||
// id: groupPreview
|
|
||||||
// headerText: qsTr("Transaction preview")
|
|
||||||
// footerText: qsTr("Sign with password")
|
|
||||||
// showBackBtn: false
|
|
||||||
// onNextClicked: function() {
|
|
||||||
// stack.push(groupSignTx, StackView.Immediate)
|
|
||||||
// }
|
|
||||||
// isValid: groupSelectAcct.isValid && groupSelectGas.isValid && pvwTransaction.isValid
|
|
||||||
|
|
||||||
// TransactionPreview {
|
|
||||||
// id: pvwTransaction
|
|
||||||
// width: stack.width
|
|
||||||
// fromAccount: selectFromAccount.selectedAccount
|
|
||||||
// gas: {
|
|
||||||
// "value": gasSelector.selectedGasEthValue,
|
|
||||||
// "symbol": "ETH",
|
|
||||||
// "fiatValue": gasSelector.selectedGasFiatValue
|
|
||||||
// }
|
|
||||||
// toAccount: selectRecipient.selectedRecipient
|
|
||||||
// asset: root.selectedAsset
|
|
||||||
// amount: { "value": root.selectedAmount, "fiatValue": root.selectedFiatAmount }
|
|
||||||
// currency: root.store.currentCurrency
|
|
||||||
// isFromEditable: false
|
|
||||||
// trxData: root.trxData
|
|
||||||
// isGasEditable: true
|
|
||||||
// fromValid: balanceValidator.isValid
|
|
||||||
// gasValid: gasValidator.isValid
|
|
||||||
// onFromClicked: { stack.push(groupSelectAcct, StackView.Immediate) }
|
|
||||||
// onGasClicked: { stack.push(groupSelectGas, StackView.Immediate) }
|
|
||||||
// }
|
|
||||||
// BalanceValidator {
|
|
||||||
// id: balanceValidator
|
|
||||||
// anchors.top: pvwTransaction.bottom
|
|
||||||
// anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
// account: selectFromAccount.selectedAccount
|
|
||||||
// amount: !!root.selectedAmount ? parseFloat(root.selectedAmount) : 0.0
|
|
||||||
// chainId: root.chainId
|
|
||||||
// asset: root.selectedAsset
|
|
||||||
// }
|
|
||||||
// GasValidator {
|
|
||||||
// id: gasValidator2
|
|
||||||
// anchors.top: balanceValidator.visible ? balanceValidator.bottom : pvwTransaction.bottom
|
|
||||||
// anchors.topMargin: balanceValidator.visible ? 5 : 0
|
|
||||||
// anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
//// selectedAccount: selectFromAccount.selectedAccount
|
|
||||||
//// selectedAmount: parseFloat(root.selectedAmount)
|
|
||||||
//// selectedAsset: root.selectedAsset
|
|
||||||
//// selectedGasEthValue: gasSelector.selectedGasEthValue
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// TransactionFormGroup {
|
|
||||||
// id: groupSignTx
|
|
||||||
// headerText: qsTr("Sign with password")
|
|
||||||
// footerText: qsTr("Send %1 %2").arg(root.selectedAmount).arg(!!root.selectedAsset ? root.selectedAsset.symbol : "")
|
|
||||||
// onBackClicked: function() {
|
|
||||||
// stack.pop()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TransactionSigner {
|
|
||||||
// id: transactionSigner
|
|
||||||
// width: stack.width
|
|
||||||
// signingPhrase: root.store.signingPhrase
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// leftButtons: [
|
|
||||||
// StatusBackButton {
|
|
||||||
// id: btnBack
|
|
||||||
// visible: stack.currentGroup.showBackBtn
|
|
||||||
// enabled: stack.currentGroup.isValid || stack.isLastGroup
|
|
||||||
// onClicked: {
|
|
||||||
// if (typeof stack.currentGroup.onBackClicked === "function") {
|
|
||||||
// return stack.currentGroup.onBackClicked()
|
|
||||||
// }
|
|
||||||
// stack.back()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
|
|
||||||
// rightButtons: [
|
|
||||||
// StatusButton {
|
|
||||||
// id: btnNext
|
|
||||||
// text: qsTr("Next")
|
|
||||||
// enabled: stack.currentGroup.isValid && !stack.currentGroup.isPending
|
|
||||||
// visible: stack.currentGroup.showNextBtn
|
|
||||||
// onClicked: {
|
|
||||||
// const validity = stack.currentGroup.validate()
|
|
||||||
// if (validity.isValid && !validity.isPending) {
|
|
||||||
// if (stack.isLastGroup) {
|
|
||||||
// return root.sendTransaction(gasSelector.selectedGasLimit,
|
|
||||||
// gasSelector.suggestedFees.eip1559Enabled ? "" : gasSelector.selectedGasPrice,
|
|
||||||
// gasSelector.selectedTipLimit,
|
|
||||||
// gasSelector.selectedOverallLimit,
|
|
||||||
// transactionSigner.enteredPassword)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if(gasSelector.suggestedFees.eip1559Enabled && stack.currentGroup === groupSelectGas && gasSelector.advancedMode){
|
|
||||||
// if(gasSelector.showPriceLimitWarning || gasSelector.showTipLimitWarning){
|
|
||||||
// Global.openPopup(transactionSettingsConfirmationPopupComponent, {
|
|
||||||
// currentBaseFee: gasSelector.suggestedFees.baseFee,
|
|
||||||
// currentMinimumTip: gasSelector.perGasTipLimitFloor,
|
|
||||||
// currentAverageTip: gasSelector.perGasTipLimitAverage,
|
|
||||||
// tipLimit: gasSelector.selectedTipLimit,
|
|
||||||
// suggestedTipLimit: gasSelector.perGasTipLimitFloor, // TODO:
|
|
||||||
// priceLimit: gasSelector.selectedOverallLimit,
|
|
||||||
// suggestedPriceLimit: gasSelector.suggestedFees.baseFee + gasSelector.perGasTipLimitFloor,
|
|
||||||
// showPriceLimitWarning: gasSelector.showPriceLimitWarning,
|
|
||||||
// showTipLimitWarning: gasSelector.showTipLimitWarning,
|
|
||||||
// onConfirm: function(){
|
|
||||||
// stack.next();
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// if (typeof stack.currentGroup.onNextClicked === "function") {
|
|
||||||
// return stack.currentGroup.onNextClicked()
|
|
||||||
// }
|
|
||||||
// stack.next()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
|
|
||||||
// Component {
|
|
||||||
// id: transactionSettingsConfirmationPopupComponent
|
|
||||||
// TransactionSettingsConfirmationPopup { }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Connections {
|
|
||||||
// target: root.store.walletSectionSendInst
|
|
||||||
// onTransactionSent: {
|
|
||||||
// try {
|
|
||||||
// let response = JSON.parse(txResult)
|
|
||||||
// if (response.uuid !== stack.uuid)
|
|
||||||
// return
|
|
||||||
|
|
||||||
// stack.currentGroup.isPending = false
|
|
||||||
|
|
||||||
// let transactionId = response.result
|
|
||||||
|
|
||||||
// if (!response.success) {
|
|
||||||
// if (Utils.isInvalidPasswordMessage(transactionId)){
|
|
||||||
// transactionSigner.validationError = qsTr("Wrong password")
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// sendingError.text = transactionId
|
|
||||||
// return sendingError.open()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if(isARequest)
|
|
||||||
// root.store.acceptRequestTransaction(transactionId, msgId, root.store.getPubkey() + transactionId.substr(2))
|
|
||||||
|
|
||||||
// // Refactor this
|
|
||||||
// let url = "" //`${walletModel.utilsView.etherscanLink}/${response.result}`
|
|
||||||
// Global.displayToastMessage(qsTr("Transaction pending..."),
|
|
||||||
// qsTr("View on etherscan"),
|
|
||||||
// "",
|
|
||||||
// true,
|
|
||||||
// Constants.ephemeralNotificationType.normal,
|
|
||||||
// url)
|
|
||||||
|
|
||||||
// root.close()
|
|
||||||
// } catch (e) {
|
|
||||||
// console.error('Error parsing the response', e)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,263 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
|
|
||||||
import StatusQ.Controls 0.1
|
|
||||||
|
|
||||||
import "../panels"
|
|
||||||
import "."
|
|
||||||
|
|
||||||
// TODO: replace with StatusModal
|
|
||||||
ModalPopup {
|
|
||||||
id: popup
|
|
||||||
|
|
||||||
height: 300 + (showPriceLimitWarning ? 65 : 0) + (showTipLimitWarning ? 65 : 0)
|
|
||||||
width: 400
|
|
||||||
title: qsTr("Are you sure?")
|
|
||||||
|
|
||||||
property var onConfirm: function(){}
|
|
||||||
|
|
||||||
property double currentBaseFee: 0
|
|
||||||
property double currentMinimumTip: 0
|
|
||||||
property double currentAverageTip: 0
|
|
||||||
property double tipLimit: 0
|
|
||||||
property double suggestedTipLimit: 0
|
|
||||||
property double priceLimit: 0
|
|
||||||
property double suggestedPriceLimit: 0
|
|
||||||
|
|
||||||
property bool showPriceLimitWarning: false
|
|
||||||
property bool showTipLimitWarning: false
|
|
||||||
|
|
||||||
Column {
|
|
||||||
id: content
|
|
||||||
width: 450
|
|
||||||
height: parent.height
|
|
||||||
spacing: 10
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
text: qsTr("Your priority fee is below our suggested parameters.")
|
|
||||||
font.pixelSize: 13
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Current base fee")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(currentBaseFee)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Current minimum tip")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(currentMinimumTip)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Current average tip")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(currentAverageTip)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: tipLimitRect
|
|
||||||
width: 368
|
|
||||||
visible: showTipLimitWarning
|
|
||||||
height: visible ? 70 : 0
|
|
||||||
radius: 8
|
|
||||||
color: Style.current.backgroundHoverLight
|
|
||||||
|
|
||||||
Column {
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: Style.current.smallPadding
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
height: 100
|
|
||||||
width: 450 - Style.current.smallPadding
|
|
||||||
spacing: 10
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
height: 20
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Your tip limit")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
color: Style.current.red
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(tipLimit)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
color: Style.current.red
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Suggested minimum tip")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(suggestedTipLimit)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: minPriceLimitRect
|
|
||||||
width: 368
|
|
||||||
visible: showPriceLimitWarning
|
|
||||||
height: visible ? 70 : 0
|
|
||||||
radius: 8
|
|
||||||
color: Style.current.backgroundHoverLight
|
|
||||||
|
|
||||||
Column {
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: Style.current.smallPadding
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: Style.current.smallPadding
|
|
||||||
height: 100
|
|
||||||
width: 450 - Style.current.smallPadding
|
|
||||||
spacing: 10
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
height: 20
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Your price limit")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
color: Style.current.red
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(priceLimit)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
color: Style.current.red
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("Suggested minimum price limit")
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
text: qsTr("%1 Gwei").arg(suggestedPriceLimit)
|
|
||||||
font.pixelSize: 13
|
|
||||||
width: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
footer: Item {
|
|
||||||
id: footerContainer
|
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
StatusButton {
|
|
||||||
id: cancelButton
|
|
||||||
anchors.right: confirmButton.left
|
|
||||||
anchors.rightMargin: Style.current.smallPadding
|
|
||||||
text: qsTr("Change Limit")
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
onClicked: popup.destroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusButton {
|
|
||||||
id: confirmButton
|
|
||||||
type: StatusBaseButton.Type.Danger
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: Style.current.smallPadding
|
|
||||||
text: qsTr("Continue anyway")
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
onClicked: {
|
|
||||||
popup.onConfirm();
|
|
||||||
popup.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,18 +11,13 @@ InviteFriendsPopup 1.0 InviteFriendsPopup.qml
|
||||||
NicknamePopup 1.0 NicknamePopup.qml
|
NicknamePopup 1.0 NicknamePopup.qml
|
||||||
ModalPopup 1.0 ModalPopup.qml
|
ModalPopup 1.0 ModalPopup.qml
|
||||||
PopupMenu 1.0 PopupMenu.qml
|
PopupMenu 1.0 PopupMenu.qml
|
||||||
SendModal 1.0 SendModal.qml
|
|
||||||
TransactionSettingsConfirmationPopup 1.0 TransactionSettingsConfirmationPopup.qml
|
|
||||||
UnblockContactConfirmationDialog 1.0 UnblockContactConfirmationDialog.qml
|
UnblockContactConfirmationDialog 1.0 UnblockContactConfirmationDialog.qml
|
||||||
UserStatusContextMenu 1.0 UserStatusContextMenu.qml
|
UserStatusContextMenu 1.0 UserStatusContextMenu.qml
|
||||||
SignTransactionModal 1.0 SignTransactionModal.qml
|
|
||||||
SelectAccountModal 1.0 SelectAccountModal.qml
|
|
||||||
ProfileDialog 1.0 ProfileDialog.qml
|
ProfileDialog 1.0 ProfileDialog.qml
|
||||||
ImageCropWorkflow 1.0 ImageCropWorkflow.qml
|
ImageCropWorkflow 1.0 ImageCropWorkflow.qml
|
||||||
ImportCommunityPopup 1.0 ImportCommunityPopup.qml
|
ImportCommunityPopup 1.0 ImportCommunityPopup.qml
|
||||||
DisplayNamePopup 1.0 DisplayNamePopup.qml
|
DisplayNamePopup 1.0 DisplayNamePopup.qml
|
||||||
SendContactRequestModal 1.0 SendContactRequestModal.qml
|
SendContactRequestModal 1.0 SendContactRequestModal.qml
|
||||||
AccountsModalHeader 1.0 AccountsModalHeader.qml
|
|
||||||
GetSyncCodeInstructionsPopup 1.0 GetSyncCodeInstructionsPopup.qml
|
GetSyncCodeInstructionsPopup 1.0 GetSyncCodeInstructionsPopup.qml
|
||||||
NoPermissionsToJoinPopup 1.0 NoPermissionsToJoinPopup.qml
|
NoPermissionsToJoinPopup 1.0 NoPermissionsToJoinPopup.qml
|
||||||
RemoveAccountConfirmationPopup 1.0 RemoveAccountConfirmationPopup.qml
|
RemoveAccountConfirmationPopup 1.0 RemoveAccountConfirmationPopup.qml
|
||||||
|
|
|
@ -7,7 +7,6 @@ import SortFilterProxyModel 0.2
|
||||||
|
|
||||||
import utils 1.0
|
import utils 1.0
|
||||||
import shared.stores 1.0
|
import shared.stores 1.0
|
||||||
import shared.panels 1.0
|
|
||||||
|
|
||||||
import StatusQ.Components 0.1
|
import StatusQ.Components 0.1
|
||||||
import StatusQ.Controls 0.1
|
import StatusQ.Controls 0.1
|
||||||
|
@ -17,9 +16,10 @@ import StatusQ.Core.Theme 0.1
|
||||||
import StatusQ.Core.Utils 0.1
|
import StatusQ.Core.Utils 0.1
|
||||||
import StatusQ.Popups.Dialog 0.1
|
import StatusQ.Popups.Dialog 0.1
|
||||||
|
|
||||||
import "../panels"
|
import "./panels"
|
||||||
import "../controls"
|
import "./controls"
|
||||||
import "../views"
|
import "./views"
|
||||||
|
import "./stores"
|
||||||
|
|
||||||
StatusDialog {
|
StatusDialog {
|
||||||
id: popup
|
id: popup
|
||||||
|
@ -475,11 +475,6 @@ StatusDialog {
|
||||||
onNextButtonClicked: popup.sendTransaction()
|
onNextButtonClicked: popup.sendTransaction()
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
|
||||||
id: transactionSettingsConfirmationPopupComponent
|
|
||||||
TransactionSettingsConfirmationPopup {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: popup.store.walletSectionSendInst
|
target: popup.store.walletSectionSendInst
|
||||||
function onSuggestedRoutesReady(txRoutes) {
|
function onSuggestedRoutesReady(txRoutes) {
|
|
@ -8,7 +8,7 @@ import StatusQ.Components 0.1
|
||||||
|
|
||||||
import utils 1.0
|
import utils 1.0
|
||||||
|
|
||||||
import "../panels"
|
import shared.panels 1.0
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: root
|
id: root
|
|
@ -0,0 +1,12 @@
|
||||||
|
AccountsModalHeader 1.0 AccountsModalHeader.qml
|
||||||
|
WalletAccountListItem 1.0 WalletAccountListItem.qml
|
||||||
|
GasSelector 1.0 GasSelector.qml
|
||||||
|
GasValidator 1.0 GasValidator.qml
|
||||||
|
ClearButton 1.0 ClearButton.qml
|
||||||
|
SavedAddressListItem 1.0 SavedAddressListItem.qml
|
||||||
|
TokenBalancePerChainDelegate 1.0 TokenBalancePerChainDelegate.qml
|
||||||
|
SearchBoxWithRightIcon 1.0 SearchBoxWithRightIcon.qml
|
||||||
|
AmountInputWithCursor 1.0 AmountInputWithCursor.qml
|
||||||
|
BalanceExceeded 1.0 BalanceExceeded.qml
|
||||||
|
CollectibleBackButtonWithInfo 1.0 CollectibleBackButtonWithInfo.qml
|
||||||
|
CollectibleNestedDelegate 1.0 CollectibleNestedDelegate.qml
|
|
@ -0,0 +1,2 @@
|
||||||
|
HoldingItemSelector 1.0 HoldingItemSelector.qml
|
||||||
|
HoldingSelector 1.0 HoldingSelector.qml
|
|
@ -0,0 +1 @@
|
||||||
|
SendModal 1.0 SendModal.qml
|
|
@ -0,0 +1 @@
|
||||||
|
TransactionStore 1.0 TransactionStore.qml
|
|
@ -0,0 +1,12 @@
|
||||||
|
AmountToReceive 1.0 AmountToReceive.qml
|
||||||
|
AmountToSend 1.0 AmountToSend.qml
|
||||||
|
FeesView 1.0 FeesView.qml
|
||||||
|
NetworkCardsComponent 1.0 NetworkCardsComponent.qml
|
||||||
|
NetworksAdvancedCustomRoutingView 1.0 NetworksAdvancedCustomRoutingView.qml
|
||||||
|
NetworkSelector 1.0 NetworkSelector.qml
|
||||||
|
NetworksSimpleRoutingView 1.0 NetworksSimpleRoutingView.qml
|
||||||
|
RecipientView 1.0 RecipientView.qml
|
||||||
|
SendModalFooter 1.0 SendModalFooter.qml
|
||||||
|
TabAddressSelectorView 1.0 TabAddressSelectorView.qml
|
||||||
|
TokenListView 1.0 TokenListView.qml
|
||||||
|
|
|
@ -13,6 +13,7 @@ import shared.panels 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.stores 1.0 as SharedStores
|
import shared.stores 1.0 as SharedStores
|
||||||
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
//TODO remove this dependency!
|
//TODO remove this dependency!
|
||||||
import AppLayouts.Chat.stores 1.0
|
import AppLayouts.Chat.stores 1.0
|
||||||
|
|
|
@ -10,6 +10,7 @@ import shared 1.0
|
||||||
import shared.popups 1.0
|
import shared.popups 1.0
|
||||||
import shared.status 1.0
|
import shared.status 1.0
|
||||||
import shared.stores 1.0 as SharedStores
|
import shared.stores 1.0 as SharedStores
|
||||||
|
import shared.popups.send 1.0
|
||||||
|
|
||||||
//TODO remove this dependency!
|
//TODO remove this dependency!
|
||||||
import "../../../app/AppLayouts/Chat/stores"
|
import "../../../app/AppLayouts/Chat/stores"
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
singleton RootStore 1.0 RootStore.qml
|
singleton RootStore 1.0 RootStore.qml
|
||||||
CurrenciesStore 1.0 CurrenciesStore.qml
|
CurrenciesStore 1.0 CurrenciesStore.qml
|
||||||
TransactionStore 1.0 TransactionStore.qml
|
|
||||||
CommunityTokensStore 1.0 CommunityTokensStore.qml
|
CommunityTokensStore 1.0 CommunityTokensStore.qml
|
||||||
BIP39_en 1.0 BIP39_en.qml
|
BIP39_en 1.0 BIP39_en.qml
|
||||||
ChartStoreBase 1.0 ChartStoreBase.qml
|
ChartStoreBase 1.0 ChartStoreBase.qml
|
||||||
|
|
|
@ -1,560 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
import QtQuick.Layouts 1.13
|
|
||||||
import QtGraphicalEffects 1.13
|
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
|
||||||
import StatusQ.Controls 0.1 as StatusQ
|
|
||||||
import StatusQ.Components 0.1
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
|
|
||||||
import "../status"
|
|
||||||
import "../panels"
|
|
||||||
import "../controls"
|
|
||||||
import "../popups"
|
|
||||||
import shared.controls.chat 1.0
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
property var fromAccount
|
|
||||||
property var toAccount
|
|
||||||
property var asset
|
|
||||||
property var amount
|
|
||||||
property string trxData: ""
|
|
||||||
property string currency: "USD"
|
|
||||||
property var gas
|
|
||||||
height: content.height
|
|
||||||
signal fromClicked
|
|
||||||
signal gasClicked
|
|
||||||
// Creates a mouse area around the "from account". When clicked, triggers
|
|
||||||
// the "fromClicked" signal
|
|
||||||
property bool isFromEditable: false
|
|
||||||
// Creates a mouse area around the "network fee". When clicked, triggers
|
|
||||||
// the "gasClicked" signal
|
|
||||||
property bool isGasEditable: false
|
|
||||||
property bool isValid: toValid && fromValid && gasValid
|
|
||||||
property bool fromValid: true
|
|
||||||
property bool toValid: true
|
|
||||||
property bool toWarn: false
|
|
||||||
property bool gasValid: true
|
|
||||||
|
|
||||||
Column {
|
|
||||||
id: content
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmFrom
|
|
||||||
label: qsTr("From")
|
|
||||||
value: Item {
|
|
||||||
id: itmFromValue
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
function needsRightPadding() {
|
|
||||||
return !root.fromValid || root.isFromEditable
|
|
||||||
}
|
|
||||||
Row {
|
|
||||||
spacing: Style.current.halfPadding
|
|
||||||
rightPadding: itmFromValue.needsRightPadding() ? Style.current.halfPadding : 0
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: root.fromAccount ? root.fromAccount.name : ""
|
|
||||||
elide: Text.ElideRight
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: imgFromWallet
|
|
||||||
sourceSize.height: 18
|
|
||||||
sourceSize.width: 18
|
|
||||||
visible: !!root.fromAccount ? root.fromAccount.type === RecipientSelector.Type.Account : true
|
|
||||||
horizontalAlignment: Image.AlignLeft
|
|
||||||
width: itmFromValue.needsRightPadding() ? (Style.current.halfPadding + sourceSize.width) : undefined // adding width to add addl spacing to image
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("walletIcon")
|
|
||||||
ColorOverlay {
|
|
||||||
visible: parent.visible
|
|
||||||
anchors.fill: parent
|
|
||||||
source: parent
|
|
||||||
color: root.fromAccount && root.fromAccount.color ? root.fromAccount.color : Style.current.blue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: fromInvalid
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
width: 13.33
|
|
||||||
height: 13.33
|
|
||||||
sourceSize.height: height * 2
|
|
||||||
sourceSize.width: width * 2
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("exclamation_outline")
|
|
||||||
visible: !root.fromValid
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: fromArrow
|
|
||||||
width: 13
|
|
||||||
height: 7
|
|
||||||
visible: root.isFromEditable
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("caret")
|
|
||||||
rotation: 270
|
|
||||||
ColorOverlay {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: parent.visible
|
|
||||||
source: parent
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: fromArrow.visible
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.fromClicked()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmTo
|
|
||||||
function needsRightPadding() {
|
|
||||||
return !root.toValid || root.toWarn
|
|
||||||
}
|
|
||||||
label: qsTr("Recipient")
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "Address"
|
|
||||||
when: !!root.toAccount && root.toAccount.type === RecipientSelector.Type.Address
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToPrimary
|
|
||||||
text: (!!root.toAccount && root.toAccount.address) ? root.toAccount.address : qsTr("Unknown")
|
|
||||||
elide: Text.ElideMiddle
|
|
||||||
anchors.leftMargin: 190
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToSecondary
|
|
||||||
width: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "Contact"
|
|
||||||
when: !!root.toAccount && root.toAccount.type === RecipientSelector.Type.Contact && !!root.toAccount.address
|
|
||||||
PropertyChanges {
|
|
||||||
target: metSecondary
|
|
||||||
text: root.toAccount.ensVerified ? root.toAccount.alias : root.toAccount.address
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToSecondary
|
|
||||||
anchors.right: idtToContact.left
|
|
||||||
anchors.rightMargin: Style.current.halfPadding
|
|
||||||
width: txtToSecondary.visible ? metSecondary.elidedWidth : 0
|
|
||||||
text: metSecondary.elidedText
|
|
||||||
visible: root.toAccount.address !== Constants.zeroAddress
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: idtToContact
|
|
||||||
visible: true
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToPrimary
|
|
||||||
text: root.toAccount.name
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "Account"
|
|
||||||
when: !!root.toAccount && root.toAccount.type === RecipientSelector.Type.Account && !!root.toAccount.address
|
|
||||||
PropertyChanges {
|
|
||||||
target: metSecondary
|
|
||||||
text: root.toAccount.address
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToSecondary
|
|
||||||
anchors.right: imgToWallet.left
|
|
||||||
anchors.rightMargin: Style.current.halfPadding
|
|
||||||
text: metSecondary.elidedText
|
|
||||||
width: metSecondary.elidedWidth
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: imgToWallet
|
|
||||||
visible: true
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: ovlToWallet
|
|
||||||
visible: true
|
|
||||||
color: root.toAccount.color
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: txtToPrimary
|
|
||||||
text: root.toAccount.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
id: txtToPrimary
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: txtToSeparator.visible ? txtToSeparator.left : idtToContact.left
|
|
||||||
anchors.rightMargin: txtToSeparator.visible ? 0 : Style.current.halfPadding
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtToSeparator
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: " • "
|
|
||||||
visible: txtToSecondary.visible && txtToSecondary.width > 0
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.right: txtToSecondary.left
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtToSecondary
|
|
||||||
visible: true
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
TextMetrics {
|
|
||||||
id: metSecondary
|
|
||||||
elideWidth: 102
|
|
||||||
elide: Text.ElideMiddle
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: imgToWallet
|
|
||||||
visible: false
|
|
||||||
sourceSize.height: 18
|
|
||||||
sourceSize.width: 18
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("walletIcon")
|
|
||||||
}
|
|
||||||
ColorOverlay {
|
|
||||||
id: ovlToWallet
|
|
||||||
anchors.fill: imgToWallet
|
|
||||||
visible: false
|
|
||||||
source: imgToWallet
|
|
||||||
}
|
|
||||||
UserImage {
|
|
||||||
id: idtToContact
|
|
||||||
visible: false
|
|
||||||
anchors.right: toInvalid.visible ? toInvalid.left : parent.right
|
|
||||||
anchors.rightMargin: toInvalid.visible ? Style.current.halfPadding : 0
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
name: root.toAccount.name
|
|
||||||
pubkey: root.toAccount.pubKey
|
|
||||||
image: root.toAccount.icon
|
|
||||||
ensVerified: root.toAccount.ensVerified
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: toInvalid
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.right: parent.right
|
|
||||||
width: 13.33
|
|
||||||
height: 13.33
|
|
||||||
sourceSize.height: height * 2
|
|
||||||
sourceSize.width: width * 2
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("exclamation_outline")
|
|
||||||
visible: !root.toValid || root.toWarn
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmAsset
|
|
||||||
label: qsTr("Asset")
|
|
||||||
value: Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: (root.asset && root.asset.name) ? root.asset.name : ""
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: txtAssetSymbol.left
|
|
||||||
anchors.rightMargin: Style.current.halfPadding
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtAssetSymbol
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: (root.asset && root.asset.symbol) ? root.asset.symbol : ""
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.right: imgAsset.left
|
|
||||||
anchors.rightMargin: Style.current.halfPadding
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
Image {
|
|
||||||
id: imgAsset
|
|
||||||
sourceSize.height: 32
|
|
||||||
sourceSize.width: 32
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.png("tokens/" + ((root.asset && root.asset.symbol) ? root.asset.symbol : "ETH"))
|
|
||||||
onStatusChanged: {
|
|
||||||
if (status == Image.Error) {
|
|
||||||
source = Style.png("tokens/DEFAULT-TOKEN@3x")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmAmount
|
|
||||||
label: qsTr("Amount")
|
|
||||||
value: Item {
|
|
||||||
id: amountRoot
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
StyledText {
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: (root.amount && root.amount.value) ? Utils.stripTrailingZeros(root.amount.value) : ""
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: txtAmountSymbol.left
|
|
||||||
anchors.rightMargin: 5
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtAmountSymbol
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: ((root.asset && root.asset.symbol) ? root.asset.symbol : "") + " •"
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.right: txtAmountFiat.left
|
|
||||||
anchors.rightMargin: 5
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtAmountFiat
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: "~" + (root.amount && root.amount.fiatValue ? root.amount.fiatValue : "0.00")
|
|
||||||
anchors.right: txtAmountCurrency.left
|
|
||||||
anchors.rightMargin: 5
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtAmountCurrency
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: root.currency
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmNetworkFee
|
|
||||||
label: qsTr("Network fee")
|
|
||||||
visible: !!root.gas
|
|
||||||
value: Item {
|
|
||||||
id: networkFeeRoot
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
function needsRightPadding() {
|
|
||||||
return !root.gasValid || root.isGasEditable
|
|
||||||
}
|
|
||||||
Row {
|
|
||||||
spacing: Style.current.halfPadding
|
|
||||||
rightPadding: networkFeeRoot.needsRightPadding() ? Style.current.halfPadding : 0
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
StyledText {
|
|
||||||
id: networkFeeText
|
|
||||||
font.pixelSize: 15
|
|
||||||
width: 75
|
|
||||||
height: 22
|
|
||||||
text: (root.gas && root.gas.value) ? Utils.stripTrailingZeros(root.gas.value) : ""
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
elide: Text.ElideRight
|
|
||||||
|
|
||||||
StatusQ.StatusToolTip {
|
|
||||||
enabled: networkFeeText.truncated
|
|
||||||
id: networkFeeTooltip
|
|
||||||
text: networkFeeText.text
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
enabled: networkFeeText.truncated
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: enabled
|
|
||||||
onEntered: networkFeeTooltip.visible = true
|
|
||||||
onExited: networkFeeTooltip.visible = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtFeeSymbol
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: ((root.gas && root.gas.symbol) ? root.gas.symbol : "") + " •"
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtFeeFiat
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: "~" + ((root.gas && root.gas.fiatValue) ? root.gas.fiatValue : "0.00")
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
StyledText {
|
|
||||||
id: txtFeeCurrency
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
text: root.currency
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: gasInvalid
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
width: 13.33
|
|
||||||
height: 13.33
|
|
||||||
sourceSize.height: height * 2
|
|
||||||
sourceSize.width: width * 2
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("exclamation_outline")
|
|
||||||
visible: !root.gasValid
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
id: gasArrow
|
|
||||||
width: 13
|
|
||||||
height: 7
|
|
||||||
visible: root.isGasEditable
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("caret")
|
|
||||||
rotation: 270
|
|
||||||
ColorOverlay {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: parent.visible
|
|
||||||
source: parent
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: gasArrow.visible
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.gasClicked()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LabelValueRow {
|
|
||||||
id: itmData
|
|
||||||
label: qsTr("Data")
|
|
||||||
visible: trxData !== "0x" && trxData !== ""
|
|
||||||
value: Item {
|
|
||||||
id: dataRoot
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
Row {
|
|
||||||
spacing: Style.current.halfPadding
|
|
||||||
rightPadding: 0
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
StyledText {
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 22
|
|
||||||
width: 200
|
|
||||||
text: trxData
|
|
||||||
elide: Text.ElideRight
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
SVGImage {
|
|
||||||
width: 13
|
|
||||||
height: 7
|
|
||||||
visible: true
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: Style.svg("caret")
|
|
||||||
rotation: 270
|
|
||||||
ColorOverlay {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: parent.visible
|
|
||||||
source: parent
|
|
||||||
color: Style.current.secondaryText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: replace with StatusModal
|
|
||||||
ModalPopup {
|
|
||||||
id: dataPopup
|
|
||||||
title: qsTr("Data field")
|
|
||||||
height: 286
|
|
||||||
width: 400
|
|
||||||
Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.leftMargin: 0
|
|
||||||
anchors.rightMargin: 0
|
|
||||||
StatusScrollView {
|
|
||||||
width: parent.width
|
|
||||||
height: 150
|
|
||||||
TextArea {
|
|
||||||
wrapMode: TextEdit.Wrap
|
|
||||||
readOnly: true
|
|
||||||
text: trxData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: dataPopup.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
import QtQuick 2.13
|
|
||||||
import QtQuick.Controls 2.13
|
|
||||||
|
|
||||||
import utils 1.0
|
|
||||||
import "../controls"
|
|
||||||
|
|
||||||
StackView {
|
|
||||||
id: root
|
|
||||||
default property list<FormGroup> groups
|
|
||||||
property int currentIdx: 0
|
|
||||||
property bool isLastGroup: currentIdx === groups.length - 1
|
|
||||||
property bool isFirstGroup: currentIdx === 0
|
|
||||||
signal groupActivated(Item group)
|
|
||||||
property alias currentGroup: root.currentItem
|
|
||||||
readonly property string uuid: Utils.uuid()
|
|
||||||
|
|
||||||
property var next: function() {
|
|
||||||
if (groups && groups.length <= currentIdx + 1) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const group = groups[++currentIdx]
|
|
||||||
this.push(group, StackView.Immediate)
|
|
||||||
}
|
|
||||||
property var back: function() {
|
|
||||||
if (currentIdx <= 0) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.pop()
|
|
||||||
currentIdx--
|
|
||||||
}
|
|
||||||
|
|
||||||
initialItem: groups[currentIdx]
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
// The below transitions are pointless, but without them,
|
|
||||||
// the final input in the final TransactionFormGroup will
|
|
||||||
// not be able to receive focus! Seems like a Qt bug...
|
|
||||||
pushEnter: Transition {
|
|
||||||
PropertyAnimation {
|
|
||||||
property: "opacity"
|
|
||||||
from: 1
|
|
||||||
to:1
|
|
||||||
duration: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pushExit: Transition {
|
|
||||||
PropertyAnimation {
|
|
||||||
property: "opacity"
|
|
||||||
from: 1
|
|
||||||
to:1
|
|
||||||
duration: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
popEnter: Transition {
|
|
||||||
PropertyAnimation {
|
|
||||||
property: "opacity"
|
|
||||||
from: 1
|
|
||||||
to:1
|
|
||||||
duration: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
popExit: Transition {
|
|
||||||
PropertyAnimation {
|
|
||||||
property: "opacity"
|
|
||||||
from: 1
|
|
||||||
to:1
|
|
||||||
duration: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -45,11 +45,7 @@ Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (root.state === Constants.addressRequested) {
|
// ToDo launch send modal from here
|
||||||
Global.openPopup(selectAccountModalComponent);
|
|
||||||
} else if (root.state === Constants.transactionRequested) {
|
|
||||||
Global.openPopup(signTxComponent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,41 +89,4 @@ Item {
|
||||||
gasEstimateErrorPopup.close();
|
gasEstimateErrorPopup.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
|
||||||
id: signTxComponent
|
|
||||||
SignTransactionModal {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
store: root.store
|
|
||||||
contactsStore: root.contactsStore
|
|
||||||
msgId: messageId
|
|
||||||
isARequest: true
|
|
||||||
chainId: root.store.getChainIdForChat()
|
|
||||||
onClosed: destroy()
|
|
||||||
onOpenGasEstimateErrorPopup: {
|
|
||||||
gasEstimateErrorPopup.confirmationText = message + qsTr("Decline");
|
|
||||||
gasEstimateErrorPopup.open();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
selectedAccount: {}
|
|
||||||
selectedRecipient: root.selectedRecipient
|
|
||||||
selectedAsset: token
|
|
||||||
selectedAmount: tokenAmount
|
|
||||||
selectedFiatAmount: fiatValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: selectAccountModalComponent
|
|
||||||
SelectAccountModal {
|
|
||||||
id: selectAccountModal
|
|
||||||
anchors.centerIn: parent
|
|
||||||
accounts: root.store.accounts
|
|
||||||
currency: root.store.currentCurrency
|
|
||||||
onSelectAndShareAddressButtonClicked: {
|
|
||||||
root.store.acceptAddressRequest(messageId, accountSelector.selectedAccount.address)
|
|
||||||
selectAccountModal.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,33 +225,10 @@ Item {
|
||||||
onSendTransaction: {
|
onSendTransaction: {
|
||||||
// TODO: https://github.com/status-im/status-desktop/issues/6778
|
// TODO: https://github.com/status-im/status-desktop/issues/6778
|
||||||
console.log("not implemented")
|
console.log("not implemented")
|
||||||
// Global.openPopup(signTxComponent, {selectedAccount: {
|
|
||||||
// name: root.store.getAccountNameByAddress(fromAddress),
|
|
||||||
// address: fromAddress,
|
|
||||||
// color: root.store.getAccountIconColorByAddress(fromAddress),
|
|
||||||
// assets: root.store.getAccountAssetsByAddress(fromAddress)
|
|
||||||
// }})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
|
||||||
id: signTxComponent
|
|
||||||
SignTransactionModal {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
store: root.store
|
|
||||||
contactsStore: root.contactsStore
|
|
||||||
selectedAsset: root.token
|
|
||||||
selectedAmount: root.tokenAmount
|
|
||||||
selectedRecipient: root.selectedRecipient
|
|
||||||
selectedFiatAmount: root.fiatValue
|
|
||||||
selectedType: RecipientSelector.Type.Contact
|
|
||||||
chainId: root.store.getChainIdForChat()
|
|
||||||
onClosed: destroy()
|
|
||||||
msgId: messageId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StyledText {
|
StyledText {
|
||||||
id: timeText
|
id: timeText
|
||||||
color: Style.current.secondaryText
|
color: Style.current.secondaryText
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
AmountToSend 1.0 AmountToSend.qml
|
|
||||||
AssetsView 1.0 AssetsView.qml
|
AssetsView 1.0 AssetsView.qml
|
||||||
EnsResolver 1.0 EnsResolver.qml
|
EnsResolver 1.0 EnsResolver.qml
|
||||||
ExistingContacts 1.0 ExistingContacts.qml
|
ExistingContacts 1.0 ExistingContacts.qml
|
||||||
|
@ -9,10 +8,7 @@ PasswordConfirmationView 1.0 PasswordConfirmationView.qml
|
||||||
PickedContacts 1.0 PickedContacts.qml
|
PickedContacts 1.0 PickedContacts.qml
|
||||||
ProfileDialogView 1.0 ProfileDialogView.qml
|
ProfileDialogView 1.0 ProfileDialogView.qml
|
||||||
SearchResults 1.0 SearchResults.qml
|
SearchResults 1.0 SearchResults.qml
|
||||||
TokenListView 1.0 TokenListView.qml
|
|
||||||
TransactionPreview 1.0 TransactionPreview.qml
|
|
||||||
TransactionSigner 1.0 TransactionSigner.qml
|
TransactionSigner 1.0 TransactionSigner.qml
|
||||||
TransactionStackView 1.0 TransactionStackView.qml
|
|
||||||
SyncingDeviceView 1.0 SyncingDeviceView.qml
|
SyncingDeviceView 1.0 SyncingDeviceView.qml
|
||||||
SyncingDisplayCode 1.0 SyncingDisplayCode.qml
|
SyncingDisplayCode 1.0 SyncingDisplayCode.qml
|
||||||
SyncingErrorMessage 1.0 SyncingErrorMessage.qml
|
SyncingErrorMessage 1.0 SyncingErrorMessage.qml
|
||||||
|
|
Loading…
Reference in New Issue