import React, { useState, useRef, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import Avatar from './Avatar.jsx'; import '../App.css'; const ChatInterface = ({ messages = [], setMessages = () => {}, onMessageSent = () => {}, activeConversationId, saveBotResponse, toLogin }) => { const [inputMessage, setInputMessage] = useState(''); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const textareaRef = useRef(null); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(scrollToBottom, [messages]); const sendMessage = async (message) => { try { setIsLoading(true); // Ajouter le message utilisateur à l'interface setMessages(prev => [...prev, { sender: 'user', text: message }]); // IMPORTANT: Obtenir l'ID de conversation mis à jour (nouvelle ou existante) const updatedConversationId = await onMessageSent(message); // Appel à l'API de chat const chatRes = await fetch('/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ message }), }); if (!chatRes.ok) throw new Error(`Chat API error ${chatRes.status}`); const { response: botResponse } = await chatRes.json(); // Ajouter la réponse du bot à l'interface setMessages(prev => [...prev, { sender: 'bot', text: botResponse }]); // Utiliser l'ID de conversation mis à jour if (updatedConversationId) { saveBotResponse(updatedConversationId, botResponse); } else if (activeConversationId) { saveBotResponse(activeConversationId, botResponse); } } catch (error) { console.error('Erreur:', error); setMessages(prev => [...prev, { sender: 'user', text: message }, { sender: 'bot', text: "Désolé, une erreur s'est produite. Veuillez réessayer." } ]); } finally { setIsLoading(false); } }; const handleSubmit = (e) => { e.preventDefault(); const txt = inputMessage.trim(); if (!txt) return; sendMessage(txt); setInputMessage(''); if (textareaRef.current) textareaRef.current.style.height = 'auto'; }; const isMarkdown = (text) => /[#*_>`-]/.test(text); return (
{messages.length === 0 ? ( <>

Medic.ial

Bonjour ! Comment puis-je vous aider aujourd'hui ? 🧑‍⚕️