From 7804d4ca39bd55a88422f90a227cbb95ef2208a5 Mon Sep 17 00:00:00 2001 From: Mykhailo Prakhov Date: Mon, 25 Mar 2024 23:46:58 +0100 Subject: [PATCH] fix: set correct permision UI --- src/app/modules/main/chat_section/module.nim | 11 +++++++---- ui/app/AppLayouts/Chat/stores/RootStore.qml | 3 ++- ui/app/AppLayouts/Chat/views/ChatView.qml | 1 + .../panels/JoinPermissionsOverlayPanel.qml | 2 +- ui/imports/shared/stores/PermissionsStore.qml | 4 +++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/app/modules/main/chat_section/module.nim b/src/app/modules/main/chat_section/module.nim index d8ca7bd88f..d3b05f2efc 100644 --- a/src/app/modules/main/chat_section/module.nim +++ b/src/app/modules/main/chat_section/module.nim @@ -392,6 +392,7 @@ proc reevaluateRequiresTokenPermissionToJoin(self: Module) = for id, tokenPermission in community.tokenPermissions: if tokenPermission.`type` == TokenPermissionType.BecomeMember or tokenPermission.`type` == TokenPermissionType.BecomeAdmin: hasBecomeMemberOrBecomeAdminPermissions = true + self.view.setRequiresTokenPermissionToJoin(hasBecomeMemberOrBecomeAdminPermissions) proc initCommunityTokenPermissionsModel(self: Module, channelGroup: ChannelGroupDto) = @@ -955,6 +956,7 @@ proc updateTokenPermissionModel*(self: Module, permissions: Table[string, CheckP ) self.view.tokenPermissionsModel().updateItem(id, updatedTokenPermissionItem) +proc updateCommunityPermissionsView*(self: Module) = let tokenPermissionsItems = self.view.tokenPermissionsModel().getItems() let memberPermissions = filter(tokenPermissionsItems, tokenPermissionsItem => @@ -976,17 +978,17 @@ proc updateTokenPermissionModel*(self: Module, permissions: Table[string, CheckP let tmRequirementMet = tokenMasterPermissions.len() > 0 and any(tokenMasterPermissions, proc (item: TokenPermissionItem): bool = item.tokenCriteriaMet) - let requiresPermissionToJoin = not (tokenMasterPermissions.len() > 0 and tmRequirementMet) and - ((adminPermissions.len() > 0 and adminRequirementMet) or memberPermissions.len() > 0) + + let requiresPermissionToJoin = memberPermissions.len() > 0 + let tokenRequirementsMet = if requiresPermissionToJoin: tmRequirementMet or adminRequirementMet or memberRequirementMet else: - false + true self.view.setAllTokenRequirementsMet(tokenRequirementsMet) self.view.setRequiresTokenPermissionToJoin(requiresPermissionToJoin) - proc updateChannelPermissionViewData*(self: Module, chatId: string, viewOnlyPermissions: ViewOnlyOrViewAndPostPermissionsResponseDto, viewAndPostPermissions: ViewOnlyOrViewAndPostPermissionsResponseDto, community: CommunityDto) = self.updateTokenPermissionModel(viewOnlyPermissions.permissions, community) self.updateTokenPermissionModel(viewAndPostPermissions.permissions, community) @@ -1004,6 +1006,7 @@ method onCommunityCheckPermissionsToJoinResponse*(self: Module, checkPermissions let community = self.controller.getMyCommunity() self.view.setAllTokenRequirementsMet(checkPermissionsToJoinResponse.satisfied) self.updateTokenPermissionModel(checkPermissionsToJoinResponse.permissions, community) + self.updateCommunityPermissionsView() self.setPermissionsToJoinCheckOngoing(false) method onCommunityTokenPermissionUpdated*(self: Module, communityId: string, tokenPermission: CommunityTokenPermissionDto) = diff --git a/ui/app/AppLayouts/Chat/stores/RootStore.qml b/ui/app/AppLayouts/Chat/stores/RootStore.qml index 870c519ac1..7d83442cdc 100644 --- a/ui/app/AppLayouts/Chat/stores/RootStore.qml +++ b/ui/app/AppLayouts/Chat/stores/RootStore.qml @@ -61,7 +61,8 @@ QtObject { root.communitiesModuleInst.prepareTokenModelForCommunity(publicKey) } - readonly property bool allChannelsAreHiddenBecauseNotPermitted: root.chatCommunitySectionModule.allChannelsAreHiddenBecauseNotPermitted + readonly property bool allChannelsAreHiddenBecauseNotPermitted: root.chatCommunitySectionModule.allChannelsAreHiddenBecauseNotPermitted && + !root.chatCommunitySectionModule.requiresTokenPermissionToJoin readonly property bool requirementsCheckPending: root.communitiesModuleInst.requirementsCheckPending diff --git a/ui/app/AppLayouts/Chat/views/ChatView.qml b/ui/app/AppLayouts/Chat/views/ChatView.qml index d029e50b31..b6e77b9712 100644 --- a/ui/app/AppLayouts/Chat/views/ChatView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatView.qml @@ -13,6 +13,7 @@ import shared.stores.send 1.0 import SortFilterProxyModel 0.2 import StatusQ.Core 0.1 +import StatusQ.Core.Theme 0.1 import StatusQ.Layout 0.1 import StatusQ.Popups 0.1 import StatusQ.Controls 0.1 diff --git a/ui/app/AppLayouts/Communities/panels/JoinPermissionsOverlayPanel.qml b/ui/app/AppLayouts/Communities/panels/JoinPermissionsOverlayPanel.qml index c2c21fb827..46c1511b2e 100644 --- a/ui/app/AppLayouts/Communities/panels/JoinPermissionsOverlayPanel.qml +++ b/ui/app/AppLayouts/Communities/panels/JoinPermissionsOverlayPanel.qml @@ -142,7 +142,7 @@ Control { text: root.isInvitationPending ? (root.joinCommunity ? d.communityMembershipRequestPendingText : d.channelMembershipRequestPendingText) : d.communityRequestToJoinText font.pixelSize: 13 - enabled: root.requirementsMet || d.communityPermissionsModel.count === 0 + enabled: root.requirementsMet || (joinCommunity && d.communityPermissionsModel.count === 0) onClicked: root.isInvitationPending ? root.invitationPendingClicked() : root.requestToJoinClicked() } diff --git a/ui/imports/shared/stores/PermissionsStore.qml b/ui/imports/shared/stores/PermissionsStore.qml index a1782f13a7..95f097814c 100644 --- a/ui/imports/shared/stores/PermissionsStore.qml +++ b/ui/imports/shared/stores/PermissionsStore.qml @@ -97,7 +97,9 @@ QtObject { id: becomeMemberPermissionsModel sourceModel: root.permissionsModel function filterPredicate(modelData) { - return (modelData.permissionType == Constants.permissionType.member) && + return (modelData.permissionType === Constants.permissionType.member || + modelData.permissionType === Constants.permissionType.admin || + modelData.permissionType === Constants.permissionType.becomeTokenMaster) && (modelData.tokenCriteriaMet || !modelData.isPrivate) } filters: [