FEAT: Exibe mídia recebida no chat via URL direta (image, audio, video, document)
This commit is contained in:
parent
0928d8d0d3
commit
d508df2afb
@ -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 ? (
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user