| 
									
										
										
										
											2023-01-03 11:55:46 -08:00
										 |  |  | // Copyright 2019 Signal Messenger, LLC
 | 
					
						
							| 
									
										
										
										
											2020-10-30 15:34:04 -05:00
										 |  |  | // SPDX-License-Identifier: AGPL-3.0-only
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  | import React from 'react'; | 
					
						
							|  |  |  | import classNames from 'classnames'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-07 17:21:10 -05:00
										 |  |  | import { Avatar, AvatarBlur } from '../Avatar'; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  | import { Spinner } from '../Spinner'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-26 14:15:33 -05:00
										 |  |  | import type { LocalizerType } from '../../types/Util'; | 
					
						
							| 
									
										
										
										
											2021-08-05 20:17:05 -04:00
										 |  |  | import { AvatarColors } from '../../types/Colors'; | 
					
						
							| 
									
										
										
										
											2021-10-26 14:15:33 -05:00
										 |  |  | import type { EmbeddedContactType } from '../../types/EmbeddedContact'; | 
					
						
							|  |  |  | import { getName } from '../../types/EmbeddedContact'; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function renderAvatar({ | 
					
						
							|  |  |  |   contact, | 
					
						
							|  |  |  |   i18n, | 
					
						
							|  |  |  |   size, | 
					
						
							|  |  |  |   direction, | 
					
						
							|  |  |  | }: { | 
					
						
							| 
									
										
										
										
											2021-08-19 18:56:39 -07:00
										 |  |  |   contact: EmbeddedContactType; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   i18n: LocalizerType; | 
					
						
							| 
									
										
										
										
											2019-10-04 11:06:17 -07:00
										 |  |  |   size: 28 | 52 | 80; | 
					
						
							| 
									
										
										
										
											2019-05-31 15:42:01 -07:00
										 |  |  |   direction?: 'outgoing' | 'incoming'; | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  | }): JSX.Element { | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   const { avatar } = contact; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const avatarPath = avatar && avatar.avatar && avatar.avatar.path; | 
					
						
							|  |  |  |   const pending = avatar && avatar.avatar && avatar.avatar.pending; | 
					
						
							| 
									
										
										
										
											2020-07-23 18:35:32 -07:00
										 |  |  |   const title = getName(contact) || ''; | 
					
						
							| 
									
										
										
										
											2019-06-26 12:33:13 -07:00
										 |  |  |   const spinnerSvgSize = size < 50 ? 'small' : 'normal'; | 
					
						
							|  |  |  |   const spinnerSize = size < 50 ? '24px' : undefined; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (pending) { | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |       <div className="module-embedded-contact__spinner-container"> | 
					
						
							| 
									
										
										
										
											2019-06-26 12:33:13 -07:00
										 |  |  |         <Spinner | 
					
						
							|  |  |  |           svgSize={spinnerSvgSize} | 
					
						
							|  |  |  |           size={spinnerSize} | 
					
						
							|  |  |  |           direction={direction} | 
					
						
							|  |  |  |         /> | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |       </div> | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <Avatar | 
					
						
							| 
									
										
										
										
											2021-05-07 17:21:10 -05:00
										 |  |  |       acceptedMessageRequest={false} | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |       avatarPath={avatarPath} | 
					
						
							| 
									
										
										
										
											2021-12-01 11:24:00 -06:00
										 |  |  |       badge={undefined} | 
					
						
							| 
									
										
										
										
											2021-05-07 17:21:10 -05:00
										 |  |  |       blur={AvatarBlur.NoBlur} | 
					
						
							| 
									
										
										
										
											2021-08-05 20:17:05 -04:00
										 |  |  |       color={AvatarColors[0]} | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |       conversationType="direct" | 
					
						
							|  |  |  |       i18n={i18n} | 
					
						
							| 
									
										
										
										
											2021-05-07 17:21:10 -05:00
										 |  |  |       isMe | 
					
						
							| 
									
										
										
										
											2020-07-23 18:35:32 -07:00
										 |  |  |       title={title} | 
					
						
							| 
									
										
										
										
											2021-05-07 17:21:10 -05:00
										 |  |  |       sharedGroupNames={[]} | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |       size={size} | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function renderName({ | 
					
						
							|  |  |  |   contact, | 
					
						
							|  |  |  |   isIncoming, | 
					
						
							|  |  |  |   module, | 
					
						
							|  |  |  | }: { | 
					
						
							| 
									
										
										
										
											2021-08-19 18:56:39 -07:00
										 |  |  |   contact: EmbeddedContactType; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   isIncoming: boolean; | 
					
						
							|  |  |  |   module: string; | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  | }): JSX.Element { | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   return ( | 
					
						
							|  |  |  |     <div | 
					
						
							|  |  |  |       className={classNames( | 
					
						
							|  |  |  |         `module-${module}__contact-name`, | 
					
						
							|  |  |  |         isIncoming ? `module-${module}__contact-name--incoming` : null | 
					
						
							|  |  |  |       )} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       {getName(contact)} | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function renderContactShorthand({ | 
					
						
							|  |  |  |   contact, | 
					
						
							|  |  |  |   isIncoming, | 
					
						
							|  |  |  |   module, | 
					
						
							|  |  |  | }: { | 
					
						
							| 
									
										
										
										
											2021-08-19 18:56:39 -07:00
										 |  |  |   contact: EmbeddedContactType; | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   isIncoming: boolean; | 
					
						
							|  |  |  |   module: string; | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  | }): JSX.Element { | 
					
						
							| 
									
										
										
										
											2019-01-14 13:49:58 -08:00
										 |  |  |   const { number: phoneNumber, email } = contact; | 
					
						
							|  |  |  |   const firstNumber = phoneNumber && phoneNumber[0] && phoneNumber[0].value; | 
					
						
							|  |  |  |   const firstEmail = email && email[0] && email[0].value; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div | 
					
						
							|  |  |  |       className={classNames( | 
					
						
							|  |  |  |         `module-${module}__contact-method`, | 
					
						
							|  |  |  |         isIncoming ? `module-${module}__contact-method--incoming` : null | 
					
						
							|  |  |  |       )} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       {firstNumber || firstEmail} | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } |