wip: Request payment modal 2

This commit is contained in:
Emil Sawicki 2024-11-11 14:10:27 +01:00
parent 363b79574d
commit 1d00614e0a
4 changed files with 26 additions and 86 deletions

View File

@ -29,31 +29,6 @@ SplitView {
orientation: Qt.Horizontal
ListModel {
id: plainTokensModel
ListElement {
key: "aave"
name: "Aave"
symbol: "AAVE"
image: "https://cryptologos.cc/logos/aave-aave-logo.png"
communityId: ""
}
ListElement {
key: "usdc"
name: "USDC"
symbol: "USDC"
image: ""
communityId: ""
}
ListElement {
key: "hst"
name: "Decision Token"
symbol: "HST"
image: "https://etherscan.io/token/images/horizonstate2_28.png"
communityId: ""
}
}
QtObject {
id: d
readonly property var tokenBySymbolModel: TokensBySymbolModel {}
@ -70,7 +45,6 @@ SplitView {
walletTokensStore: WalletStores.TokensStore {
plainTokensBySymbolModel: TokensBySymbolModel {}
}
readonly property var baseGroupedAccountAssetModel: GroupedAccountsAssetsModel {}
assetsWithFilteredBalances: thisWalletAssetStore.groupedAccountsAssetsModel
}
@ -80,7 +54,8 @@ SplitView {
readonly property SharedStores.RequestPaymentStore requestPaymentStore: SharedStores.RequestPaymentStore {
currencyStore: d.currencyStore
flatNetworksModel: d.flatNetworks
processedAssetsModel: d.walletAssetsStore.renamedTokensBySymbolModel
processedAssetsModel: d.walletAssetsStore.jointModel
plainAssetsModel: d.walletAssetsStore.walletTokensStore.plainTokensBySymbolModel
accountsModel: d.accounts
}
}
@ -100,7 +75,7 @@ SplitView {
onClicked: d.launchPopup()
}
Component.onCompleted: d.launchPopup()
Component.onCompleted: Qt.callLater(d.launchPopup)
Component {
id: requestPaymentModalComponent

View File

@ -4,6 +4,7 @@ QtObject {
required property CurrenciesStore currencyStore
required property var flatNetworksModel
required property var processedAssetsModel
required property var plainAssetsModel
required property var accountsModel
property var requestPaymentModel: ListModel {}

View File

@ -1,14 +1,11 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQml.Models 2.15
import QtGraphicalEffects 1.15
import StatusQ 0.1
import StatusQ.Controls 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Core.Utils 0.1 as SQUtils
import StatusQ.Components.private 0.1 as SQP
import StatusQ.Components 0.1
import StatusQ.Popups.Dialog 0.1
@ -29,10 +26,9 @@ StatusDialog {
property int selectedNetworkChainId: Constants.chains.mainnetChainId
property string selectedAccountAddress
property string selectedTokenKey: Constants.ethToken
onSelectedTokenKeyChanged: Qt.callLater(d.reevaluateSelectedId)
readonly property string amount: {
if (!d.isSelectedHoldingValidAsset || !d.selectedHolding.marketDetails || !d.selectedHolding.marketDetails.currencyPrice) {
if (!d.isSelectedHoldingValidAsset || !d.selectedHolding.item.marketDetails || !d.selectedHolding.item.marketDetails.currencyPrice) {
return "0"
}
return amountToSendInput.text
@ -49,33 +45,32 @@ StatusDialog {
title: qsTr("Payment request")
onOpened: {
// Setting value here because to prevent not updating when selected token key is filled
d.selectedHolding.value = Qt.binding(function() { return root.selectedTokenKey })
if (!!root.selectedTokenKey) {
holdingSelector.setSelection(d.selectedHolding.item.symbol, d.selectedHolding.item.iconSource, d.selectedHolding.item.tokensKey)
}
}
QtObject {
id: d
// FIXME use ModelEntry
property var selectedHolding: SQUtils.ModelUtils.getByKey(holdingSelector.model, "tokensKey", root.selectedTokenKey)
readonly property bool isSelectedHoldingValidAsset: !!selectedHolding
readonly property ModelEntry selectedHolding: ModelEntry {
sourceModel: holdingSelector.model
key: "tokensKey"
}
readonly property bool isSelectedHoldingValidAsset: !!selectedHolding.item
readonly property var adaptor: TokenSelectorViewAdaptor {
assetsModel: root.store.processedAssetsModel
flatNetworksModel: root.flatNetworksModel
currentCurrency: root.store.currencyStore.currentCurrency
plainTokensBySymbolModel: root.store.plainAssetsModel
showAllTokens: true
}
// FIXME drop after using ModelEntry, shouldn't be needed
function reevaluateSelectedId() {
const entry = SQUtils.ModelUtils.getByKey(holdingSelector.model, "tokensKey", root.selectedTokenKey)
if (entry) {
holdingSelector.setSelection(entry.symbol, entry.iconSource, entry.tokensKey)
} else {
root.selectedTokenKey = ""
holdingSelector.reset()
}
d.selectedHolding = entry
}
}
footer: StatusDialogFooter {
@ -90,10 +85,7 @@ StatusDialog {
disabledColor: Theme.palette.directColor8
enabled: amountToSendInput.valid && !amountToSendInput.empty && amountToSendInput.asNumber > 0
interactive: true
onClicked: {
// TODO_ES handle
root.accept()
}
onClicked: root.accept()
}
}
}
@ -113,51 +105,22 @@ StatusDialog {
Layout.fillWidth: true
readonly property bool ready: valid && !empty
readonly property string selectedSymbol: root.selectedTokenKey
// For backward compatibility. To be removed when
// dependent components (NetworkSelector, AmountToReceive)
// are refactored.
readonly property double asNumber: {
if (!valid)
return 0
return parseFloat(text.replace(LocaleUtils.userInputLocale.decimalPoint, "."))
}
readonly property int minSendCryptoDecimals:
!fiatMode ? LocaleUtils.fractionalPartLength(asNumber) : 0
readonly property int minReceiveCryptoDecimals:
!fiatMode ? minSendCryptoDecimals + 1 : 0
readonly property int minSendFiatDecimals:
fiatMode ? LocaleUtils.fractionalPartLength(asNumber) : 0
readonly property int minReceiveFiatDecimals:
fiatMode ? minSendFiatDecimals + 1 : 0
// End of to-be-removed part
multiplierIndex: 9
// !!holdingSelector.selectedItem
// && !!holdingSelector.selectedItem.decimals
// ? holdingSelector.selectedItem.decimals : 0
// price: d.isSelectedHoldingValidAsset
// ? (d.selectedHolding ?
// d.selectedHolding.marketDetails.currencyPrice.amount : 1)
// : 1
price: 1
multiplierIndex: d.isSelectedHoldingValidAsset && !!d.selectedHolding.item.decimals ? d.selectedHolding.item.decimals : 0
price: d.isSelectedHoldingValidAsset && !!d.selectedHolding.item.marketDetails ? d.selectedHolding.item.marketDetails.currencyPrice.amount : 1
formatFiat: amount => root.store.currencyStore.formatCurrencyAmount(
amount, root.store.currencyStore.currentCurrency)
formatBalance: amount => root.store.currencyStore.formatCurrencyAmount(
amount, selectedSymbol)
amount, root.selectedTokenKey)
showSeparator: true
onValidChanged: {
}
onAmountChanged: {
}
AssetSelector {
id: holdingSelector

View File

@ -4,6 +4,7 @@ QtObject {
required property CurrenciesStore currencyStore
required property var flatNetworksModel
required property var processedAssetsModel
required property var plainAssetsModel
required property var accountsModel
property var requestPaymentModel: null