import type { IMessage, MessageReport, MessageAttachment } from '@rocket.chat/core-typings'; import { isE2EEMessage, isQuoteAttachment } from '@rocket.chat/core-typings'; import { Message, MessageDivider, MessageLeftContainer, MessageContainer, MessageHeader, MessageTimestamp, MessageRole, MessageBody, MessageName, MessageToolbar, MessageToolbarItem, MessageToolbarWrapper, MessageUsername, } from '@rocket.chat/fuselage'; import { UserAvatar } from '@rocket.chat/ui-avatar'; import { useUserDisplayName } from '@rocket.chat/ui-client'; import { useSetting } from '@rocket.chat/ui-contexts'; import { useTranslation } from 'react-i18next'; import ReportReasonCollapsible from './ReportReasonCollapsible'; import MessageContentBody from '../../../../components/message/MessageContentBody'; import Attachments from '../../../../components/message/content/Attachments'; import UiKitMessageBlock from '../../../../components/message/uikit/UiKitMessageBlock'; import { useFormatDate } from '../../../../hooks/useFormatDate'; import { useFormatDateAndTime } from '../../../../hooks/useFormatDateAndTime'; import { useFormatTime } from '../../../../hooks/useFormatTime'; import { toPlainTextRoot } from '../../../../lib/toPlainTextRoot'; import MessageReportInfo from '../MessageReportInfo'; import useDeleteMessage from '../hooks/useDeleteMessage'; import { useDismissMessageAction } from '../hooks/useDismissMessageAction'; const ContextMessage = ({ message, room, deleted, onRedirect, onChange, }: { message: any; room: MessageReport['room']; deleted: boolean; onRedirect: (id: IMessage['_id']) => void; onChange: () => void; }) => { const { t } = useTranslation(); const isEncryptedMessage = isE2EEMessage(message); const deleteMessage = useDeleteMessage(message._id, message.rid, onChange); const dismissMsgReport = useDismissMessageAction(message._id); const formatDateAndTime = useFormatDateAndTime(); const formatTime = useFormatTime(); const formatDate = useFormatDate(); const useRealName = useSetting('UI_Use_Real_Name', false); const name = message.u.name || ''; const username = message.u.username || ''; const displayName = useUserDisplayName({ name, username }); const quotes = message?.attachments?.filter(isQuoteAttachment) || []; const attachments = message?.attachments?.filter((attachment: MessageAttachment) => !isQuoteAttachment(attachment)) || []; return ( <> {formatDate(message._updatedAt)} {displayName} <>{useRealName &&  {`@${message.u.username}`}} {formatTime(message._updatedAt !== message.ts ? message._updatedAt : message.ts)} {message._updatedAt !== message.ts && ` (${t('edited')})`} {room.name || room.fname || 'DM'} {!!quotes?.length && } {!message.blocks?.length && !!message.md?.length ? ( <> {(!isEncryptedMessage || message.e2e === 'done') && ( )} {message.e2e === 'pending' && t('E2E_message_encrypted_placeholder')} ) : ( !!message.msg && ( ) )} {!!attachments && } {message.blocks && } dismissMsgReport.action()} /> onRedirect(message._id)} /> deleteMessage()} /> ); }; export default ContextMessage;