status-desktop/ui/imports/shared/views/profile/ProfileShowcaseAccountsView...

170 lines
6.2 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.Core.Utils 0.1 as StatusQUtils
import StatusQ.Popups 0.1
import shared.controls.delegates 1.0
import utils 1.0
import AppLayouts.Wallet.stores 1.0 as WalletStores
Item {
id: root
required property string mainDisplayName
required property bool sendToAccountEnabled
required property var accountsModel
required property WalletStores.RootStore walletStore
property alias cellWidth: accountsView.cellWidth
property alias cellHeight: accountsView.cellHeight
signal copyToClipboard(string text)
signal sendToAccountRequested(string recipientAddress)
StatusBaseText {
anchors.centerIn: parent
visible: (accountsView.count === 0)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: Theme.palette.directColor1
text: qsTr("%1 has not shared any accounts").arg(root.mainDisplayName)
}
StatusGridView {
id: accountsView
anchors.fill: parent
topMargin: Theme.bigPadding
bottomMargin: Theme.bigPadding
leftMargin: Theme.bigPadding
visible: count
ScrollBar.vertical: StatusScrollBar { anchors.right: parent.right; anchors.rightMargin: width / 2 }
model: root.accountsModel
delegate: InfoCard {
id: accountInfoDelegate
implicitWidth: GridView.view.cellWidth - Theme.padding
implicitHeight: GridView.view.cellHeight - Theme.padding
title: model.name
subTitle: StatusQUtils.Utils.elideAndFormatWalletAddress(model.address)
asset.color: Utils.getColorForId(model.colorId)
asset.emoji: model.emoji ?? ""
asset.name: asset.emoji || "filled-account"
asset.isLetterIdenticon: asset.emoji
asset.letterSize: 14
asset.bgColor: Theme.palette.primaryColor3
asset.isImage: asset.emoji
rightSideButtons: RowLayout {
StatusFlatRoundButton {
Layout.preferredWidth: 32
Layout.preferredHeight: 32
visible: accountInfoDelegate.hovered && model.canReceiveFromMyAccounts
type: StatusFlatRoundButton.Type.Secondary
icon.name: "send"
icon.color: !hovered ? Theme.palette.baseColor1 : Theme.palette.directColor1
enabled: root.sendToAccountEnabled
onClicked: root.sendToAccountRequested(model.address)
onHoveredChanged: accountInfoDelegate.highlight = hovered
}
StatusFlatRoundButton {
id: moreButton
Layout.preferredWidth: 32
Layout.preferredHeight: 32
visible: accountInfoDelegate.hovered
type: StatusFlatRoundButton.Type.Secondary
icon.name: "more"
icon.color: (hovered || d.menuOpened) ? Theme.palette.directColor1 : Theme.palette.baseColor1
highlighted: d.menuOpened
onClicked: {
Global.openMenu(delegatesActionsMenu, this, {
x: moreButton.x,
y : moreButton.y,
accountAddress: model.address,
accountName: model.name,
accountColorId: model.colorId
});
}
onHoveredChanged: accountInfoDelegate.highlight = hovered
}
}
onClicked: {
if (mouse.button === Qt.RightButton) {
Global.openMenu(delegatesActionsMenu, this, {
accountAddress: model.address,
accountName: model.name,
accountColorId: model.colorId
});
}
}
}
}
Component {
id: delegatesActionsMenu
StatusMenu {
id: contextMenu
property string accountAddress: ""
property string accountName: ""
property string accountColorId: ""
onOpened: { d.menuOpened = true; }
onClosed: { d.menuOpened = false; }
StatusSuccessAction {
id: copyAddressAction
successText: qsTr("Copied")
text: qsTr("Copy adress")
icon.name: "copy"
onTriggered: {
root.copyToClipboard(accountAddress)
}
}
StatusAction {
text: qsTr("Show address QR")
icon.name: "qr"
onTriggered: {
Global.openShowQRPopup({
showSingleAccount: true,
switchingAccounsEnabled: false,
hasFloatingButtons: false,
name: contextMenu.accountName,
address: contextMenu.accountAddress,
colorId: contextMenu.accountColorId
})
}
}
StatusAction {
text: qsTr("Save address")
icon.name: "favourite"
onTriggered: {
Global.openAddEditSavedAddressesPopup({ addAddress: true, address: contextMenu.accountAddress })
}
}
StatusAction {
text: qsTr("View on Etherscan")
icon.name: "link"
onTriggered: {
let link = Utils.getUrlForAddressOnNetwork(Constants.networkShortChainNames.mainnet,
root.walletStore.areTestNetworksEnabled,
contextMenu.accountAddress);
Global.openLinkWithConfirmation(link, StatusQUtils.StringUtils.extractDomainFromLink(link));
}
}
}
}
QtObject {
id: d
property bool menuOpened: false
}
}