import { Box, Flex, Text } from '@chakra-ui/react'; import { observer } from 'mobx-react-lite'; import React, { useEffect, useRef, useState } from 'react'; import clientChatStore from '../../../stores/ClientChatStore'; import UserOptionsStore from '../../../stores/UserOptionsStore'; import MessageRenderer from './ChatMessageContent'; import MessageEditor from './MessageEditorComponent'; import MotionBox from './MotionBox'; import UserMessageTools from './UserMessageTools'; const LoadingDots = () => { return ( {[0, 1, 2].map(i => ( ))} ); }; function renderMessage(msg: any) { if (msg.role === 'user') { return ( {msg.content} ); } return ; } const MessageBubble = observer(({ msg, scrollRef }) => { const [isEditing, setIsEditing] = useState(false); const [isHovered, setIsHovered] = useState(false); const isUser = msg.role === 'user'; const senderName = isUser ? 'You' : "Geoff's AI"; const isLoading = !msg.content || !(msg.content.trim().length > 0); const messageRef = useRef(); const handleEdit = () => { setIsEditing(true); }; const handleCancelEdit = () => { setIsEditing(false); }; useEffect(() => { if ( clientChatStore.items.length > 0 && clientChatStore.isLoading && UserOptionsStore.followModeEnabled ) { // Refine condition scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'auto', }); } }); return ( setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} > {senderName} {isEditing ? ( ) : isLoading ? ( ) : ( renderMessage(msg) )} {isUser && ( {isHovered && !isEditing && } )} ); }); export default MessageBubble;