import React, { useState, useRef, useEffect } from 'react'; import { SendHorizontal, Plus } from 'lucide-react'; import Image from 'next/image'; import { fetchConversations, fetchMessages, sendMessage, markAsRead, } from '@/app/actions/messagerieAction'; export default function Chat({ userProfileId, establishmentId, discussions: discussionsProp, setDiscussions: setDiscussionsProp, onCreateDiscussion, onShowCreateDiscussion, }) { const [discussions, setDiscussions] = useState(discussionsProp || []); const [selectedDiscussion, setSelectedDiscussion] = useState(null); const [messages, setMessages] = useState([]); const [newMessage, setNewMessage] = useState(''); const messagesEndRef = useRef(null); useEffect(() => { if (userProfileId) { fetchConversations(userProfileId).then(setDiscussions); } }, [userProfileId]); useEffect(() => { if (selectedDiscussion) { fetchMessages(selectedDiscussion.conversation_id).then(setMessages); // Marquer comme lu markAsRead(selectedDiscussion.conversation_id, userProfileId); } }, [selectedDiscussion, userProfileId]); const handleSendMessage = async () => { if (newMessage.trim() && selectedDiscussion) { await sendMessage({ conversation_id: selectedDiscussion.conversation_id, emetteur: userProfileId, destinataire: selectedDiscussion.interlocuteur.id, corpus: newMessage, objet: '', }); setNewMessage(''); fetchMessages(selectedDiscussion.conversation_id).then(setMessages); fetchConversations(userProfileId).then(setDiscussions); } }; const handleKeyPress = (event) => { if (event.key === 'Enter') { handleSendMessage(); } }; return (
{/* Bandeau droit : Liste des discussions */}

Discussions

{discussions && discussions.length > 0 ? ( discussions.map((discussion) => (
setSelectedDiscussion(discussion)} > {`${discussion.name}'s

{discussion.name}

{discussion.lastMessage}

{discussion.lastMessageDate && new Date(discussion.lastMessageDate).toLocaleTimeString()}
)) ) : (

Aucune discussion disponible.

)}
{/* Zone de chat */}
{/* En-tête du chat */} {selectedDiscussion && (
{`${selectedDiscussion.name}'s

{selectedDiscussion.name}

)} {/* Messages */}
{selectedDiscussion && messages.map((message) => (

{message.corpus}

{message.date && new Date(message.date).toLocaleTimeString()}
))}
{/* Champ de saisie */} {selectedDiscussion && (
setNewMessage(e.target.value)} className="flex-1 p-2 border border-gray-300 rounded-lg mr-2" placeholder="Écrire un message..." onKeyDown={(e) => e.key === 'Enter' && handleSendMessage()} />
)}
); }