From f363397f777dbb468b41a298a652f49da098c241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Thu, 29 Jun 2023 13:54:04 +0200 Subject: [PATCH] chore(PermissionsSettingsPanel): welcome view moved to PermissionsView to simplify states management Storybook page updated to cover case when permissions model is empty. --- storybook/pages/PermissionsViewPage.qml | 44 ++++++++++++++----- .../panels/PermissionsSettingsPanel.qml | 39 ++-------------- .../Communities/views/PermissionsView.qml | 20 +++++++++ 3 files changed, 57 insertions(+), 46 deletions(-) diff --git a/storybook/pages/PermissionsViewPage.qml b/storybook/pages/PermissionsViewPage.qml index b660e51877..905c195f4b 100644 --- a/storybook/pages/PermissionsViewPage.qml +++ b/storybook/pages/PermissionsViewPage.qml @@ -1,5 +1,6 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 import StatusQ.Core.Theme 0.1 import StatusQ.Core.Utils 0.1 @@ -28,12 +29,18 @@ SplitView { margins: 50 } - permissionsModel: ListModel { + ListModel { id: permissionsModel Component.onCompleted: append(PermissionsModel.permissionsModelData) } + ListModel { + id: emptyModel + } + + permissionsModel: emptyModelCheckBox.checked ? emptyModel : permissionsModel + assetsModel: AssetsModel { id: assetsModel } @@ -78,18 +85,35 @@ SplitView { SplitView.minimumWidth: 300 SplitView.preferredWidth: 300 - CommunityPermissionsSettingsPanelEditor { + ColumnLayout { anchors.fill: parent - model: permissionsModel - assetKeys: assetsModel.data.map(asset => asset.key) - collectibleKeys: collectiblesModel.data.map(collectible => collectible.key) - channelKeys: { - const array = ModelUtils.modelToArray(channelsModel, - ["itemId", "isCategory"]) - const channelsOnly = array.filter(channel => !channel.isCategory) + CheckBox { + id: emptyModelCheckBox - return channelsOnly.map(channel => channel.itemId) + Layout.alignment: Qt.AlignTop | Qt.AlignLeft + + text: "Empty model" + } + + CommunityPermissionsSettingsPanelEditor { + clip: true + visible: !emptyModelCheckBox.checked + + Layout.fillWidth: true + Layout.fillHeight: true + + model: permissionsModel + + assetKeys: assetsModel.data.map(asset => asset.key) + collectibleKeys: collectiblesModel.data.map(collectible => collectible.key) + channelKeys: { + const array = ModelUtils.modelToArray(channelsModel, + ["itemId", "isCategory"]) + const channelsOnly = array.filter(channel => !channel.isCategory) + + return channelsOnly.map(channel => channel.itemId) + } } } } diff --git a/ui/app/AppLayouts/Communities/panels/PermissionsSettingsPanel.qml b/ui/app/AppLayouts/Communities/panels/PermissionsSettingsPanel.qml index 450d98d058..405625e27f 100644 --- a/ui/app/AppLayouts/Communities/panels/PermissionsSettingsPanel.qml +++ b/ui/app/AppLayouts/Communities/panels/PermissionsSettingsPanel.qml @@ -1,4 +1,4 @@ -import QtQuick 2.14 +import QtQuick 2.15 import AppLayouts.Communities.controls 1.0 import AppLayouts.Communities.layouts 1.0 @@ -48,11 +48,9 @@ SettingsPageLayout { QtObject { id: d - readonly property string welcomeViewState: "WELCOME" readonly property string newPermissionViewState: "NEW_PERMISSION" readonly property string permissionsViewState: "PERMISSIONS" readonly property string editPermissionViewState: "EDIT_PERMISSION" - readonly property bool permissionsExist: root.permissionsModel.count > 0 signal saveChanges signal resetChanges @@ -64,14 +62,7 @@ SettingsPageLayout { property var channelsToEditModel property bool isPrivateToEditValue: false - onPermissionsExistChanged: { - // Navigate back to welcome permissions view if all existing permissions are removed. - if(root.state === d.permissionsViewState && !permissionsExist) { - root.state = d.welcomeViewState; - } - } - - readonly property string initialState: d.permissionsExist ? d.permissionsViewState : d.welcomeViewState + readonly property string initialState: d.permissionsViewState function initializeData() { holdingsToEditModel = emptyModel @@ -86,14 +77,6 @@ SettingsPageLayout { cancelChangesText: qsTr("Revert changes") state: d.initialState states: [ - State { - name: d.welcomeViewState - PropertyChanges {target: root; title: qsTr("Permissions")} - PropertyChanges {target: root; previousPageName: ""} - PropertyChanges {target: root; content: welcomeView} - PropertyChanges {target: root; primaryHeaderButton.visible: true} - PropertyChanges {target: root; primaryHeaderButton.text: qsTr("Add new permission")} - }, State { name: d.newPermissionViewState PropertyChanges {target: root; title: qsTr("New permission")} @@ -119,7 +102,7 @@ SettingsPageLayout { ] onPrimaryHeaderButtonClicked: { - if(root.state === d.welcomeViewState || root.state === d.permissionsViewState) { + if(root.state === d.permissionsViewState) { d.initializeData() root.state = d.newPermissionViewState } @@ -139,22 +122,6 @@ SettingsPageLayout { } // Community Permissions possible view contents: - Component { - id: welcomeView - - WelcomeSettingsView { - viewWidth: root.viewWidth - image: Style.png("community/permissions2_3") - title: qsTr("Permissions") - subtitle: qsTr("You can manage your community by creating and issuing membership and access permissions") - checkersModel: [ - qsTr("Give individual members access to private channels"), - qsTr("Monetise your community with subscriptions and fees"), - qsTr("Require holding a token or NFT to obtain exclusive membership rights") - ] - } - } - Component { id: newPermissionView diff --git a/ui/app/AppLayouts/Communities/views/PermissionsView.qml b/ui/app/AppLayouts/Communities/views/PermissionsView.qml index 7ae72ab1f4..d97733df49 100644 --- a/ui/app/AppLayouts/Communities/views/PermissionsView.qml +++ b/ui/app/AppLayouts/Communities/views/PermissionsView.qml @@ -5,8 +5,10 @@ import StatusQ.Core 0.1 import SortFilterProxyModel 0.2 import shared.popups 1.0 +import utils 1.0 import AppLayouts.Communities.controls 1.0 +import AppLayouts.Communities.panels 1.0 StatusScrollView { id: root @@ -25,6 +27,8 @@ StatusScrollView { signal duplicatePermissionRequested(int index) signal removePermissionRequested(int index) + readonly property alias count: repeater.count + QtObject { id: d @@ -48,7 +52,23 @@ StatusScrollView { } } + IntroPanel { + visible: root.count === 0 + width: root.viewWidth + + image: Style.png("community/permissions2_3") + title: qsTr("Permissions") + subtitle: qsTr("You can manage your community by creating and issuing membership and access permissions") + checkersModel: [ + qsTr("Give individual members access to private channels"), + qsTr("Monetise your community with subscriptions and fees"), + qsTr("Require holding a token or NFT to obtain exclusive membership rights") + ] + } + Repeater { + id: repeater + model: root.permissionsModel delegate: PermissionItem {