import React, { useState, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import rehypeRaw from 'rehype-raw'; // Импортируем rehype-raw для обработки сырого HTML import CommandInput from './CommandInput'; function ChatPanel({ chatHistory, onSendMessage }) { const [message, setMessage] = useState(''); const handleSubmit = (event) => { event.preventDefault(); // Предотвращаем стандартное действие отправки формы, которое перезагружает страницу if (message.trim()) { // Проверяем, что сообщение не пустое onSendMessage(message); // Вызываем функцию отправки сообщения, переданную из родителя setMessage(''); // Очищаем поле ввода после отправки } }; useEffect(() => { const chatHistoryDiv = document.querySelector('.chat-history'); if (chatHistoryDiv) { chatHistoryDiv.scrollTop = chatHistoryDiv.scrollHeight; } }, [chatHistory]); return (
{chatHistory.map((msg, index) => (
{/* Добавлено: обработка текста с Markdown */} ( {props.children} ), img: ({ node, ...props }) => ( // Переопределяем стили изображения для адаптивности ) }} children={msg.content} // Явное указание children />
))}
setMessage(e.target.value)} // Обновляем состояние при изменении поля ввода // onSendMessage больше НЕ передается сюда, // так как CommandInput не должен напрямую отправлять сообщения. // Отправка происходит через onSubmit формы. />
); } export default ChatPanel;