chore(MintedTokensSettingsPanel): simplified by integrating welcome page into MintedTokensView

Welcome info is a placeholder when list of tokens is empty. For that
reason is hander to keep in MintedTokensView instead of in MintedTokensSettingsPanel
and maintain additional state for that.
This commit is contained in:
Michał Cieślak 2023-06-27 23:56:45 +02:00 committed by Michał
parent c4e68b50db
commit 8a83aba05a
2 changed files with 157 additions and 148 deletions

View File

@ -74,12 +74,12 @@ SettingsPageLayout {
QtObject { QtObject {
id: d id: d
readonly property string initialViewState: "WELCOME_OR_LIST_TOKENS" readonly property string initialViewState: "TOKENS_LIST"
readonly property string newTokenViewState: "NEW_TOKEN" readonly property string newTokenViewState: "NEW_TOKEN"
readonly property string previewTokenViewState: "PREVIEW_TOKEN" readonly property string previewTokenViewState: "PREVIEW_TOKEN"
readonly property string tokenViewState: "VIEW_TOKEN" readonly property string tokenViewState: "VIEW_TOKEN"
readonly property string welcomePageTitle: qsTr("Tokens") readonly property string tokensListPageTitle: qsTr("Tokens")
readonly property string newCollectiblePageTitle: qsTr("Mint collectible") readonly property string newCollectiblePageTitle: qsTr("Mint collectible")
readonly property string newAssetPageTitle: qsTr("Mint asset") readonly property string newAssetPageTitle: qsTr("Mint asset")
readonly property string newTokenButtonText: qsTr("Mint token") readonly property string newTokenButtonText: qsTr("Mint token")
@ -101,29 +101,16 @@ SettingsPageLayout {
property TokenObject currentToken property TokenObject currentToken
readonly property var initialItem: (root.tokensModel && root.tokensModel.count > 0) ? mintedTokensView : welcomeView
signal airdropClicked() signal airdropClicked()
signal remoteDestructAddressClicked(string address) signal remoteDestructAddressClicked(string address)
signal retryMintClicked() signal retryMintClicked()
function updateInitialStackView() {
if(stackManager.stackView) {
if(initialItem === welcomeView)
stackManager.stackView.replace(mintedTokensView, welcomeView, StackView.Immediate)
if(initialItem === mintedTokensView)
stackManager.stackView.replace(welcomeView, mintedTokensView, StackView.Immediate)
}
}
onInitialItemChanged: updateInitialStackView()
} }
secondaryHeaderButton.type: StatusBaseButton.Type.Danger secondaryHeaderButton.type: StatusBaseButton.Type.Danger
content: StackView { content: StackView {
anchors.fill: parent anchors.fill: parent
initialItem: d.initialItem initialItem: mintedTokensView
Component.onCompleted: stackManager.pushInitialState(d.initialViewState) Component.onCompleted: stackManager.pushInitialState(d.initialViewState)
} }
@ -132,26 +119,21 @@ SettingsPageLayout {
states: [ states: [
State { State {
name: d.initialViewState name: d.initialViewState
PropertyChanges {target: root; title: d.welcomePageTitle} PropertyChanges {target: root; title: d.tokensListPageTitle}
PropertyChanges {target: root; subTitle: ""} PropertyChanges {target: root; subTitle: ""}
PropertyChanges {target: root; previousPageName: ""} PropertyChanges {target: root; previousPageName: ""}
PropertyChanges {target: root; primaryHeaderButton.visible: true} PropertyChanges {target: root; primaryHeaderButton.visible: true}
PropertyChanges {target: root; primaryHeaderButton.text: d.newTokenButtonText} PropertyChanges {target: root; primaryHeaderButton.text: d.newTokenButtonText}
PropertyChanges {target: root; secondaryHeaderButton.visible: false}
}, },
State { State {
name: d.newTokenViewState name: d.newTokenViewState
PropertyChanges {target: root; title: d.isAssetView ? d.newAssetPageTitle : d.newCollectiblePageTitle } PropertyChanges {target: root; title: d.isAssetView ? d.newAssetPageTitle : d.newCollectiblePageTitle }
PropertyChanges {target: root; subTitle: ""} PropertyChanges {target: root; subTitle: ""}
PropertyChanges {target: root; previousPageName: d.backButtonText} PropertyChanges {target: root; previousPageName: d.backButtonText}
PropertyChanges {target: root; primaryHeaderButton.visible: false}
PropertyChanges {target: root; secondaryHeaderButton.visible: false}
}, },
State { State {
name: d.previewTokenViewState name: d.previewTokenViewState
PropertyChanges {target: root; previousPageName: d.backButtonText} PropertyChanges {target: root; previousPageName: d.backButtonText}
PropertyChanges {target: root; primaryHeaderButton.visible: false}
PropertyChanges {target: root; secondaryHeaderButton.visible: false}
}, },
State { State {
name: d.tokenViewState name: d.tokenViewState
@ -222,22 +204,6 @@ SettingsPageLayout {
} }
// Mint tokens possible view contents: // Mint tokens possible view contents:
Component {
id: welcomeView
WelcomeSettingsView {
viewWidth: root.viewWidth
image: Style.png("community/mint2_1")
title: qsTr("Community tokens")
subtitle: qsTr("You can mint custom tokens and import tokens for your community")
checkersModel: [
qsTr("Create remotely destructible soulbound tokens for admin permissions"),
qsTr("Reward individual members with custom tokens for their contribution"),
qsTr("Mint tokens for use with community and channel permissions")
]
}
}
Component { Component {
id: newTokenView id: newTokenView

View File

@ -10,6 +10,7 @@ import utils 1.0
import shared.controls 1.0 import shared.controls 1.0
import AppLayouts.Wallet.views.collectibles 1.0 import AppLayouts.Wallet.views.collectibles 1.0
import AppLayouts.Communities.panels 1.0
StatusScrollView { StatusScrollView {
id: root id: root
@ -17,12 +18,16 @@ StatusScrollView {
property int viewWidth: 560 // by design property int viewWidth: 560 // by design
property var model property var model
readonly property int count: assetsModel.count + collectiblesModel.count
signal itemClicked(string tokenKey, signal itemClicked(string tokenKey,
int chainId, int chainId,
string chainName, string chainName,
string accountName, string accountName,
string accountAddress) string accountAddress)
padding: 0
QtObject { QtObject {
id: d id: d
@ -45,7 +50,49 @@ StatusScrollView {
} }
} }
padding: 0 SortFilterProxyModel {
id: assetsModel
sourceModel: root.model
filters: ValueFilter {
roleName: "tokenType"
value: Constants.TokenType.ERC20
}
}
SortFilterProxyModel {
id: collectiblesModel
sourceModel: root.model
filters: ValueFilter {
roleName: "tokenType"
value: Constants.TokenType.ERC721
}
}
Loader {
sourceComponent: root.count === 0 ? introComponent : mainLayoutComponent
}
Component {
id: introComponent
IntroPanel {
width: root.viewWidth
image: Style.png("community/mint2_1")
title: qsTr("Community tokens")
subtitle: qsTr("You can mint custom tokens and import tokens for your community")
checkersModel: [
qsTr("Create remotely destructible soulbound tokens for admin permissions"),
qsTr("Reward individual members with custom tokens for their contribution"),
qsTr("Mint tokens for use with community and channel permissions")
]
}
}
Component {
id: mainLayoutComponent
ColumnLayout { ColumnLayout {
id: mainLayout id: mainLayout
@ -68,13 +115,8 @@ StatusScrollView {
Layout.preferredHeight: childrenRect.height Layout.preferredHeight: childrenRect.height
visible: count > 0 visible: count > 0
model: SortFilterProxyModel { model: assetsModel
sourceModel: root.model
filters: ValueFilter {
roleName: "tokenType"
value: Constants.TokenType.ERC20
}
}
delegate: StatusListItem { delegate: StatusListItem {
height: 64 height: 64
width: mainLayout.width width: mainLayout.width
@ -166,8 +208,9 @@ StatusScrollView {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: parent.width - 4 // The rectangular path is rendered outside Layout.preferredWidth: parent.width - 4 // The rectangular path is rendered outside
Layout.preferredHeight: 44 Layout.preferredHeight: 44
visible: collectiblesGrid.count == 0 visible: collectiblesGrid.count === 0
text: qsTr("You currently have no minted collectibles") text: qsTr("You currently have no minted collectibles")
} }
} }
}
} }