import * as React from 'react'; import { take } from 'lodash'; import { Avatar, Props as AvatarProps } from '../Avatar'; import { ContactName } from './ContactName'; import { Emojify } from './Emojify'; import { Intl } from '../Intl'; import { LocalizerType } from '../../types/Util'; export type Props = { i18n: LocalizerType; isMe?: boolean; groups?: Array; membersCount?: number; phoneNumber?: string; onHeightChange?: () => unknown; } & Omit; const renderMembershipRow = ({ i18n, groups, conversationType, isMe, }: Pick) => { const className = 'module-conversation-hero__membership'; const nameClassName = `${className}__name`; if (isMe) { return
{i18n('noteToSelfHero')}
; } if (conversationType === 'direct' && groups && groups.length > 0) { const firstThreeGroups = take(groups, 3).map((group, i) => ( )); if (firstThreeGroups.length >= 3) { return (
); } else if (firstThreeGroups.length >= 2) { return (
); } else if (firstThreeGroups.length >= 1) { return (
); } } return null; }; export const ConversationHero = ({ i18n, avatarPath, color, conversationType, isMe, membersCount, groups = [], name, phoneNumber, profileName, title, onHeightChange, }: Props) => { const firstRenderRef = React.useRef(true); React.useEffect(() => { // If any of the depenencies for this hook change then the height of this // component may have changed. The cleanup function notifies listeners of // any potential height changes. return () => { if (onHeightChange && !firstRenderRef.current) { onHeightChange(); } else { firstRenderRef.current = false; } }; }, [ firstRenderRef, onHeightChange, // Avoid collisions in these dependencies by prefixing them // These dependencies may be dynamic, and therefore may cause height changes `mc-${membersCount}`, `n-${name}`, `pn-${profileName}`, ...groups.map(g => `g-${g}`), ]); const phoneNumberOnly = Boolean( !name && !profileName && conversationType === 'direct' ); return (

{isMe ? ( i18n('noteToSelf') ) : ( )}

{!isMe ? (
{membersCount === 1 ? i18n('ConversationHero--members-1') : membersCount !== undefined ? i18n('ConversationHero--members', [`${membersCount}`]) : phoneNumberOnly ? null : phoneNumber}
) : null} {renderMembershipRow({ isMe, groups, conversationType, i18n })}
); };