The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/client/components/message/toolbar/useFollowMessageAction.ts

62 lines
1.8 KiB

import type { IMessage, IRoom } from '@rocket.chat/core-typings';
import { isOmnichannelRoom } from '@rocket.chat/core-typings';
import { useSetting, useToastMessageDispatch, useUser } from '@rocket.chat/ui-contexts';
import type { MessageActionContext, MessageActionConfig } from '../../../../app/ui-utils/client/lib/MessageAction';
import { t } from '../../../../app/utils/lib/i18n';
import { Messages } from '../../../stores';
import { useToggleFollowingThreadMutation } from '../../../views/room/contextualBar/Threads/hooks/useToggleFollowingThreadMutation';
export const useFollowMessageAction = (
message: IMessage,
{ room, context }: { room: IRoom; context: MessageActionContext },
): MessageActionConfig | null => {
const user = useUser();
const threadsEnabled = useSetting('Threads_enabled');
const dispatchToastMessage = useToastMessageDispatch();
const { mutate: toggleFollowingThread } = useToggleFollowingThreadMutation({
onSuccess: () => {
dispatchToastMessage({
type: 'success',
message: t('You_followed_this_message'),
});
},
});
const { tmid, _id } = message;
const parentMessage = Messages.use((state) => state.find((record) => record._id === tmid || record._id === _id));
if (!message || !threadsEnabled || isOmnichannelRoom(room)) {
return null;
}
let { replies = [] } = message;
if (tmid || context) {
if (parentMessage) {
replies = parentMessage.replies || [];
}
}
if (!user?._id) {
return null;
}
if (replies.includes(user._id)) {
return null;
}
return {
id: 'follow-message',
icon: 'bell',
label: 'Follow_message',
type: 'interaction',
context: ['message', 'message-mobile', 'threads', 'federated', 'videoconf', 'videoconf-threads'],
action() {
toggleFollowingThread({ tmid: tmid || _id, follow: true, rid: room._id });
},
order: 1,
group: 'menu',
};
};