diff --git a/src/components/chat/messages/MessageComponent.tsx b/src/components/chat/messages/MessageComponent.tsx index ccc432a..86cbbb6 100644 --- a/src/components/chat/messages/MessageComponent.tsx +++ b/src/components/chat/messages/MessageComponent.tsx @@ -1,17 +1,15 @@ // @ts-nocheck -import React, { memo } from 'react'; +import React, { memo, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import TodoList from '../../TodoList'; import ClaudeLogo from '../../ClaudeLogo.jsx'; import CursorLogo from '../../CursorLogo.jsx'; import CodexLogo from '../../CodexLogo.jsx'; -import { api, authenticatedFetch } from '../../../utils/api'; import type { ChatMessage, Provider } from '../types'; import { Markdown } from '../markdown/Markdown'; import { formatUsageLimitText } from '../utils/chatFormatting'; import { getClaudePermissionSuggestion } from '../utils/chatPermissions'; import type { Project } from '../../../types/app'; -import { ToolRenderer, shouldHideToolResult, FileListContent, TaskListContent } from '../tools'; +import { ToolRenderer, shouldHideToolResult } from '../tools'; type DiffLine = { type: string; @@ -52,15 +50,15 @@ const MessageComponent = memo(({ message, index, prevMessage, createDiff, onFile }, [permissionSuggestion?.entry, message.toolId]); React.useEffect(() => { - if (!autoExpandTools || !messageRef.current || !message.isToolUse) return; - + const node = messageRef.current; + if (!autoExpandTools || !node || !message.isToolUse) return; + const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting && !isExpanded) { setIsExpanded(true); - // Find all details elements and open them - const details = messageRef.current.querySelectorAll('details'); + const details = node.querySelectorAll('details'); details.forEach(detail => { detail.open = true; }); @@ -69,16 +67,17 @@ const MessageComponent = memo(({ message, index, prevMessage, createDiff, onFile }, { threshold: 0.1 } ); - - observer.observe(messageRef.current); - + + observer.observe(node); + return () => { - if (messageRef.current) { - observer.unobserve(messageRef.current); - } + observer.unobserve(node); }; }, [autoExpandTools, isExpanded, message.isToolUse]); + const selectedProvider = useMemo(() => localStorage.getItem('selected-provider') || 'claude', []); + const formattedTime = useMemo(() => new Date(message.timestamp).toLocaleTimeString(), [message.timestamp]); + return (