import React, { useEffect, useRef, useState } from 'react'; import { useChatStore } from '../store/chatStore'; import { ChatMessageComponent } from './ChatMessage'; import { useChat } from '../hooks/useChat'; import { MessageSearch } from './MessageSearch'; import { TypingIndicator } from './TypingIndicator'; import { Search, X, Disc, Clock, MessageSquare, Wifi } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; import { useUser } from '@/features/auth/hooks/useUser'; interface ChatRoomProps { conversationId: string; } export const ChatRoom: React.FC = ({ conversationId }) => { const { messages, wsStatus } = useChatStore(); const { fetchHistory } = useChat(); const { data: user } = useUser(); const currentUserId = user?.id; const messagesEndRef = useRef(null); const [showSearch, setShowSearch] = useState(false); const [highlightedMessageId, setHighlightedMessageId] = useState< string | null >(null); const currentMessages = messages[conversationId] || []; const fetchingRef = useRef<{ [key: string]: boolean }>({}); useEffect(() => { if ( conversationId && !messages[conversationId] && !fetchingRef.current[conversationId] ) { fetchingRef.current[conversationId] = true; fetchHistory(conversationId).finally(() => { // Fetch complete }); } }, [conversationId, messages[conversationId], fetchHistory]); useEffect(() => { if (messagesEndRef.current) { messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }); } }, [currentMessages.length, conversationId]); // Scroll on new messages or channel switch const handleMessageSelect = (messageId: string) => { setHighlightedMessageId(messageId); const messageElement = document.getElementById(`message-${messageId}`); if (messageElement) { messageElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); setTimeout(() => setHighlightedMessageId(null), 3000); } }; if (!conversationId) { return (

Awaiting Frequency Selection

); } return (
{/* Search Header Overlay */}
{showSearch ? (
) : (
)}
{/* Welcome Message for Empty Room */} {currentMessages.length === 0 && (

Channel Established

Begin transmission on this frequency.

)} {/* Message Stream */} {currentMessages.map((msg, index) => { const isMe = currentUserId ? msg.sender_id === currentUserId : false; const isSequence = index > 0 && currentMessages[index - 1].sender_id === msg.sender_id; return (
); })}
); };