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 (
)
}
}