import type { IMessage } from '@rocket.chat/core-typings'; import { Message, MessageLeftContainer, MessageContainer, CheckBox } from '@rocket.chat/fuselage'; import { useToggle } from '@rocket.chat/fuselage-hooks'; import { useUserId } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import React, { useRef, memo } from 'react'; import type { MessageActionContext } from '../../../../app/ui-utils/client/lib/MessageAction'; import { useIsMessageHighlight } from '../../../views/room/MessageList/contexts/MessageHighlightContext'; import { useIsSelecting, useToggleSelect, useIsSelectedMessage, useCountSelected, } from '../../../views/room/MessageList/contexts/SelectedMessagesContext'; import { useJumpToMessage } from '../../../views/room/MessageList/hooks/useJumpToMessage'; import { useChat } from '../../../views/room/contexts/ChatContext'; import IgnoredContent from '../IgnoredContent'; import MessageHeader from '../MessageHeader'; import StatusIndicators from '../StatusIndicators'; import ToolboxHolder from '../ToolboxHolder'; import MessageAvatar from '../header/MessageAvatar'; import RoomMessageContent from './room/RoomMessageContent'; type RoomMessageProps = { message: IMessage & { ignored?: boolean }; showUserAvatar: boolean; sequential: boolean; unread: boolean; mention: boolean; all: boolean; context?: MessageActionContext; ignoredUser?: boolean; searchText?: string; }; const RoomMessage = ({ message, showUserAvatar, sequential, all, mention, unread, context, ignoredUser, searchText, }: RoomMessageProps): ReactElement => { const uid = useUserId(); const editing = useIsMessageHighlight(message._id); const [displayIgnoredMessage, toggleDisplayIgnoredMessage] = useToggle(false); const ignored = (ignoredUser || message.ignored) && !displayIgnoredMessage; const chat = useChat(); const messageRef = useRef(null); const selecting = useIsSelecting(); const toggleSelected = useToggleSelect(message._id); const selected = useIsSelectedMessage(message._id); useCountSelected(); useJumpToMessage(message._id, messageRef); return ( {!sequential && message.u.username && !selecting && showUserAvatar && ( )} {selecting && } {sequential && } {!sequential && } {ignored ? ( ) : ( )} {!message.private && } ); }; export default memo(RoomMessage);