From b623c8fb2befd219d8e9a1ae2b76941d86bde12e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Tinkl?= Date: Mon, 4 Mar 2024 10:59:52 +0100 Subject: [PATCH] fix(chat input): should be disabled if user is not able to post - extend `isUserAllowedToSendMessage` to also cover `Constants.chatType.communityChat` - let `admin` always satisfy the permissions - hide the add emoji/reaction button instead of disabling it when the permissions are not met - adjust the error msg to better reflect the reality (tokens vs. permissions) Fixes #13777 --- src/app/modules/main/chat_section/chat_content/view.nim | 4 ++-- .../private/statusMessage/StatusMessageEmojiReactions.qml | 1 + ui/app/AppLayouts/Chat/stores/RootStore.qml | 6 ++++-- ui/app/AppLayouts/Chat/views/ChatColumnView.qml | 2 +- ui/app/AppLayouts/Chat/views/ChatView.qml | 2 +- ui/imports/shared/status/StatusChatInput.qml | 4 ++-- ui/imports/shared/views/chat/MessageView.qml | 2 +- 7 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/app/modules/main/chat_section/chat_content/view.nim b/src/app/modules/main/chat_section/chat_content/view.nim index 375fd47e06..d02a6062b4 100644 --- a/src/app/modules/main/chat_section/chat_content/view.nim +++ b/src/app/modules/main/chat_section/chat_content/view.nim @@ -168,7 +168,7 @@ QtObject: self.viewOnlyPermissionsSatisfiedChanged() proc getViewOnlyPermissionsSatisfied*(self: View): bool {.slot.} = - return self.viewOnlyPermissionsSatisfied + return self.viewOnlyPermissionsSatisfied or self.amIChatAdmin() QtProperty[bool] viewOnlyPermissionsSatisfied: read = getViewOnlyPermissionsSatisfied notify = viewOnlyPermissionsSatisfiedChanged @@ -180,7 +180,7 @@ QtObject: self.viewAndPostPermissionsSatisfiedChanged() proc getViewAndPostPermissionsSatisfied*(self: View): bool {.slot.} = - return self.viewAndPostPermissionsSatisfied + return self.viewAndPostPermissionsSatisfied or self.amIChatAdmin() QtProperty[bool] viewAndPostPermissionsSatisfied: read = getViewAndPostPermissionsSatisfied notify = viewAndPostPermissionsSatisfiedChanged diff --git a/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageEmojiReactions.qml b/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageEmojiReactions.qml index 088fd63562..952b9e6392 100644 --- a/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageEmojiReactions.qml +++ b/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageEmojiReactions.qml @@ -155,6 +155,7 @@ Item { Item { width: addEmojiButton.width + addEmojiButton.anchors.leftMargin // there is more margin between the button and the emojis than between each emoji height: addEmojiButton.height + visible: root.enabled StatusIcon { id: addEmojiButton diff --git a/ui/app/AppLayouts/Chat/stores/RootStore.qml b/ui/app/AppLayouts/Chat/stores/RootStore.qml index f94bdbca32..20da5b62fc 100644 --- a/ui/app/AppLayouts/Chat/stores/RootStore.qml +++ b/ui/app/AppLayouts/Chat/stores/RootStore.qml @@ -589,6 +589,7 @@ QtObject { } readonly property QtObject _d: QtObject { + id: _d readonly property var sectionDetailsInstantiator: Instantiator { model: SortFilterProxyModel { sourceModel: mainModuleInst.sectionsModel @@ -655,9 +656,10 @@ QtObject { readonly property bool isUserAllowedToSendMessage: { if (_d.activeChatType === Constants.chatType.oneToOne && _d.oneToOneChatContact) { return _d.oneToOneChatContact.contactRequestState === Constants.ContactRequestState.Mutual - } - else if(_d.activeChatType === Constants.chatType.privateGroupChat) { + } else if (_d.activeChatType === Constants.chatType.privateGroupChat) { return _d.amIMember + } else if (_d.activeChatType === Constants.chatType.communityChat) { + return currentChatContentModule().viewAndPostPermissionsSatisfied } return true diff --git a/ui/app/AppLayouts/Chat/views/ChatColumnView.qml b/ui/app/AppLayouts/Chat/views/ChatColumnView.qml index 0361222f1f..ef4d489559 100644 --- a/ui/app/AppLayouts/Chat/views/ChatColumnView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatColumnView.qml @@ -278,7 +278,7 @@ Item { return qsTr("You need to join this community to send messages") } if (!root.viewAndPostPermissionsSatisfied) { - return qsTr("Sorry, you don't have the tokens needed to post in this channel.") + return qsTr("Sorry, you don't have permissions to post in this channel.") } return root.rootStore.chatInputPlaceHolderText } else { diff --git a/ui/app/AppLayouts/Chat/views/ChatView.qml b/ui/app/AppLayouts/Chat/views/ChatView.qml index 5cc1e94e88..d2be46dfa6 100644 --- a/ui/app/AppLayouts/Chat/views/ChatView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatView.qml @@ -205,7 +205,7 @@ StatusSectionLayout { emojiPopup: root.emojiPopup stickersPopup: root.stickersPopup viewAndPostHoldingsModel: root.viewAndPostPermissionsModel - viewAndPostPermissionsSatisfied: !root.rootStore.chatCommunitySectionModule.isCommunity() || root.amISectionAdmin || root.viewAndPostPermissionsSatisfied + viewAndPostPermissionsSatisfied: !root.rootStore.chatCommunitySectionModule.isCommunity() || root.viewAndPostPermissionsSatisfied amISectionAdmin: root.amISectionAdmin onOpenStickerPackPopup: { Global.openPopup(statusStickerPackClickPopup, {packId: stickerPackId, store: root.stickersPopup.store} ) diff --git a/ui/imports/shared/status/StatusChatInput.qml b/ui/imports/shared/status/StatusChatInput.qml index 5aa1cc4b20..2d4fe84868 100644 --- a/ui/imports/shared/status/StatusChatInput.qml +++ b/ui/imports/shared/status/StatusChatInput.qml @@ -1226,7 +1226,7 @@ Rectangle { objectName: "messageInputField" - property var lastClick: 0 + property double lastClick: 0 property int cursorWhenPressed: 0 property int previousCursorPosition: 0 @@ -1246,7 +1246,7 @@ Rectangle { padding: 0 // This is needed to make sure the text area is disabled when the input is disabled Binding on enabled { - value: root.enabled + value: control.enabled } Keys.onUpPressed: { if (isEdit && !activeFocus) { diff --git a/ui/imports/shared/views/chat/MessageView.qml b/ui/imports/shared/views/chat/MessageView.qml index fdc53822f5..886a8f3a38 100644 --- a/ui/imports/shared/views/chat/MessageView.qml +++ b/ui/imports/shared/views/chat/MessageView.qml @@ -651,7 +651,7 @@ Loader { (root.chatLogView && root.chatLogView.moving) || Global.activityPopupOpened - disableEmojis: root.isChatBlocked + disableEmojis: !d.addReactionAllowed hideMessage: d.hideMessage overrideBackground: root.placeholderMessage