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.
		
		
		
		
		
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
// @ts-ignore
 | 
						|
import Attachments from '../../app/attachments';
 | 
						|
import { format as formatPhoneNumber } from '../types/PhoneNumber';
 | 
						|
 | 
						|
export interface Contact {
 | 
						|
  name?: Name;
 | 
						|
  number?: Array<Phone>;
 | 
						|
  email?: Array<Email>;
 | 
						|
  address?: Array<PostalAddress>;
 | 
						|
  avatar?: Avatar;
 | 
						|
  organization?: string;
 | 
						|
}
 | 
						|
 | 
						|
interface Name {
 | 
						|
  givenName?: string;
 | 
						|
  familyName?: string;
 | 
						|
  prefix?: string;
 | 
						|
  suffix?: string;
 | 
						|
  middleName?: string;
 | 
						|
  displayName?: string;
 | 
						|
}
 | 
						|
 | 
						|
export enum ContactType {
 | 
						|
  HOME = 1,
 | 
						|
  MOBILE = 2,
 | 
						|
  WORK = 3,
 | 
						|
  CUSTOM = 4,
 | 
						|
}
 | 
						|
 | 
						|
export enum AddressType {
 | 
						|
  HOME = 1,
 | 
						|
  WORK = 2,
 | 
						|
  CUSTOM = 3,
 | 
						|
}
 | 
						|
 | 
						|
export interface Phone {
 | 
						|
  value: string;
 | 
						|
  type: ContactType;
 | 
						|
  label?: string;
 | 
						|
}
 | 
						|
 | 
						|
export interface Email {
 | 
						|
  value: string;
 | 
						|
  type: ContactType;
 | 
						|
  label?: string;
 | 
						|
}
 | 
						|
 | 
						|
export interface PostalAddress {
 | 
						|
  type: AddressType;
 | 
						|
  label?: string;
 | 
						|
  street?: string;
 | 
						|
  pobox?: string;
 | 
						|
  neighborhood?: string;
 | 
						|
  city?: string;
 | 
						|
  region?: string;
 | 
						|
  postcode?: string;
 | 
						|
  country?: string;
 | 
						|
}
 | 
						|
 | 
						|
interface Avatar {
 | 
						|
  avatar: Attachment;
 | 
						|
  isProfile: boolean;
 | 
						|
}
 | 
						|
 | 
						|
interface Attachment {
 | 
						|
  path: string;
 | 
						|
}
 | 
						|
 | 
						|
export function contactSelector(
 | 
						|
  contact: Contact,
 | 
						|
  options: {
 | 
						|
    regionCode: string;
 | 
						|
    hasSignalAccount: boolean;
 | 
						|
    getAbsoluteAttachmentPath: (path: string) => string;
 | 
						|
    onSendMessage: () => void;
 | 
						|
    onClick: () => void;
 | 
						|
  }
 | 
						|
) {
 | 
						|
  const {
 | 
						|
    getAbsoluteAttachmentPath,
 | 
						|
    hasSignalAccount,
 | 
						|
    onClick,
 | 
						|
    onSendMessage,
 | 
						|
    regionCode,
 | 
						|
  } = options;
 | 
						|
 | 
						|
  let { avatar } = contact;
 | 
						|
  if (avatar && avatar.avatar && avatar.avatar.path) {
 | 
						|
    avatar = {
 | 
						|
      ...avatar,
 | 
						|
      avatar: {
 | 
						|
        ...avatar.avatar,
 | 
						|
        path: getAbsoluteAttachmentPath(avatar.avatar.path),
 | 
						|
      },
 | 
						|
    };
 | 
						|
  }
 | 
						|
 | 
						|
  return {
 | 
						|
    ...contact,
 | 
						|
    hasSignalAccount,
 | 
						|
    onSendMessage,
 | 
						|
    onClick,
 | 
						|
    avatar,
 | 
						|
    number:
 | 
						|
      contact.number &&
 | 
						|
      contact.number.map(item => ({
 | 
						|
        ...item,
 | 
						|
        value: formatPhoneNumber(item.value, {
 | 
						|
          ourRegionCode: regionCode,
 | 
						|
        }),
 | 
						|
      })),
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export function getName(contact: Contact): string | null {
 | 
						|
  const { name, organization } = contact;
 | 
						|
  const displayName = (name && name.displayName) || null;
 | 
						|
  const givenName = (name && name.givenName) || null;
 | 
						|
  const familyName = (name && name.familyName) || null;
 | 
						|
  const backupName =
 | 
						|
    (givenName && familyName && `${givenName} ${familyName}`) || null;
 | 
						|
 | 
						|
  return displayName || organization || backupName || givenName || familyName;
 | 
						|
}
 |