FEAT: Exibe mídia recebida no chat via URL direta (image, audio, video, document)

This commit is contained in:
Rafael Alves Lopes 2026-07-21 16:37:20 -03:00
parent 0928d8d0d3
commit d508df2afb
2 changed files with 10 additions and 23 deletions

View File

@ -91,21 +91,14 @@ function DateSeparator({ label }) {
); );
} }
function MediaRenderer({ message, contactId, onLoadMedia, isAgent }) { function MediaRenderer({ message, isAgent }) {
const mediaUrl = useMemo(() => getMediaUrl(message.media), [message.media]); const mediaUrl = message.mediaUrl || useMemo(() => getMediaUrl(message.media), [message.media]);
const mimetype = message.media?.mimetype || ''; const mimetype = message.mediaMimeType || message.media?.mimetype || '';
const filename = message.media?.filename || 'arquivo'; const filename = message.media?.filename || 'arquivo';
useEffect(() => { if (!message.hasMedia && !mediaUrl) return null;
if (!message.hasMedia || message.media?.data || message.mediaLoading || message.mediaError) {
return;
}
onLoadMedia?.(contactId, message.id);
}, [contactId, message, onLoadMedia]);
if (!message.hasMedia && !message.media) return null; if (!mediaUrl) {
if (message.mediaLoading || (!message.media?.data && !message.mediaError)) {
return ( return (
<div <div
style={{ style={{
@ -125,14 +118,6 @@ function MediaRenderer({ message, contactId, onLoadMedia, isAgent }) {
); );
} }
if (message.mediaError) {
return (
<span style={{ color: isAgent ? '#fff' : 'var(--color-text-soft)', fontWeight: 700 }}>
Não foi possível carregar a mídia.
</span>
);
}
if (mimetype.startsWith('image/')) { if (mimetype.startsWith('image/')) {
return ( return (
<a href={mediaUrl} target="_blank" rel="noreferrer" style={{ display: 'block' }}> <a href={mediaUrl} target="_blank" rel="noreferrer" style={{ display: 'block' }}>
@ -600,8 +585,6 @@ export function ChatWindow({
> >
<MediaRenderer <MediaRenderer
message={message} message={message}
contactId={safeContact.id}
onLoadMedia={onLoadMedia}
isAgent={isAgent} isAgent={isAgent}
/> />
{parsedText.senderLabel ? ( {parsedText.senderLabel ? (

View File

@ -96,14 +96,18 @@ function normalizeChat(chat) {
function normalizeMessage(message) { function normalizeMessage(message) {
const id = getSerializedId(message.id) || message.id || `msg-${Date.now()}`; const id = getSerializedId(message.id) || message.id || `msg-${Date.now()}`;
const sender = message.sender || (message.fromMe ? 'agent' : 'customer'); const sender = message.sender || (message.fromMe ? 'agent' : 'customer');
const mediaUrl = message.mediaUrl || message.media_path || null;
const mediaMimeType = message.mediaMimeType || message.media_mime_type || null;
return { return {
id, id,
chatId: message.from || message.to || message.chatId, chatId: message.from || message.to || message.chatId,
sender, sender,
text: message.body ?? message.text ?? '', text: message.body ?? message.text ?? '',
timestamp: message.timestamp, timestamp: message.timestamp,
hasMedia: Boolean(message.hasMedia || message.media), hasMedia: Boolean(message.hasMedia || message.media || mediaUrl),
media: message.media || null, media: message.media || null,
mediaUrl,
mediaMimeType,
mediaLoading: false, mediaLoading: false,
mediaError: null, mediaError: null,
}; };