You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
| import classNames from 'classnames';
 | |
| import { CSSProperties } from 'react';
 | |
| 
 | |
| import {
 | |
|   useIsPrivate,
 | |
|   useNicknameOrProfileNameOrShortenedPubkey,
 | |
| } from '../../hooks/useParamSelector';
 | |
| import { Emojify } from './Emojify';
 | |
| 
 | |
| type Props = {
 | |
|   pubkey: string;
 | |
|   name?: string | null;
 | |
|   profileName?: string | null;
 | |
|   module?: string;
 | |
|   boldProfileName?: boolean;
 | |
|   shouldShowPubkey: boolean;
 | |
| };
 | |
| 
 | |
| export const ContactName = (props: Props) => {
 | |
|   const { pubkey, name, profileName, module, boldProfileName, shouldShowPubkey } = props;
 | |
|   const prefix = module || 'module-contact-name';
 | |
| 
 | |
|   const convoName = useNicknameOrProfileNameOrShortenedPubkey(pubkey);
 | |
|   const isPrivate = useIsPrivate(pubkey);
 | |
|   const shouldShowProfile = Boolean(convoName || profileName || name);
 | |
| 
 | |
|   const commonStyles = {
 | |
|     'min-width': 0,
 | |
|     'text-overflow': 'ellipsis',
 | |
|     overflow: 'hidden',
 | |
|   } as CSSProperties;
 | |
| 
 | |
|   const styles = (
 | |
|     boldProfileName
 | |
|       ? {
 | |
|           fontWeight: 'bold',
 | |
|           ...commonStyles,
 | |
|         }
 | |
|       : commonStyles
 | |
|   ) as CSSProperties;
 | |
|   const textProfile = profileName || name || convoName || window.i18n('anonymous');
 | |
| 
 | |
|   return (
 | |
|     <span
 | |
|       className={classNames(prefix)}
 | |
|       dir="auto"
 | |
|       data-testid={`${prefix}__profile-name`}
 | |
|       style={{
 | |
|         textOverflow: 'inherit',
 | |
|         display: 'flex',
 | |
|         flexDirection: 'row',
 | |
|         gap: 'var(--margins-xs)',
 | |
|       }}
 | |
|     >
 | |
|       {shouldShowProfile ? (
 | |
|         <div style={styles} className={`${prefix}__profile-name`}>
 | |
|           <Emojify text={textProfile} sizeClass="small" isGroup={!isPrivate} />
 | |
|         </div>
 | |
|       ) : null}
 | |
|       {shouldShowPubkey ? <div className={`${prefix}__profile-number`}>{pubkey}</div> : null}
 | |
|     </span>
 | |
|   );
 | |
| };
 |