import React from 'react'; import { format, isToday, isYesterday } from 'date-fns'; import { fr } from 'date-fns/locale'; import { Check, CheckCheck } from 'lucide-react'; import FileAttachment from './FileAttachment'; import { getGravatarUrl } from '@/utils/gravatar'; const MessageBubble = ({ message, isOwnMessage, showAvatar = true, isRead = false, senderName = '', senderEmail = '', // Nouveau prop pour l'email du sender isFirstInGroup = true, isLastInGroup = true, showTime = true, }) => { const formatMessageTime = (dateString) => { if (!dateString) return ''; const date = new Date(dateString); if (isToday(date)) { return format(date, 'HH:mm', { locale: fr }); } else if (isYesterday(date)) { return `Hier ${format(date, 'HH:mm', { locale: fr })}`; } else { return format(date, 'dd/MM HH:mm', { locale: fr }); } }; const getMessageContent = () => { return message.content || message.corpus || ''; }; const getMessageTime = () => { return message.created_at || message.date_envoi; }; const hasAttachment = () => { return ( message.attachment && (message.attachment.fileName || message.attachment.fileUrl) ); }; const isFileOnlyMessage = () => { return hasAttachment() && !getMessageContent().trim(); }; return (
{ /* Peut ajouter des actions au hover */ }} >
{/* Avatar - affiché seulement pour le premier message du groupe */} {showAvatar && isFirstInGroup && ( {`Avatar )} {/* Espace pour aligner avec l'avatar quand il n'est pas affiché */} {(!showAvatar || !isFirstInGroup) && (
)} {/* Contenu du message */}
{/* En-tête du message (nom + heure) - seulement pour le premier message du groupe */} {isFirstInGroup && (
{senderName || (isOwnMessage ? 'Moi' : 'Utilisateur')} {formatMessageTime(getMessageTime())}
)} {/* Fichier attaché */} {hasAttachment() && (
)} {/* Contenu du message */} {getMessageContent().trim() && (
{getMessageContent()}
)} {/* Indicateurs de lecture et heure pour les messages non-groupés */}
{/* Heure pour les messages qui ne sont pas le premier du groupe */} {!isFirstInGroup && ( {formatMessageTime(getMessageTime())} )} {/* Indicateurs de lecture (uniquement pour nos messages) */} {isOwnMessage && (
{isRead ? ( ) : ( )}
)}
); }; export default MessageBubble;