mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-22 11:38:57 +00:00
194 lines
6.1 KiB
QML
194 lines
6.1 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
|
|
import StatusQ 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Backpressure 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Core.Utils 0.1 as StatusQUtils
|
|
|
|
import AppLayouts.Wallet 1.0
|
|
|
|
import shared.controls 1.0 as SharedControls
|
|
import shared.stores.send 1.0
|
|
import shared.popups.send.panels 1.0
|
|
import shared.popups.send 1.0
|
|
import shared.popups.send.controls 1.0
|
|
|
|
import utils 1.0
|
|
|
|
Loader {
|
|
id: root
|
|
|
|
required property var savedAddressesModel
|
|
required property var myAccountsModel
|
|
|
|
property string selectedRecipientAddress
|
|
property int selectedRecipientType: Helpers.RecipientAddressObjectType.Address
|
|
property bool interactive: true
|
|
|
|
signal resolveENS(string ensName, string uuid)
|
|
|
|
function ensNameResolved(resolvedPubKey, resolvedAddress, uuid) {
|
|
if(uuid !== d.uuid) {
|
|
return
|
|
}
|
|
root.selectedRecipientAddress = resolvedAddress
|
|
}
|
|
|
|
QtObject {
|
|
id: d
|
|
|
|
property bool isValidAddress: true
|
|
property bool isBeingEvaluated: false
|
|
|
|
property string uuid
|
|
|
|
readonly property var validateInput: Backpressure.debounce(root, 500, function (address) {
|
|
d.isValidAddress = Utils.isValidAddress(address)
|
|
const isENSName = Utils.isValidEns(address)
|
|
|
|
if(d.isValidAddress) {
|
|
root.selectedRecipientAddress = address
|
|
d.isBeingEvaluated = false
|
|
}
|
|
else if(isENSName) {
|
|
d.uuid = Utils.uuid()
|
|
return root.resolveENS(address, uuid)
|
|
} else {
|
|
root.selectedRecipientAddress = ""
|
|
d.isBeingEvaluated = false
|
|
}
|
|
})
|
|
|
|
readonly property var accountsSelectedEntry: ModelEntry {
|
|
sourceModel: root.myAccountsModel
|
|
key: "address"
|
|
value: root.selectedRecipientAddress
|
|
}
|
|
|
|
readonly property var savedAddrSelectedEntry: ModelEntry {
|
|
sourceModel: root.savedAddressesModel
|
|
key: "address"
|
|
value: root.selectedRecipientAddress
|
|
|
|
}
|
|
|
|
function clearValues() {
|
|
root.selectedRecipientAddress = ""
|
|
root.selectedRecipientType = Helpers.RecipientAddressObjectType.Address
|
|
}
|
|
}
|
|
|
|
sourceComponent: root.selectedRecipientType === Helpers.RecipientAddressObjectType.SavedAddress ?
|
|
savedAddressRecipient:
|
|
root.selectedRecipientType === Helpers.RecipientAddressObjectType.Account ?
|
|
myAccountRecipient:
|
|
root.selectedRecipientType === Helpers.RecipientAddressObjectType.RecentsAddress ?
|
|
recentsRecipient : addressRecipient
|
|
|
|
Component {
|
|
id: savedAddressRecipient
|
|
SavedAddressListItem {
|
|
implicitWidth: parent.width
|
|
modelData: d.savedAddrSelectedEntry.item
|
|
radius: 8
|
|
clearVisible: true
|
|
color: Theme.palette.indirectColor1
|
|
sensor.enabled: false
|
|
subTitle: {
|
|
if(!!modelData) {
|
|
if (!!modelData && !!modelData.ens && modelData.ens.length > 0)
|
|
return Utils.richColorText(modelData.ens, Theme.palette.directColor1)
|
|
else
|
|
return StatusQUtils.Utils.elideText(modelData.address,6,4)
|
|
}
|
|
return ""
|
|
}
|
|
onCleared: d.clearValues()
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: myAccountRecipient
|
|
SharedControls.WalletAccountListItem {
|
|
id: accountItem
|
|
readonly property var modelData: d.accountsSelectedEntry.item
|
|
|
|
name: !!modelData ? modelData.name : ""
|
|
address: !!modelData ? modelData.address : ""
|
|
emoji: !!modelData ? modelData.emoji : ""
|
|
walletColor: !!modelData ? Utils.getColorForId(modelData.colorId): ""
|
|
currencyBalance: !!modelData ? modelData.currencyBalance : ""
|
|
walletType: !!modelData ? modelData.walletType : ""
|
|
migratedToKeycard: !!modelData ? modelData.migratedToKeycard ?? false : false
|
|
accountBalance: !!modelData ? modelData.accountBalance : null
|
|
|
|
width: parent.width
|
|
radius: 8
|
|
clearVisible: true
|
|
color: Theme.palette.indirectColor1
|
|
sensor.enabled: false
|
|
subTitle: {
|
|
if(!!modelData) {
|
|
return StatusQUtils.Utils.elideAndFormatWalletAddress(modelData.address)
|
|
}
|
|
return ""
|
|
}
|
|
onCleared: d.clearValues()
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: recentsRecipient
|
|
|
|
SendRecipientInput {
|
|
width: parent.width
|
|
height: visible ? implicitHeight: 0
|
|
|
|
interactive: root.interactive
|
|
input.edit.enabled: false
|
|
input.edit.textFormat: Text.AutoText
|
|
text: root.selectedRecipientAddress
|
|
|
|
onClearClicked: d.clearValues()
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: addressRecipient
|
|
|
|
SendRecipientInput {
|
|
function validateInput() {
|
|
const plainText = StatusQUtils.StringUtils.plainText(text)
|
|
d.isBeingEvaluated = true
|
|
d.validateInput(plainText)
|
|
}
|
|
|
|
width: parent.width
|
|
height: visible ? implicitHeight: 0
|
|
|
|
interactive: root.interactive
|
|
checkMarkVisible: !d.isBeingEvaluated && d.isValidAddress
|
|
loading: d.isBeingEvaluated
|
|
input.edit.textFormat: Text.AutoText
|
|
|
|
text: {
|
|
if(!!root.selectedRecipientAddress ) {
|
|
return root.selectedRecipientAddress
|
|
}
|
|
return text
|
|
}
|
|
|
|
onTextChanged: Qt.callLater(() => validateInput())
|
|
onClearClicked: {
|
|
text = ""
|
|
d.clearValues()
|
|
}
|
|
onValidateInputRequested: Qt.callLater(() => validateInput())
|
|
}
|
|
}
|
|
}
|
|
|