status-desktop/ui/imports/shared/views/profile/ProfileShowcaseAssetsView.qml

132 lines
4.3 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import StatusQ.Controls 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Popups 0.1
import shared.controls 1.0
import shared.controls.delegates 1.0
import utils 1.0
Item {
id: root
required property string mainDisplayName
required property var assetsModel
required property bool sendToAccountEnabled
property alias cellWidth: assetsView.cellWidth
property alias cellHeight: assetsView.cellHeight
signal closeRequested()
signal visitCommunity(var model)
StatusBaseText {
anchors.centerIn: parent
visible: (assetsView.count === 0)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: Theme.palette.directColor1
text: qsTr("%1 has not shared any assets").arg(root.mainDisplayName)
}
StatusGridView {
id: assetsView
anchors.fill: parent
topMargin: Theme.bigPadding
bottomMargin: Theme.bigPadding
leftMargin: Theme.bigPadding
visible: count
model: root.assetsModel
ScrollBar.vertical: StatusScrollBar { anchors.right: parent.right; anchors.rightMargin: width / 2 }
delegate: InfoCard {
id: assetsInfoDelegate
width: GridView.view.cellWidth - Theme.padding
height: GridView.view.cellHeight - Theme.padding
title: model.name
//TODO show balance & symbol
subTitle: model.decimals + " " + model.symbol
asset.name: Constants.tokenIcon(model.symbol)
asset.isImage: true
ExpandableTag {
id: communityTag
visible: !!model.communityImage
tagName: model.communityName
tagImage: model.communityImage
onTagClicked: {
Global.switchToCommunity(model.communityId);
root.closeRequested();
}
}
rightSideButtons: RowLayout {
StatusFlatRoundButton {
implicitWidth: 24
implicitHeight: 24
visible: (assetsInfoDelegate.hovered && !communityTag.hovered && model.communityId === "")
type: StatusFlatRoundButton.Type.Secondary
icon.name: "external"
icon.width: 16
icon.height: 16
radius: width/2
icon.color: assetsInfoDelegate.hovered && !hovered ? Theme.palette.baseColor1 : Theme.palette.directColor1
enabled: root.sendToAccountEnabled
onClicked: {
//TODO check this open on CoinGecko
Global.openLink(model.url);
}
}
}
onCommunityTagClicked: {
Global.switchToCommunity(model.communityId);
root.closeRequested();
}
onClicked: {
if ((mouse.button === Qt.LeftButton) && (model.communityId !== "")) {
root.visitCommunity(model)
} else if (mouse.button === Qt.RightButton) {
Global.openMenu(delegatesActionsMenu, this, { accountAddress: model.address, communityId: model.communityId });
}
}
}
}
Component {
id: delegatesActionsMenu
StatusMenu {
id: contextMenu
property string communityId
property string accountAddress: ""
StatusAction {
text: qsTr("Visit community")
enabled: !!contextMenu.communityId
icon.name: "communities"
onTriggered: {
Global.switchToCommunity(contextMenu.communityId);
root.closeRequested();
}
}
StatusAction {
text: qsTr("View on CoinGecko")
enabled: false //contextMenu.communityId === ""
icon.name: "link"
onTriggered: {
//TODO: Get coingecko link for token
// let link = "";
// Global.openLinkWithConfirmation(link, StatusQUtils.StringUtils.extractDomainFromLink(link));
}
}
}
}
}