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 } from 'lucide-react'; import { Button } from '@/components/ui/button'; // FE-PAGE-005: Complete Chat page implementation interface ChatRoomProps { conversationId: string; } export const ChatRoom: React.FC = ({ conversationId }) => { const { messages } = useChatStore(); const { fetchHistory } = useChat(); const messagesEndRef = useRef(null); const [showSearch, setShowSearch] = useState(false); const [highlightedMessageId, setHighlightedMessageId] = useState(null); const currentMessages = messages[conversationId] || []; useEffect(() => { if (conversationId && !messages[conversationId]) { fetchHistory(conversationId); } }, [conversationId, messages, fetchHistory]); useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [currentMessages]); const handleMessageSelect = (messageId: string) => { setHighlightedMessageId(messageId); // Scroll to message const messageElement = document.getElementById(`message-${messageId}`); if (messageElement) { messageElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); // Remove highlight after 3 seconds setTimeout(() => setHighlightedMessageId(null), 3000); } }; if (!conversationId) { return (
Sélectionnez une conversation pour commencer
); } return (
{/* FE-PAGE-005: Message Search Bar */}
{showSearch ? (
) : (
)}
{currentMessages.length === 0 ? (
Aucun message. Soyez le premier à envoyer un message !
) : ( currentMessages.map((msg) => (
)) )} {/* FE-PAGE-005: Typing Indicator */}
); };