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;