diff --git a/apps/rebreak-native/app/(app)/chat.tsx b/apps/rebreak-native/app/(app)/chat.tsx index 85e4f5c..c9c1c4f 100644 --- a/apps/rebreak-native/app/(app)/chat.tsx +++ b/apps/rebreak-native/app/(app)/chat.tsx @@ -1,4 +1,4 @@ -import { useState, useCallback } from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { View, Text, @@ -15,6 +15,7 @@ import { Ionicons } from '@expo/vector-icons'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { apiFetch } from '../../lib/api'; +import { resolveAvatar } from '../../lib/resolveAvatar'; import { AppHeader } from '../../components/AppHeader'; import { useColors } from '../../lib/theme'; @@ -42,16 +43,23 @@ function DmItem({ conv, onPress }: { conv: DmConversation; onPress: () => void } const styles = makeStyles(colors); const hasUnread = conv.unreadCount > 0; + const avatarUrl = resolveAvatar(conv.partnerAvatar, conv.partnerName); + const [avatarLoadFailed, setAvatarLoadFailed] = useState(false); + useEffect(() => { setAvatarLoadFailed(false); }, [avatarUrl]); + const avatarInitials = (conv.partnerName.slice(0, 2)).toUpperCase() || '?'; + return ( - {conv.partnerAvatar ? ( - + {!avatarLoadFailed ? ( + setAvatarLoadFailed(true)} + /> ) : ( - - {conv.partnerName.slice(0, 2).toUpperCase()} - + {avatarInitials} )} @@ -130,7 +138,7 @@ export default function ChatScreen() { {/* Search header */} - + ) { flexDirection: 'row', alignItems: 'center', backgroundColor: colors.surfaceElevated, - borderRadius: 10, - paddingHorizontal: 10, + borderRadius: 999, + paddingHorizontal: 16, paddingVertical: 8, }, - searchIcon: { marginRight: 7 }, + searchIcon: { marginRight: 8 }, searchInput: { flex: 1, fontSize: 14,