import React from 'react'; import classNames from 'classnames'; import { Avatar } from './Avatar'; import { MessageBody } from './conversation/MessageBody'; import { Timestamp } from './conversation/Timestamp'; import { ContactName } from './conversation/ContactName'; import { TypingAnimation } from './conversation/TypingAnimation'; import { cleanId } from './_util'; import { ColorType, LocalizerType } from '../types/Util'; export type PropsData = { id: string; phoneNumber: string; color?: ColorType; profileName?: string; name?: string; type: 'group' | 'direct'; avatarPath?: string; isMe: boolean; lastUpdated: number; unreadCount: number; isSelected: boolean; draftPreview?: string; shouldShowDraft?: boolean; typingContact?: Object; lastMessage?: { status: 'sending' | 'sent' | 'delivered' | 'read' | 'error'; text: string; }; }; type PropsHousekeeping = { i18n: LocalizerType; style?: Object; onClick?: (id: string) => void; }; type Props = PropsData & PropsHousekeeping; export class ConversationListItem extends React.PureComponent { public renderAvatar() { const { avatarPath, color, type, i18n, isMe, name, phoneNumber, profileName, } = this.props; return (
{this.renderUnread()}
); } public renderUnread() { const { unreadCount } = this.props; if (unreadCount > 0) { return (
{unreadCount}
); } return null; } public renderHeader() { const { unreadCount, i18n, isMe, lastUpdated, name, phoneNumber, profileName, } = this.props; return (
0 ? 'module-conversation-list-item__header__name--with-unread' : null )} > {isMe ? ( i18n('noteToSelf') ) : ( )}
0 ? 'module-conversation-list-item__header__date--has-unread' : null )} > 0} i18n={i18n} />
); } public renderMessage() { const { draftPreview, i18n, lastMessage, shouldShowDraft, typingContact, unreadCount, } = this.props; if (!lastMessage && !typingContact) { return null; } const showingDraft = shouldShowDraft && draftPreview; // Note: instead of re-using showingDraft here we explode it because // typescript can't tell that draftPreview is truthy otherwise const text = shouldShowDraft && draftPreview ? draftPreview : lastMessage && lastMessage.text ? lastMessage.text : ''; return (
0 ? 'module-conversation-list-item__message__text--has-unread' : null )} > {typingContact ? ( ) : ( <> {showingDraft ? ( {i18n('ConversationListItem--draft-prefix')} ) : null} )}
{!showingDraft && lastMessage && lastMessage.status ? (
) : null}
); } public render() { const { unreadCount, onClick, id, isSelected, style } = this.props; return ( ); } }