import type { IMessage } from '@rocket.chat/core-typings'; import { MessageSystem, MessageSystemBody, MessageSystemContainer, MessageSystemLeftContainer, MessageSystemName, MessageSystemTimestamp, MessageSystemBlock, CheckBox, MessageUsername, MessageNameContainer, } from '@rocket.chat/fuselage'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useTranslation } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import React, { memo } from 'react'; import { MessageTypes } from '../../../../app/ui-utils/client'; import { getUserDisplayName } from '../../../../lib/getUserDisplayName'; import { useFormatDateAndTime } from '../../../hooks/useFormatDateAndTime'; import { useFormatTime } from '../../../hooks/useFormatTime'; import { useUserData } from '../../../hooks/useUserData'; import type { UserPresence } from '../../../lib/presence'; import { useIsSelecting, useToggleSelect, useIsSelectedMessage, useCountSelected, } from '../../../views/room/MessageList/contexts/SelectedMessagesContext'; import { useChat } from '../../../views/room/contexts/ChatContext'; import UserAvatar from '../../avatar/UserAvatar'; import Attachments from '../content/Attachments'; import MessageActions from '../content/MessageActions'; import { useMessageListShowRealName, useMessageListShowUsername } from '../list/MessageListContext'; type SystemMessageProps = { message: IMessage; showUserAvatar: boolean; }; const SystemMessage = ({ message, showUserAvatar }: SystemMessageProps): ReactElement => { const t = useTranslation(); const formatTime = useFormatTime(); const formatDateAndTime = useFormatDateAndTime(); const chat = useChat(); const showRealName = useMessageListShowRealName(); const user: UserPresence = { ...message.u, roles: [], ...useUserData(message.u._id) }; const usernameAndRealNameAreSame = !user.name || user.username === user.name; const showUsername = useMessageListShowUsername() && showRealName && !usernameAndRealNameAreSame; const messageType = MessageTypes.getType(message); const isSelecting = useIsSelecting(); const toggleSelected = useToggleSelect(message._id); const isSelected = useIsSelectedMessage(message._id); useCountSelected(); return ( {!isSelecting && showUserAvatar && } {isSelecting && } {getUserDisplayName(user.name, user.username, showRealName)} {showUsername && ( <> {' '} @{user.username} )} {messageType && ( )} {formatTime(message.ts)} {message.attachments && ( )} {message.actionLinks?.length && ( ({ methodId, i18nLabel: i18nLabel as TranslationKey, ...action, }))} /> )} ); }; export default memo(SystemMessage);