'use client'; import { Bot } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { UserAvatar } from '@/components/id/user-avatar'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { ChatRoom, apiFetch } from '@/lib/api'; import { cn } from '@/lib/utils'; interface ChatRoomAvatarDisplayProps { room: ChatRoom; viewerUserId: string; token: string | null; className?: string; size?: 'sm' | 'md'; } function sizeClass(size: 'sm' | 'md') { return size === 'sm' ? 'h-9 w-9 text-xs' : 'h-11 w-11 text-sm'; } export function ChatRoomAvatarDisplay({ room, viewerUserId, token, className, size = 'md' }: ChatRoomAvatarDisplayProps) { const [roomAvatarUrl, setRoomAvatarUrl] = useState(null); const peerMember = useMemo( () => room.type === 'DIRECT' || room.type === 'E2E' || room.type === 'BOT' ? room.members.find((member) => member.userId !== viewerUserId) : undefined, [room.members, room.type, viewerUserId] ); useEffect(() => { if (!token || !room.hasAvatar || room.type === 'DIRECT' || room.type === 'E2E' || room.type === 'BOT') { setRoomAvatarUrl(null); return; } apiFetch<{ accessUrl: string }>(`/media/chat/${room.id}/avatar/url`, {}, token) .then((response) => setRoomAvatarUrl(response.accessUrl)) .catch(() => setRoomAvatarUrl(null)); }, [room.hasAvatar, room.id, room.type, token]); if (peerMember && (room.type === 'DIRECT' || room.type === 'E2E')) { return ( ); } if (room.type === 'BOT') { return ( ); } if (room.hasAvatar && roomAvatarUrl) { return ( {room.name.slice(0, 2).toUpperCase()} ); } return ( {room.type === 'GENERAL' ? 'В' : room.name.slice(0, 2).toUpperCase()} ); }