diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js
index 141cfe3557422..5b22ccc55e61a 100644
--- a/app/ui-utils/client/lib/MessageAction.js
+++ b/app/ui-utils/client/lib/MessageAction.js
@@ -8,7 +8,9 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n';
import { ReactiveVar } from 'meteor/reactive-var';
import { Tracker } from 'meteor/tracker';
import { Session } from 'meteor/session';
+import { HTML } from 'meteor/htmljs';
+import { createTemplateForComponent } from '../../../../client/reactAdapters';
import { messageArgs } from './messageArgs';
import { roomTypes, canDeleteMessage } from '../../../utils/client';
import { Messages, Rooms, Subscriptions } from '../../../models/client';
@@ -355,4 +357,26 @@ Meteor.startup(async function() {
order: 17,
group: 'menu',
});
+
+ MessageAction.addButton({
+ id: 'reaction-list',
+ icon: 'emoji',
+ label: 'Reactions',
+ context: ['message', 'message-mobile', 'threads'],
+ action(_, roomInstance) {
+ const { msg: { reactions } } = messageArgs(this);
+
+ modal.open({
+ template: createTemplateForComponent('reactionList', () => import('./ReactionListContent'), {
+ renderContainerView: () => HTML.DIV({ style: 'margin: -16px; height: 100%; display: flex; flex-direction: column; overflow: hidden;' }), // eslint-disable-line new-cap
+ }),
+ data: { reactions, roomInstance, onClose: () => modal.close() },
+ });
+ },
+ condition({ msg: { reactions } }) {
+ return !!reactions;
+ },
+ order: 18,
+ group: 'menu',
+ });
});
diff --git a/app/ui-utils/client/lib/ReactionListContent.js b/app/ui-utils/client/lib/ReactionListContent.js
new file mode 100644
index 0000000000000..bede9d5f12a2d
--- /dev/null
+++ b/app/ui-utils/client/lib/ReactionListContent.js
@@ -0,0 +1,68 @@
+import React from 'react';
+import { Box, Tag, Modal, ButtonGroup, Button, Scrollable } from '@rocket.chat/fuselage';
+import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
+
+import { useTranslation } from '../../../../client/contexts/TranslationContext';
+import { useSetting } from '../../../../client/contexts/SettingsContext';
+import { useSession } from '../../../../client/contexts/SessionContext';
+import Emoji from '../../../../client/components/basic/Emoji';
+import { openUserCard } from '../../../ui/client/lib/UserCard';
+import { openProfileTabOrOpenDM } from '../../../ui/client/views/app/room';
+
+export function Reactions({ reactions, roomInstance, onClose }) {
+ const useRealName = useSetting('UI_Use_Real_Name');
+
+ return