320 lines
11 KiB
QML
320 lines
11 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQml.Models 2.15
|
|
|
|
import StatusQ 0.1
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
import StatusQ.Popups.Dialog 0.1
|
|
import StatusQ.Core.Utils 0.1 as StatusQUtils
|
|
|
|
import SortFilterProxyModel 0.2
|
|
|
|
import utils 1.0
|
|
|
|
import AppLayouts.Wallet.stores 1.0 as WalletStores
|
|
|
|
Control {
|
|
id: root
|
|
|
|
property alias currentTabIndex: stackLayout.currentIndex
|
|
|
|
property int maxVisibility: Constants.ShowcaseVisibility.Everyone
|
|
|
|
property alias communitiesModel: communitiesProxyModel.sourceModel
|
|
property alias accountsModel: accountsProxyModel.sourceModel
|
|
property alias collectiblesModel: collectiblesProxyModel.sourceModel
|
|
property alias assetsModel: assetsProxyModel.sourceModel
|
|
property alias socialLinksModel: socialLinksProxyModel.sourceModel
|
|
|
|
property var globalAssetsModel
|
|
property var globalCollectiblesModel
|
|
|
|
property WalletStores.RootStore walletStore
|
|
|
|
required property string mainDisplayName
|
|
required property bool readOnly
|
|
required property bool sendToAccountEnabled
|
|
|
|
signal closeRequested()
|
|
signal copyToClipboard(string text)
|
|
signal sendToAccountRequested(string recipientAddress)
|
|
|
|
horizontalPadding: readOnly ? 20 : 40 // smaller in settings/preview
|
|
topPadding: Theme.bigPadding
|
|
|
|
StatusQUtils.QObject {
|
|
id: d
|
|
|
|
property int delegateWidthS: 152
|
|
property int delegateHeightS: 152
|
|
property int delegateWidthM: 202
|
|
property int delegateHeightM: 160
|
|
|
|
readonly property string displayNameVerySmallEmoji: StatusQUtils.Emoji.parse(root.mainDisplayName, StatusQUtils.Emoji.size.verySmall)
|
|
}
|
|
|
|
component PositionSFPM: SortFilterProxyModel {
|
|
sorters: [
|
|
RoleSorter {
|
|
roleName: "showcasePosition"
|
|
}
|
|
]
|
|
filters: [
|
|
AnyOf {
|
|
inverted: true
|
|
UndefinedFilter {
|
|
roleName: "showcaseVisibility"
|
|
}
|
|
|
|
ValueFilter {
|
|
roleName: "showcaseVisibility"
|
|
value: Constants.ShowcaseVisibility.NoOne
|
|
}
|
|
},
|
|
FastExpressionFilter {
|
|
expression: model.showcaseVisibility >= root.maxVisibility
|
|
expectedRoles: ["showcaseVisibility"]
|
|
}
|
|
]
|
|
}
|
|
|
|
PositionSFPM {
|
|
id: communitiesProxyModel
|
|
}
|
|
|
|
PositionSFPM {
|
|
id: accountsProxyModel
|
|
}
|
|
|
|
PositionSFPM {
|
|
id: collectiblesProxyModel
|
|
}
|
|
|
|
PositionSFPM {
|
|
id: assetsProxyModel
|
|
}
|
|
|
|
PositionSFPM {
|
|
id: socialLinksProxyModel
|
|
}
|
|
|
|
background: StatusDialogBackground {
|
|
color: Theme.palette.baseColor4
|
|
Rectangle {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
height: parent.radius
|
|
color: parent.color
|
|
}
|
|
Rectangle {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
height: 1
|
|
color: Theme.palette.baseColor2
|
|
}
|
|
}
|
|
|
|
contentItem: StackLayout {
|
|
id: stackLayout
|
|
|
|
anchors.fill:parent
|
|
|
|
ProfileShowcaseCommunitiesView {
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
cellWidth: d.delegateWidthM
|
|
cellHeight: d.delegateHeightM
|
|
|
|
mainDisplayName: d.displayNameVerySmallEmoji
|
|
readOnly: root.readOnly
|
|
globalAssetsModel: root.globalAssetsModel
|
|
globalCollectiblesModel: root.globalCollectiblesModel
|
|
|
|
communitiesProxyModel: communitiesProxyModel
|
|
|
|
onCloseRequested: root.closeRequested()
|
|
onCopyToClipboard: root.copyToClipboard(text)
|
|
}
|
|
|
|
ProfileShowcaseAccountsView {
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
mainDisplayName: d.displayNameVerySmallEmoji
|
|
sendToAccountEnabled: root.sendToAccountEnabled
|
|
accountsModel: accountsProxyModel
|
|
walletStore: root.walletStore
|
|
|
|
cellWidth: d.delegateWidthM
|
|
cellHeight: d.delegateHeightM
|
|
|
|
onCopyToClipboard: root.copyToClipboard(text)
|
|
onSendToAccountRequested: root.sendToAccountRequested(recipientAddress)
|
|
}
|
|
|
|
ProfileShowcaseCollectiblesView {
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
cellWidth: d.delegateWidthS
|
|
cellHeight: d.delegateHeightS
|
|
|
|
mainDisplayName: d.displayNameVerySmallEmoji
|
|
collectiblesModel: collectiblesProxyModel
|
|
walletStore: root.walletStore
|
|
|
|
onCloseRequested: root.closeRequested()
|
|
onVisitCommunity: {
|
|
Global.openPopup(visitComunityPopupComponent, {communityId: model.communityId, communityName: model.communityName,
|
|
communityLogo: model.communityImage, tokenName: model.name,
|
|
tokenImage: model.imageUrl, isAssetType: false });
|
|
}
|
|
}
|
|
|
|
// ProfileShowcaseAssetsView {
|
|
// width: parent.width
|
|
// height: parent.height
|
|
|
|
// mainDisplayName: root.mainDisplayName
|
|
// assetsModel: assetsProxyModel
|
|
// sendToAccountEnabled: root.sendToAccountEnabled
|
|
// delegatesActionsMenu: delegatesActionsMenu
|
|
|
|
// cellHeight: d.delegateHeightS
|
|
// cellWidth: d.delegateWidthS
|
|
|
|
// onCloseRequested: root.closeRequested()
|
|
// onVisitCommunity: {
|
|
// Global.openPopup(visitComunityPopupComponent, {communityId: model.communityId, communityName: model.communityName,
|
|
// communityLogo: model.communityImage, tokenName: model.name,
|
|
// tokenImage: Constants.tokenIcon(model.symbol), isAssetType: false });
|
|
// }
|
|
// }
|
|
|
|
ProfileShowcaseSocialLinksView {
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
cellWidth: d.delegateWidthS
|
|
cellHeight: d.delegateHeightS
|
|
|
|
mainDisplayName: d.displayNameVerySmallEmoji
|
|
socialLinksModel: socialLinksProxyModel
|
|
|
|
onCopyToClipboard: root.copyToClipboard(text)
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: visitComunityPopupComponent
|
|
StatusDialog {
|
|
id: visitComunityPopup
|
|
// Community related props:
|
|
property string communityId
|
|
property string communityName
|
|
property string communityLogo
|
|
|
|
// Token related props:
|
|
property string tokenName
|
|
property string tokenImage
|
|
property bool isAssetType: false
|
|
|
|
width: 521 // by design
|
|
padding: 0
|
|
destroyOnClose: true
|
|
|
|
contentItem: StatusScrollView {
|
|
id: scrollView
|
|
padding: Theme.padding
|
|
contentWidth: availableWidth
|
|
|
|
ColumnLayout {
|
|
width: scrollView.availableWidth
|
|
spacing: Theme.padding
|
|
|
|
StatusBaseText {
|
|
Layout.fillWidth: true
|
|
|
|
text: visitComunityPopup.isAssetType ? qsTr("%1 is a community minted asset. Would you like to visit the community that minted it?").arg(visitComunityPopup.tokenName) :
|
|
qsTr("%1 is a community minted collectible. Would you like to visit the community that minted it?").arg(visitComunityPopup.tokenName)
|
|
textFormat: Text.RichText
|
|
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
|
|
lineHeight: 1.2
|
|
}
|
|
|
|
// Navigate to community button
|
|
StatusListItem {
|
|
Layout.fillWidth: true
|
|
Layout.bottomMargin: Theme.halfPadding
|
|
|
|
title: visitComunityPopup.communityName
|
|
border.color: Theme.palette.baseColor2
|
|
asset.name: visitComunityPopup.communityLogo
|
|
asset.isImage: true
|
|
asset.isLetterIdenticon: !asset.name
|
|
components: [
|
|
RowLayout {
|
|
StatusIcon {
|
|
Layout.alignment: Qt.AlignVCenter
|
|
icon: "arrow-right"
|
|
color: Theme.palette.primaryColor1
|
|
}
|
|
|
|
StatusBaseText {
|
|
Layout.alignment: Qt.AlignVCenter
|
|
Layout.rightMargin: Theme.padding
|
|
|
|
text: visitComunityPopup.tokenName
|
|
font.pixelSize: Theme.additionalTextSize
|
|
color: Theme.palette.primaryColor1
|
|
}
|
|
}
|
|
]
|
|
|
|
onClicked: {
|
|
Global.switchToCommunity(visitComunityPopup.communityId);
|
|
visitComunityPopup.close();
|
|
root.closeRequested();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
header: StatusDialogHeader {
|
|
leftComponent: StatusRoundedImage {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
Layout.margins: Theme.padding
|
|
Layout.preferredWidth: 68
|
|
Layout.preferredHeight: Layout.preferredWidth
|
|
radius: visitComunityPopup.isAssetType ? width / 2 : 8
|
|
image.source: visitComunityPopup.tokenImage
|
|
showLoadingIndicator: false
|
|
image.fillMode: Image.PreserveAspectCrop
|
|
}
|
|
headline.title: visitComunityPopup.tokenName
|
|
headline.subtitle: qsTr("Minted by %1").arg(visitComunityPopup.communityName)
|
|
actions.closeButton.onClicked: { visitComunityPopup.close(); }
|
|
}
|
|
|
|
footer: StatusDialogFooter {
|
|
spacing: Theme.padding
|
|
rightButtons: ObjectModel {
|
|
StatusFlatButton {
|
|
text: qsTr("Cancel")
|
|
onClicked: {
|
|
visitComunityPopup.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|