129 lines
4.4 KiB
QML
129 lines
4.4 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick 2.15
|
|
import QtQml 2.15
|
|
|
|
import utils 1.0
|
|
import shared.stores 1.0
|
|
import shared.stores.send 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Utils 0.1 as SQUtils
|
|
|
|
import "./controls"
|
|
import "./views"
|
|
|
|
QtObject {
|
|
id: root
|
|
|
|
enum RecipientAddressObjectType {
|
|
Address, // Just a string with the address information / default
|
|
Account, // Wallet account object
|
|
SavedAddress, // Saved addresses object
|
|
RecentsAddress // Recent addresses object got from transactions history
|
|
}
|
|
|
|
function recipientAddressObjectTypeToString(type) {
|
|
switch (type) {
|
|
case RecipientAddressObjectType.Address:
|
|
return "Address"
|
|
case RecipientAddressObjectType.Account:
|
|
return "Account"
|
|
case RecipientAddressObjectType.SavedAddress:
|
|
return "SavedAddress"
|
|
case RecipientAddressObjectType.RecentsAddress:
|
|
return "RecentsAddress"
|
|
default:
|
|
return "Unknown"
|
|
}
|
|
}
|
|
|
|
function createSendModalRequirements() {
|
|
return {
|
|
preSelectedAccount: null,
|
|
preSelectedRecipientType: Helpers.RecipientAddressObjectType.Address,
|
|
preSelectedRecipient: null,
|
|
preSelectedHoldingType: Constants.TokenType.Unknown,
|
|
preSelectedHoldingID: "",
|
|
preDefinedAmountToSend: "",
|
|
preSelectedChainId: 0,
|
|
preSelectedSendType: Constants.SendType.Transfer
|
|
}
|
|
}
|
|
|
|
// \c token is an collectible object in case of \c isCollectible == true otherwise a token code (e.g. "ETH")
|
|
function lookupAddressesForSendModal(accountsModel,
|
|
savedAddressesModel,
|
|
senderAddress,
|
|
recipientAddress,
|
|
token,
|
|
isCollectible,
|
|
amount,
|
|
chainId) {
|
|
let req = createSendModalRequirements()
|
|
|
|
req.preSelectedSendType = Constants.SendType.Transfer
|
|
|
|
// Sender properties:
|
|
let senderAccount = null
|
|
let resolvedAcc = SQUtils.ModelUtils.getByKey(accountsModel, "address", senderAddress)
|
|
if (resolvedAcc) {
|
|
req.preSelectedAccount = resolvedAcc
|
|
req.preSelectedRecipientType = Helpers.RecipientAddressObjectType.Account
|
|
}
|
|
|
|
// Recipients properties:
|
|
const resAcc = SQUtils.ModelUtils.getByKey(accountsModel, "address", recipientAddress)
|
|
let resSaved = SQUtils.ModelUtils.getByKey(savedAddressesModel, "address", recipientAddress)
|
|
if (resAcc) {
|
|
req.preSelectedRecipientType = Helpers.RecipientAddressObjectType.Account
|
|
req.preSelectedRecipient = resAcc
|
|
} else if (resSaved) {
|
|
req.preSelectedRecipientType = Helpers.RecipientAddressObjectType.SavedAddress
|
|
req.preSelectedRecipient = resSaved
|
|
} else {
|
|
req.preSelectedRecipientType = Helpers.RecipientAddressObjectType.Address
|
|
req.preSelectedRecipient = recipientAddress
|
|
}
|
|
|
|
req.preSelectedHoldingType = isCollectible ? Constants.TokenType.ERC721 : Constants.TokenType.ERC20
|
|
req.preSelectedHoldingID = token
|
|
req.preSelectedChainId = chainId
|
|
|
|
req.preDefinedAmountToSend = LocaleUtils.numberToLocaleString(amount)
|
|
|
|
return req
|
|
}
|
|
|
|
function assetsSectionTitle(sectionNeeded, hasCommunityTokens, isInsideCollection, isERC20List) {
|
|
let title = ""
|
|
if (!isInsideCollection) {
|
|
if (sectionNeeded) {
|
|
title = qsTr("Community minted")
|
|
} else {
|
|
if (!isERC20List) {
|
|
// Show "Other" only if there are "Community minted" tokens on the list
|
|
if (hasCommunityTokens) {
|
|
title = qsTr("Other")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return title
|
|
}
|
|
|
|
function modelHasCommunityTokens(model, isERC20List) {
|
|
if (model.count > 0) {
|
|
let item
|
|
if (isERC20List) {
|
|
item = model.get(model.count - 1)
|
|
} else {
|
|
item = model.get(0)
|
|
}
|
|
return item.isCommunityAsset
|
|
}
|
|
|
|
return false
|
|
}
|
|
}
|