import { Message } from "@/types"; import { IconEdit } from "@tabler/icons-react"; import { FC, useEffect, useRef, useState } from "react"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import { CodeBlock } from "../Markdown/CodeBlock"; interface Props { message: Message; messageIndex: number; lightMode: "light" | "dark"; onEditMessage: (message: Message, messageIndex: number) => void; onDeleteMessage: (message: Message, messageIndex: number) => void; } export const ChatMessage: FC = ({ message, messageIndex, lightMode, onEditMessage, onDeleteMessage }) => { const [isEditing, setIsEditing] = useState(false); const [isHovering, setIsHovering] = useState(false); const [messageContent, setMessageContent] = useState(message.content); const textareaRef = useRef(null); const toggleEditing = () => { setIsEditing(!isEditing); }; const handleInputChange = (event: React.ChangeEvent) => { setMessageContent(event.target.value); if (textareaRef.current) { textareaRef.current.style.height = "inherit"; textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`; } }; const handleEditMessage = () => { onEditMessage({ ...message, content: messageContent }, messageIndex); setIsEditing(false); }; const handlePressEnter = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleEditMessage(); } }; useEffect(() => { if (textareaRef.current) { textareaRef.current.style.height = "inherit"; textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`; } }, [isEditing]); return (
setIsHovering(true)} onMouseLeave={() => setIsHovering(false)} >
{message.role === "assistant" ? "AI:" : "You:"}
{message.role === "user" ? (
{isEditing ? (