diff --git a/ui/app/AppLayouts/Chat/controls/community/PermissionTypes.qml b/ui/app/AppLayouts/Chat/controls/community/PermissionTypes.qml index 73b96460e4..30646e20fe 100644 --- a/ui/app/AppLayouts/Chat/controls/community/PermissionTypes.qml +++ b/ui/app/AppLayouts/Chat/controls/community/PermissionTypes.qml @@ -64,4 +64,9 @@ QtObject { return "" } + + function isCommunityPermission(permissionType) { + return permissionType === PermissionTypes.Type.Admin + || permissionType === PermissionTypes.Type.Member + } } diff --git a/ui/app/AppLayouts/Chat/panels/communities/CommunityPermissionsSettingsPanel.qml b/ui/app/AppLayouts/Chat/panels/communities/CommunityPermissionsSettingsPanel.qml index 8b8ae66154..f48fc15d00 100644 --- a/ui/app/AppLayouts/Chat/panels/communities/CommunityPermissionsSettingsPanel.qml +++ b/ui/app/AppLayouts/Chat/panels/communities/CommunityPermissionsSettingsPanel.qml @@ -162,6 +162,37 @@ SettingsPageLayout { permissionType: d.permissionTypeToEdit isPrivate: d.isPrivateToEditValue + duplicationWarningVisible: { + // dependencies + holdingsTracker.revision + channelsTracker.revision + communityNewPermissionView.dirtyValues.permissionType + communityNewPermissionView.dirtyValues.isPrivate + + const model = root.store.permissionsModel + + for (let i = 0; i < model.count; i++) { + if (root.state === d.editPermissionViewState + && d.permissionIndexToEdit === i) + continue + + const item = model.get(i) + + const holdings = item.holdingsListModel + const channels = item.channelsListModel + const permissionType = item.permissionType + + const same = (a, b) => ModelUtils.checkEqualitySet(a, b, ["key"]) + + if (same(dirtyValues.holdingsModel, holdings) + && same(dirtyValues.channelsModel, channels) + && dirtyValues.permissionType === permissionType) + return true + } + + return false + } + onCreatePermissionClicked: { root.store.createPermission(dirtyValues.holdingsModel, dirtyValues.permissionType, @@ -210,37 +241,7 @@ SettingsPageLayout { target: root property: "saveChangesButtonEnabled" value: !communityNewPermissionView.duplicationWarningVisible - } - - duplicationWarningVisible: { - // dependencies - holdingsTracker.revision - channelsTracker.revision - communityNewPermissionView.dirtyValues.permissionType - communityNewPermissionView.dirtyValues.isPrivate - - const model = root.store.permissionsModel - - for (let i = 0; i < model.count; i++) { - if (root.state === d.editPermissionViewState - && d.permissionIndexToEdit === i) - continue - - const item = model.get(i) - - const holdings = item.holdingsListModel - const channels = item.channelsListModel - const permissionType = item.permissionType - - const same = (a, b) => ModelUtils.checkEqualitySet(a, b, ["key"]) - - if (same(dirtyValues.holdingsModel, holdings) - && same(dirtyValues.channelsModel, channels) - && dirtyValues.permissionType === permissionType) - return true - } - - return false + && communityNewPermissionView.isFullyFilled } } } diff --git a/ui/app/AppLayouts/Chat/views/communities/CommunityNewPermissionView.qml b/ui/app/AppLayouts/Chat/views/communities/CommunityNewPermissionView.qml index c56d15ca4e..530960ba5d 100644 --- a/ui/app/AppLayouts/Chat/views/communities/CommunityNewPermissionView.qml +++ b/ui/app/AppLayouts/Chat/views/communities/CommunityNewPermissionView.qml @@ -11,8 +11,6 @@ import StatusQ.Core.Utils 0.1 import utils 1.0 import shared.panels 1.0 -import SortFilterProxyModel 0.2 - import AppLayouts.Chat.helpers 1.0 import AppLayouts.Chat.panels.communities 1.0 @@ -33,6 +31,13 @@ StatusScrollView { root.isPrivate !== d.dirtyValues.isPrivate || root.permissionType !== d.dirtyValues.permissionType + readonly property alias dirtyValues: d.dirtyValues + + readonly property bool isFullyFilled: + dirtyValues.holdingsModel.count > 0 && + dirtyValues.permissionType !== PermissionTypes.Type.None && + (d.isCommunityPermission || dirtyValues.channelsModel.count > 0) + property int permissionType: PermissionTypes.Type.None property bool isPrivate: false @@ -42,8 +47,6 @@ StatusScrollView { // roles: itemId, text, emoji, color property var channelsModel: ListModel {} - readonly property alias dirtyValues: d.dirtyValues - property alias duplicationWarningVisible: duplicationPanel.visible signal createPermissionClicked @@ -81,8 +84,7 @@ StatusScrollView { readonly property int dropdownVerticalOffset: 1 readonly property bool isCommunityPermission: - dirtyValues.permissionType === PermissionTypes.Type.Admin || - dirtyValues.permissionType === PermissionTypes.Type.Member + PermissionTypes.isCommunityPermission(dirtyValues.permissionType) onIsCommunityPermissionChanged: { if (isCommunityPermission) { @@ -511,9 +513,10 @@ StatusScrollView { PermissionConflictWarningPanel { id: conflictPanel - visible: store.permissionConflict.exists Layout.fillWidth: true Layout.topMargin: 50 // by desing + + visible: store.permissionConflict.exists holdings: store.permissionConflict.holdings permissions: store.permissionConflict.permissions channels: store.permissionConflict.channels @@ -522,22 +525,23 @@ StatusScrollView { PermissionDuplicationWarningPanel { id: duplicationPanel - visible: false Layout.fillWidth: true Layout.topMargin: 50 // by desing + + visible: false } StatusButton { - visible: !root.isEditState - Layout.topMargin: conflictPanel.visible ? conflictPanel.Layout.topMargin : 24 // by design - text: qsTr("Create permission") - enabled: d.dirtyValues.holdingsModel.count > 0 - && d.dirtyValues.permissionType !== PermissionTypes.Type.None - && (d.dirtyValues.channelsModel.count > 0 || d.isCommunityPermission) - && !root.duplicationWarningVisible Layout.preferredHeight: 44 Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true + Layout.topMargin: conflictPanel.visible + ? conflictPanel.Layout.topMargin + : Style.current.bigPadding + + visible: !root.isEditState + text: qsTr("Create permission") + enabled: root.isFullyFilled && !root.duplicationWarningVisible onClicked: root.createPermissionClicked() }