|  |  |  | import classNames from 'classnames'; | 
					
						
							|  |  |  | import React, { useContext } from 'react'; | 
					
						
							|  |  |  | import { isEmpty } from 'lodash'; | 
					
						
							|  |  |  | import { useConversationPropsById, useIsPrivate } from '../../../hooks/useParamSelector'; | 
					
						
							|  |  |  | import { MessageBody } from '../../conversation/message/message-content/MessageBody'; | 
					
						
							|  |  |  | import { OutgoingMessageStatus } from '../../conversation/message/message-content/OutgoingMessageStatus'; | 
					
						
							|  |  |  | import { TypingAnimation } from '../../conversation/TypingAnimation'; | 
					
						
							|  |  |  | import { ContextConversationId } from './ConversationListItem'; | 
					
						
							|  |  |  | import { useSelector } from 'react-redux'; | 
					
						
							|  |  |  | import { isSearching } from '../../../state/selectors/search'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function useMessageItemProps(convoId: string) { | 
					
						
							|  |  |  |   const convoProps = useConversationPropsById(convoId); | 
					
						
							|  |  |  |   if (!convoProps) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     isTyping: !!convoProps.isTyping, | 
					
						
							|  |  |  |     lastMessage: convoProps.lastMessage, | 
					
						
							|  |  |  |     unreadCount: convoProps.unreadCount || 0, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const MessageItem = (props: { isMessageRequest: boolean }) => { | 
					
						
							|  |  |  |   const conversationId = useContext(ContextConversationId); | 
					
						
							|  |  |  |   const convoProps = useMessageItemProps(conversationId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const isGroup = !!useIsPrivate(conversationId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const isSearchingMode = useSelector(isSearching); | 
					
						
							|  |  |  |   if (!convoProps) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const { lastMessage, isTyping, unreadCount } = convoProps; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!lastMessage && !isTyping) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const text = lastMessage?.text || ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (isEmpty(text)) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className="module-conversation-list-item__message"> | 
					
						
							|  |  |  |       <div | 
					
						
							|  |  |  |         className={classNames( | 
					
						
							|  |  |  |           'module-conversation-list-item__message__text', | 
					
						
							|  |  |  |           unreadCount > 0 ? 'module-conversation-list-item__message__text--has-unread' : null | 
					
						
							|  |  |  |         )} | 
					
						
							|  |  |  |       > | 
					
						
							|  |  |  |         {isTyping ? ( | 
					
						
							|  |  |  |           <TypingAnimation /> | 
					
						
							|  |  |  |         ) : ( | 
					
						
							|  |  |  |           <MessageBody text={text} disableJumbomoji={true} disableLinks={true} isGroup={isGroup} /> | 
					
						
							|  |  |  |         )} | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       {!isSearchingMode && lastMessage && lastMessage.status && !props.isMessageRequest ? ( | 
					
						
							|  |  |  |         <OutgoingMessageStatus status={lastMessage.status} /> | 
					
						
							|  |  |  |       ) : null} | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | }; |