import { EditorContent, useEditor } from "@tiptap/react"; import { useEffect, memo } from "react"; import { cn } from "~/lib/utils"; import { extensionsForConversation } from "./editor-extensions"; import { skillExtension } from "../editor/skill-extension"; import { type UIMessage } from "ai"; interface AIConversationItemProps { message: UIMessage; } function getMessage(message: string) { let finalMessage = message.replace("", ""); finalMessage = finalMessage.replace("", ""); finalMessage = finalMessage.replace("", ""); finalMessage = finalMessage.replace("", ""); return finalMessage; } const ConversationItemComponent = ({ message }: AIConversationItemProps) => { const isUser = message.role === "user" || false; const textPart = message.parts.find((part) => part.type === "text"); const editor = useEditor({ extensions: [...extensionsForConversation, skillExtension], editable: false, content: textPart ? getMessage(textPart.text) : "", }); useEffect(() => { if (textPart) { editor?.commands.setContent(getMessage(textPart.text)); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [message]); if (!message) { return null; } return (
); }; // Memoize to prevent unnecessary re-renders export const ConversationItem = memo( ConversationItemComponent, (prevProps, nextProps) => { // Only re-render if the conversation history ID or message changed return prevProps.message === nextProps.message; }, );