mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-09 13:56:10 +00:00
a6c897929a
- Some NIM's models define additional (not part of the QAbstractModelItem API) method rowData to allow access to model's data on UI side - The same job can be done relying fully on public QAbstractModelItem API using ModelUtils utility. It gives full transparency if we need nim's model or other like ListModel replacement in tests/storybook - propagate `tokensStore` to unbreak the Browser's wallet menu Fixes #14805
150 lines
6.1 KiB
QML
150 lines
6.1 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Layouts 1.3
|
|
import QtGraphicalEffects 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Utils 0.1 as SQUtils
|
|
|
|
import utils 1.0
|
|
import shared 1.0
|
|
import shared.popups 1.0
|
|
import shared.status 1.0
|
|
import shared.stores 1.0 as SharedStores
|
|
import shared.popups.send 1.0
|
|
import shared.stores.send 1.0
|
|
|
|
//TODO remove this dependency!
|
|
import "../../../app/AppLayouts/Chat/stores"
|
|
import AppLayouts.Wallet.stores 1.0
|
|
|
|
// TODO: replace with StatusModal
|
|
ModalPopup {
|
|
id: stickerPackDetailsPopup
|
|
|
|
property string packId
|
|
|
|
property var store
|
|
required property TransactionStore transactionStore
|
|
required property WalletAssetsStore walletAssetsStore
|
|
property string thumbnail: ""
|
|
property string name: ""
|
|
property string author: ""
|
|
property string price
|
|
property bool installed: false;
|
|
property bool bought: false;
|
|
property bool pending: false;
|
|
property var stickers;
|
|
signal buyClicked(string packId)
|
|
|
|
Component.onCompleted: {
|
|
const idx = stickersModule.stickerPacks.findIndexById(packId, false);
|
|
if(idx === -1) close();
|
|
const item = SQUtils.ModelUtils.get(stickersModule.stickerPacks, idx)
|
|
name = item.name
|
|
author = item.author
|
|
thumbnail = item.thumbnail
|
|
price = item.price
|
|
stickers = stickersModule.stickerPacks.getStickers()
|
|
installed = item.installed
|
|
bought = item.bought
|
|
pending = item.pending
|
|
}
|
|
|
|
height: 472
|
|
header: StatusStickerPackDetails {
|
|
id: stickerGrid
|
|
packThumb: thumbnail
|
|
packName: name
|
|
packAuthor: author
|
|
packNameFontSize: 17
|
|
spacing: Style.current.padding / 2
|
|
}
|
|
|
|
contentWrapper.anchors.topMargin: 0
|
|
contentWrapper.anchors.bottomMargin: 0
|
|
contentWrapper.anchors.rightMargin: 0
|
|
StatusStickerList {
|
|
id: stickerGridInPopup
|
|
model: stickers
|
|
anchors.fill: parent
|
|
anchors.topMargin: Style.current.padding
|
|
packId: stickerPackDetailsPopup.packId
|
|
Component {
|
|
id: stickerPackPurchaseModal
|
|
SendModal {
|
|
id: buyStickersPackModal
|
|
interactive: false
|
|
store: stickerPackDetailsPopup.transactionStore
|
|
preSelectedSendType: Constants.SendType.StickersBuy
|
|
preSelectedRecipient: stickerPackDetailsPopup.store.stickersStore.getStickersMarketAddress()
|
|
preDefinedAmountToSend: LocaleUtils.numberToLocaleString(parseFloat(price))
|
|
preSelectedHoldingID: {
|
|
let token = ModelUtils.getByKey(root.walletAssetsStore.groupedAccountAssetsModel, "tokensKey", stickerPackDetailsPopup.store.stickersStore.getStatusTokenKey())
|
|
return !!token && !!token.symbol ? token.symbol : ""
|
|
}
|
|
preSelectedHoldingType: Constants.TokenType.ERC20
|
|
sendTransaction: function() {
|
|
if(bestRoutes.count === 1) {
|
|
let path = bestRoutes.firstItem()
|
|
let eip1559Enabled = path.gasFees.eip1559Enabled
|
|
let maxFeePerGas = path.gasFees.maxFeePerGasM
|
|
stickerPackDetailsPopup.store.stickersStore.authenticateAndBuy(packId,
|
|
store.selectedSenderAccount.address,
|
|
path.gasAmount,
|
|
eip1559Enabled ? "" : path.gasFees.gasPrice,
|
|
eip1559Enabled ? path.gasFees.maxPriorityFeePerGas : "",
|
|
eip1559Enabled ? maxFeePerGas : path.gasFees.gasPrice,
|
|
eip1559Enabled)
|
|
}
|
|
}
|
|
Connections {
|
|
target: stickerPackDetailsPopup.store.stickersStore.stickersModule
|
|
function onTransactionWasSent(chainId: int, txHash: string, error: string) {
|
|
if (!!error) {
|
|
if (error.includes(Constants.walletSection.cancelledMessage)) {
|
|
return
|
|
}
|
|
buyStickersPackModal.sendingError.text = error
|
|
return buyStickersPackModal.sendingError.open()
|
|
}
|
|
let url = "%1/%2".arg(buyStickersPackModal.store.getEtherscanLink(chainId)).arg(txHash)
|
|
Global.displayToastMessage(qsTr("Transaction pending..."),
|
|
qsTr("View on etherscan"),
|
|
"",
|
|
true,
|
|
Constants.ephemeralNotificationType.normal,
|
|
url)
|
|
buyStickersPackModal.close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
footer: StatusStickerButton {
|
|
anchors.right: parent.right
|
|
style: StatusStickerButton.StyleType.LargeNoIcon
|
|
packPrice: price
|
|
isInstalled: installed
|
|
isBought: bought
|
|
isPending: pending
|
|
greyedOut: !store.networkConnectionStore.stickersNetworkAvailable
|
|
tooltip.text: store.networkConnectionStore.stickersNetworkUnavailableText
|
|
onInstallClicked: {
|
|
stickersModule.install(packId);
|
|
stickerPackDetailsPopup.close();
|
|
}
|
|
onUninstallClicked: {
|
|
stickersModule.uninstall(packId);
|
|
stickerPackDetailsPopup.close();
|
|
}
|
|
onCancelClicked: function(){}
|
|
onUpdateClicked: function(){}
|
|
onBuyClicked: {
|
|
Global.openPopup(stickerPackPurchaseModal);
|
|
stickerPackDetailsPopup.buyClicked(packId);
|
|
}
|
|
}
|
|
}
|