From e3f6c5cade22c241ee98986e15eda6b556bd8cd1 Mon Sep 17 00:00:00 2001 From: Rafael Ferreira Date: Mon, 31 May 2021 20:23:38 -0300 Subject: [PATCH] [FIX] Remove useless message options from Omnichannel Rooms (#21549) --- .../client/createDiscussionMessageAction.js | 8 ++++++-- app/livechat/lib/LivechatRoomType.js | 4 ++++ .../client/actionButton.js | 7 ++++++- app/message-pin/client/actionButton.js | 8 ++++++-- app/message-star/client/actionButton.js | 7 ++++++- app/reactions/client/init.js | 4 ++++ app/threads/client/messageAction/follow.js | 7 ++++++- .../client/messageAction/replyInThread.js | 7 ++++++- app/ui-utils/client/lib/MessageAction.js | 18 +++++++++++++++--- app/utils/client/lib/roomTypes.js | 4 ++++ 10 files changed, 63 insertions(+), 11 deletions(-) diff --git a/app/discussion/client/createDiscussionMessageAction.js b/app/discussion/client/createDiscussionMessageAction.js index 7d621bcfab5..a6e5eb06b22 100644 --- a/app/discussion/client/createDiscussionMessageAction.js +++ b/app/discussion/client/createDiscussionMessageAction.js @@ -5,7 +5,7 @@ import { settings } from '../../settings/client'; import { hasPermission } from '../../authorization/client'; import { MessageAction, modal } from '../../ui-utils/client'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; -import { t } from '../../utils/client'; +import { t, roomTypes } from '../../utils/client'; Meteor.startup(function() { Tracker.autorun(() => { @@ -35,13 +35,17 @@ Meteor.startup(function() { showCancelButton: false, }); }, - condition({ msg: { u: { _id: uid }, drid, dcount }, subscription, u }) { + condition({ msg: { u: { _id: uid }, drid, dcount }, room, subscription, u }) { if (drid || !isNaN(dcount)) { return false; } if (!subscription) { return false; } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return uid !== u._id ? hasPermission('start-discussion-other-user') : hasPermission('start-discussion'); }, diff --git a/app/livechat/lib/LivechatRoomType.js b/app/livechat/lib/LivechatRoomType.js index c2392a9e711..09079cff610 100644 --- a/app/livechat/lib/LivechatRoomType.js +++ b/app/livechat/lib/LivechatRoomType.js @@ -130,4 +130,8 @@ export default class LivechatRoomType extends RoomTypeConfig { showQuickActionButtons() { return true; } + + isLivechatRoom() { + return true; + } } diff --git a/app/message-mark-as-unread/client/actionButton.js b/app/message-mark-as-unread/client/actionButton.js index e2d054acc58..cc0ef68a695 100644 --- a/app/message-mark-as-unread/client/actionButton.js +++ b/app/message-mark-as-unread/client/actionButton.js @@ -5,6 +5,7 @@ import { RoomManager, MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import { handleError } from '../../utils'; import { ChatSubscription } from '../../models'; +import { roomTypes } from '../../utils/client'; Meteor.startup(() => { MessageAction.addButton({ @@ -28,7 +29,11 @@ Meteor.startup(() => { return FlowRouter.go('home'); }); }, - condition({ msg, u }) { + condition({ msg, u, room }) { + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return msg.u._id !== u._id; }, order: 10, diff --git a/app/message-pin/client/actionButton.js b/app/message-pin/client/actionButton.js index 1d5dc0698f0..07c0fde808d 100644 --- a/app/message-pin/client/actionButton.js +++ b/app/message-pin/client/actionButton.js @@ -10,6 +10,7 @@ import { handleError } from '../../utils'; import { settings } from '../../settings'; import { hasAtLeastOnePermission } from '../../authorization'; import { Rooms } from '../../models/client'; +import { roomTypes } from '../../utils/client'; Meteor.startup(function() { MessageAction.addButton({ @@ -26,11 +27,14 @@ Meteor.startup(function() { } }); }, - condition({ msg, subscription }) { + condition({ msg, subscription, room }) { if (!settings.get('Message_AllowPinning') || msg.pinned || !subscription) { return false; } - + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return hasAtLeastOnePermission('pin-message', msg.rid); }, order: 7, diff --git a/app/message-star/client/actionButton.js b/app/message-star/client/actionButton.js index 87336f16449..092e3e3c8dc 100644 --- a/app/message-star/client/actionButton.js +++ b/app/message-star/client/actionButton.js @@ -9,6 +9,7 @@ import { settings } from '../../settings'; import { RoomHistoryManager, MessageAction } from '../../ui-utils'; import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; import { Rooms } from '../../models/client'; +import { roomTypes } from '../../utils/client'; Meteor.startup(function() { MessageAction.addButton({ @@ -25,10 +26,14 @@ Meteor.startup(function() { } }); }, - condition({ msg: message, subscription, u }) { + condition({ msg: message, subscription, u, room }) { if (subscription == null && settings.get('Message_AllowStarring')) { return false; } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return !message.starred || !message.starred.find((star) => star._id === u._id); }, diff --git a/app/reactions/client/init.js b/app/reactions/client/init.js index 3c1a5437c3a..df7ed4224ae 100644 --- a/app/reactions/client/init.js +++ b/app/reactions/client/init.js @@ -90,6 +90,10 @@ Meteor.startup(function() { if (roomTypes.readOnly(room._id, user._id) && !room.reactWhenReadOnly) { return false; } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return true; }, diff --git a/app/threads/client/messageAction/follow.js b/app/threads/client/messageAction/follow.js index cda7f62a857..b2f98475257 100644 --- a/app/threads/client/messageAction/follow.js +++ b/app/threads/client/messageAction/follow.js @@ -7,6 +7,7 @@ import { Messages } from '../../../models/client'; import { settings } from '../../../settings/client'; import { MessageAction, call } from '../../../ui-utils/client'; import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; +import { roomTypes } from '../../../utils/client'; Meteor.startup(function() { Tracker.autorun(() => { @@ -24,13 +25,17 @@ Meteor.startup(function() { toastr.success(TAPi18n.__('You_followed_this_message')), ); }, - condition({ msg: { _id, tmid, replies = [] }, u }, context) { + condition({ msg: { _id, tmid, replies = [] }, u, room }, context) { if (tmid || context) { const parentMessage = Messages.findOne({ _id: tmid || _id }, { fields: { replies: 1 } }); if (parentMessage) { replies = parentMessage.replies || []; } } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return !replies.includes(u._id); }, order: 2, diff --git a/app/threads/client/messageAction/replyInThread.js b/app/threads/client/messageAction/replyInThread.js index f0df4fb6e7b..1ce8edd7649 100644 --- a/app/threads/client/messageAction/replyInThread.js +++ b/app/threads/client/messageAction/replyInThread.js @@ -5,6 +5,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { settings } from '../../../settings/client'; import { MessageAction } from '../../../ui-utils/client'; import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; +import { roomTypes } from '../../../utils/client'; Meteor.startup(function() { Tracker.autorun(() => { @@ -24,7 +25,11 @@ Meteor.startup(function() { context: message.tmid || message._id, }); }, - condition({ subscription }) { + condition({ subscription, room }) { + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return Boolean(subscription); }, order: -1, diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js index 85426f4dcc4..a1597c41a09 100644 --- a/app/ui-utils/client/lib/MessageAction.js +++ b/app/ui-utils/client/lib/MessageAction.js @@ -208,10 +208,14 @@ Meteor.startup(async function() { .data('reply', messages) .trigger('dataChange'); }, - condition({ subscription }) { + condition({ subscription, room }) { if (subscription == null) { return false; } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return true; }, @@ -303,10 +307,14 @@ Meteor.startup(async function() { const { msg } = messageArgs(this); getChatMessagesFrom(msg).confirmDeleteMsg(msg); }, - condition({ msg: message, subscription }) { + condition({ msg: message, subscription, room }) { if (!subscription) { return false; } + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return canDeleteMessage({ rid: message.rid, @@ -358,7 +366,11 @@ Meteor.startup(async function() { }); }); }, - condition({ subscription }) { + condition({ subscription, room }) { + const isLivechatRoom = roomTypes.isLivechatRoom(room.t); + if (isLivechatRoom) { + return false; + } return Boolean(subscription); }, order: 17, diff --git a/app/utils/client/lib/roomTypes.js b/app/utils/client/lib/roomTypes.js index 1fc9f81bf76..d71dc8d4cf1 100644 --- a/app/utils/client/lib/roomTypes.js +++ b/app/utils/client/lib/roomTypes.js @@ -51,6 +51,10 @@ export const roomTypes = new class RocketChatRoomTypes extends RoomTypesCommon { return room && room.t; } + isLivechatRoom(roomType) { + return this.roomTypes[roomType] && typeof this.roomTypes[roomType].isLivechatRoom === 'function' && this.roomTypes[roomType].isLivechatRoom(); + } + showQuickActionButtons(roomType) { return this.roomTypes[roomType] && typeof this.roomTypes[roomType].showQuickActionButtons === 'function' && this.roomTypes[roomType].showQuickActionButtons(); }