import React from 'react' import type { ViewStyle } from 'react-native' import type { ConversationAvatarData } from '../../types' import AvatarPrimitive, { type AvatarRootProps } from '../primitive/avatar_primitive' import { AvatarGroup } from './avatar_group' import { EmojiAvatar } from './emoji_avatar' import { type IconString } from './icon' import { IconAvatar } from './icon_avatar' type ResolvedAvatar = | { kind: 'image'; url: string } | { kind: 'icon'; iconKey: string; color: string | null } | { kind: 'emoji'; emoji: string; color: string | null } | { kind: 'group'; sources: string[] | undefined } function resolveAvatar(conversation: ConversationAvatarData): ResolvedAvatar { if (conversation.customAvatarType === 'image' && conversation.customAvatarImageUrl) { return { kind: 'image', url: conversation.customAvatarImageUrl } } if (conversation.customAvatarType === 'icon' && conversation.customAvatarKey) { return { kind: 'icon', iconKey: conversation.customAvatarKey, color: conversation.customAvatarColor ?? null, } } if (conversation.customAvatarType === 'emoji' && conversation.customAvatarKey) { return { kind: 'emoji', emoji: conversation.customAvatarKey, color: conversation.customAvatarColor ?? null, } } return { kind: 'group', sources: conversation.previewAvatarUrls } } interface ConversationAvatarProps { conversation: ConversationAvatarData size?: AvatarRootProps['size'] showFallback?: boolean fallbackIconName?: IconString style?: ViewStyle maxFontSizeMultiplier?: AvatarRootProps['maxFontSizeMultiplier'] } export function ConversationAvatar({ conversation, size = 'lg', showFallback = false, fallbackIconName = 'general.person', style, maxFontSizeMultiplier, }: ConversationAvatarProps) { const avatar = resolveAvatar(conversation) const sizeProps = { size, maxFontSizeMultiplier, style } switch (avatar.kind) { case 'image': return ( ) case 'icon': return case 'emoji': return case 'group': return ( ) } }