'use client'; import type { ReactNode } from 'react'; import { Loader2, Trash2 } from 'lucide-react'; import { ChatMediaAlbumGrid } from '@/components/chat/chat-media-album-grid'; import { MediaImageSkeleton } from '@/components/ui/media-image-skeleton'; import { AdminChatMessage, ChatMessage } from '@/lib/api'; import { groupChatMessagesForDisplay, parseChatMediaMetadata } from '@/lib/chat-media-album'; import { cn } from '@/lib/utils'; import { AdminChatMediaEntry, adminMessageToChatMessage } from '@/components/admin/use-admin-chat-media'; function AdminImageBubble({ message, media, onOpen }: { message: ChatMessage; media?: AdminChatMediaEntry; onOpen: () => void; }) { const meta = parseChatMediaMetadata(message.metadataJson); const fileName = meta.fileName || message.content || 'Фото'; if (media?.status === 'error') { return
{media.errorMessage ?? 'Фото недоступно'}
; } if (!media?.blobUrl || media.status === 'loading') { return{captionMessage.content}
) : null}[E2E недоступно для модерации]
); } if (message.storageKey && message.type === 'IMAGE') { return (📎 {meta.fileName || message.content || 'Файл'}
); } if (message.type === 'VOICE' || message.type === 'AUDIO') { return (🎤 Голосовое сообщение
); } if (message.type === 'POLL') { return (📊 Опрос
); } const text = adminMessage.content?.trim() || adminMessage.preview; if (!text || text === '[Пустое сообщение]') { return null; } return ({text}
); })}