import React from 'react'; import { User, Trash2 } from 'lucide-react'; import { getGravatarUrl } from '@/utils/gravatar'; const ConversationItem = ({ conversation, isSelected, onClick, onDelete, // Nouvelle prop pour la suppression unreadCount = 0, lastMessage, isTyping = false, userPresences = {}, // Nouveau prop pour les statuts de présence }) => { const formatTime = (dateString) => { if (!dateString) return ''; const date = new Date(dateString); const now = new Date(); const diffInHours = (now - date) / (1000 * 60 * 60); if (diffInHours < 24) { return date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit', }); } else { return date.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', }); } }; const getInterlocutorName = () => { if (conversation.interlocuteur) { // Si nous avons le nom et prénom, les utiliser if ( conversation.interlocuteur.first_name && conversation.interlocuteur.last_name ) { return `${conversation.interlocuteur.first_name} ${conversation.interlocuteur.last_name}`; } // Sinon, utiliser l'email comme fallback if (conversation.interlocuteur.email) { return conversation.interlocuteur.email; } } return conversation.name || 'Utilisateur inconnu'; }; const getLastMessageText = () => { if (isTyping) { return ( Tape un message... ); } if (lastMessage) { return lastMessage.content || lastMessage.corpus || 'Message...'; } if (conversation.last_message) { return ( conversation.last_message.content || conversation.last_message.corpus || 'Message...' ); } return 'Aucun message'; }; const getLastMessageTime = () => { if (lastMessage) { return formatTime(lastMessage.created_at || lastMessage.date_envoi); } if (conversation.last_message) { return formatTime( conversation.last_message.created_at || conversation.last_message.date_envoi ); } return ''; }; const getUserPresenceStatus = () => { if (conversation.interlocuteur?.id) { const presence = userPresences[conversation.interlocuteur.id]; return presence?.status || 'offline'; } return 'offline'; }; const getPresenceColor = (status) => { switch (status) { case 'online': return 'bg-tertiary'; case 'away': return 'bg-yellow-400'; case 'busy': return 'bg-red-400'; case 'offline': default: return 'bg-gray-400'; } }; const getPresenceLabel = (status) => { switch (status) { case 'online': return 'En ligne'; case 'away': return 'Absent'; case 'busy': return 'Occupé'; case 'offline': default: return 'Hors ligne'; } }; const presenceStatus = getUserPresenceStatus(); return (
{/* Avatar */}
{`Avatar {/* Indicateur de statut en ligne */}
{/* Contenu de la conversation */}

{getInterlocutorName()}

{unreadCount > 0 && ( )} {getLastMessageTime()} {/* Bouton de suppression */} {onDelete && ( )}

{getLastMessageText()}

); }; export default ConversationItem;