-
Notifications
You must be signed in to change notification settings - Fork 10k
/
Toolbox.tsx
72 lines (58 loc) · 2.31 KB
/
Toolbox.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { IMessage, isRoomFederated, IUser, IRoom } from '@rocket.chat/core-typings';
import { MessageToolbox, MessageToolboxItem } from '@rocket.chat/fuselage';
import { useUser, useUserSubscription, useSettings, useTranslation } from '@rocket.chat/ui-contexts';
import React, { FC, memo, useMemo } from 'react';
import { MessageAction, MessageActionContext } from '../../../../../../app/ui-utils/client/lib/MessageAction';
import { useRoom } from '../../../contexts/RoomContext';
import { useToolboxContext } from '../../../contexts/ToolboxContext';
import { useIsSelecting } from '../../contexts/SelectedMessagesContext';
import { MessageActionMenu } from './MessageActionMenu';
const getMessageContext = (message: IMessage, room: IRoom): MessageActionContext => {
if (message.t === 'videoconf') {
return 'videoconf';
}
if (isRoomFederated(room)) {
return 'federated';
}
return 'message';
};
export const Toolbox: FC<{ message: IMessage }> = ({ message }) => {
const t = useTranslation();
const room = useRoom();
const subscription = useUserSubscription(message.rid);
const settings = useSettings();
const user = useUser() as IUser;
const context = getMessageContext(message, room);
const mapSettings = useMemo(() => Object.fromEntries(settings.map((setting) => [setting._id, setting.value])), [settings]);
const messageActions = MessageAction.getButtons({ message, room, user, subscription, settings: mapSettings }, context, 'message');
const menuActions = MessageAction.getButtons({ message, room, user, subscription, settings: mapSettings }, context, 'menu');
const toolbox = useToolboxContext();
const isSelecting = useIsSelecting();
if (isSelecting) {
return null;
}
return (
<MessageToolbox>
{messageActions.map((action) => (
<MessageToolboxItem
onClick={(e): void => action.action(e, { message, tabbar: toolbox, room })}
key={action.id}
icon={action.icon}
title={t(action.label)}
data-qa-id={action.label}
data-qa-type='message-action-menu'
/>
))}
{menuActions.length > 0 && (
<MessageActionMenu
options={menuActions.map((action) => ({
...action,
action: (e): void => action.action(e, { message, tabbar: toolbox, room }),
}))}
data-qa-type='message-action-menu-options'
/>
)}
</MessageToolbox>
);
};
export default memo(Toolbox);