|  |  |  | import React from 'react'; | 
					
						
							|  |  |  | import classNames from 'classnames'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { Emojify } from './conversation/Emojify'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { Localizer } from '../types/Util'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | interface Props { | 
					
						
							|  |  |  |   phoneNumber: string; | 
					
						
							|  |  |  |   isMe?: boolean; | 
					
						
							|  |  |  |   name?: string; | 
					
						
							|  |  |  |   color?: string; | 
					
						
							|  |  |  |   verified: boolean; | 
					
						
							|  |  |  |   profileName?: string; | 
					
						
							|  |  |  |   avatarPath?: string; | 
					
						
							|  |  |  |   i18n: Localizer; | 
					
						
							|  |  |  |   onClick?: () => void; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getInitial(name: string): string { | 
					
						
							|  |  |  |   return name.trim()[0] || '#'; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export class ContactListItem extends React.Component<Props> { | 
					
						
							|  |  |  |   public renderAvatar({ displayName }: { displayName: string }) { | 
					
						
							|  |  |  |     const { avatarPath, i18n, color, name } = this.props; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (avatarPath) { | 
					
						
							|  |  |  |       return ( | 
					
						
							|  |  |  |         <div className="module-contact-list-item__avatar"> | 
					
						
							|  |  |  |           <img alt={i18n('contactAvatarAlt', [displayName])} src={avatarPath} /> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const title = name ? getInitial(name) : '#'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |       <div | 
					
						
							|  |  |  |         className={classNames( | 
					
						
							|  |  |  |           'module-contact-list-item__avatar-default', | 
					
						
							|  |  |  |           `module-contact-list-item__avatar-default--${color}` | 
					
						
							|  |  |  |         )} | 
					
						
							|  |  |  |       > | 
					
						
							|  |  |  |         <div className="module-contact-list-item__avatar-default__label"> | 
					
						
							|  |  |  |           {title} | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public render() { | 
					
						
							|  |  |  |     const { | 
					
						
							|  |  |  |       i18n, | 
					
						
							|  |  |  |       name, | 
					
						
							|  |  |  |       onClick, | 
					
						
							|  |  |  |       isMe, | 
					
						
							|  |  |  |       phoneNumber, | 
					
						
							|  |  |  |       profileName, | 
					
						
							|  |  |  |       verified, | 
					
						
							|  |  |  |     } = this.props; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const title = name ? name : phoneNumber; | 
					
						
							|  |  |  |     const displayName = isMe ? i18n('me') : title; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const profileElement = | 
					
						
							|  |  |  |       !isMe && profileName && !name ? ( | 
					
						
							|  |  |  |         <span className="module-contact-list-item__text__profile-name"> | 
					
						
							|  |  |  |           ~<Emojify text={profileName} i18n={i18n} /> | 
					
						
							|  |  |  |         </span> | 
					
						
							|  |  |  |       ) : null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const showNumber = isMe || name; | 
					
						
							|  |  |  |     const showVerified = !isMe && verified; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |       <div | 
					
						
							|  |  |  |         role="button" | 
					
						
							|  |  |  |         onClick={onClick} | 
					
						
							|  |  |  |         className={classNames( | 
					
						
							|  |  |  |           'module-contact-list-item', | 
					
						
							|  |  |  |           onClick ? 'module-contact-list-item--with-click-handler' : null | 
					
						
							|  |  |  |         )} | 
					
						
							|  |  |  |       > | 
					
						
							|  |  |  |         {this.renderAvatar({ displayName })} | 
					
						
							|  |  |  |         <div className="module-contact-list-item__text"> | 
					
						
							|  |  |  |           <div className="module-contact-list-item__text__name"> | 
					
						
							|  |  |  |             <Emojify text={displayName} i18n={i18n} /> {profileElement} | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |           <div className="module-contact-list-item__text__additional-data"> | 
					
						
							|  |  |  |             {showVerified ? ( | 
					
						
							|  |  |  |               <div className="module-contact-list-item__text__verified-icon" /> | 
					
						
							|  |  |  |             ) : null} | 
					
						
							|  |  |  |             {showVerified ? ` ${i18n('verified')}` : null} | 
					
						
							|  |  |  |             {showVerified && showNumber ? ' ∙ ' : null} | 
					
						
							|  |  |  |             {showNumber ? phoneNumber : null} | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |