import type { IMessage } from '@rocket.chat/core-typings'; import { MessageHeader as FuselageMessageHeader, MessageName, MessageTimestamp, MessageUsername, MessageStatusPrivateIndicator, MessageNameContainer, } from '@rocket.chat/fuselage'; import { useButtonPattern } from '@rocket.chat/fuselage-hooks'; import { useUserDisplayName } from '@rocket.chat/ui-client'; import { useUserPresence, useUserCard } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import { memo } from 'react'; import { useTranslation } from 'react-i18next'; import StatusIndicators from './StatusIndicators'; import MessageRoles from './header/MessageRoles'; import { useMessageRoles } from './header/hooks/useMessageRoles'; import { useMessageListShowUsername, useMessageListShowRealName, useMessageListShowRoles, useMessageListFormatDateAndTime, useMessageListFormatTime, } from './list/MessageListContext'; type MessageHeaderProps = { message: IMessage; }; const MessageHeader = ({ message }: MessageHeaderProps): ReactElement => { const { t } = useTranslation(); const formatTime = useMessageListFormatTime(); const formatDateAndTime = useMessageListFormatDateAndTime(); const { triggerProps, openUserCard } = useUserCard(); const buttonProps = useButtonPattern((e) => openUserCard(e, message.u.username)); const showRealName = useMessageListShowRealName(); const user = { ...message.u, roles: [], ...useUserPresence(message.u._id) }; const usernameAndRealNameAreSame = !user.name || user.username === user.name; const showUsername = useMessageListShowUsername() && showRealName && !usernameAndRealNameAreSame; const displayName = useUserDisplayName(user); const showRoles = useMessageListShowRoles(); const roles = useMessageRoles(message.u._id, message.rid, showRoles); const shouldShowRolesList = roles.length > 0; return ( {message.alias || displayName} {showUsername && ( <> {' '} @{user.username} )} {shouldShowRolesList && } {formatTime(message.ts)} {message.private && {t('Only_you_can_see_this_message')}} ); }; export default memo(MessageHeader);