import { useState } from 'react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Search, X } from 'lucide-react'; import { apiClient } from '@/services/api/client'; import { logger } from '@/utils/logger'; import { ChatMessage } from '../store/chatStore'; import { parseApiError } from '@/utils/apiErrorHandler'; // FE-PAGE-005: Complete Chat page implementation - Message Search interface MessageSearchProps { conversationId: string; onMessageSelect?: (messageId: string) => void; } export function MessageSearch({ conversationId, onMessageSelect, }: MessageSearchProps) { const [searchQuery, setSearchQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); const [isSearching, setIsSearching] = useState(false); const [showResults, setShowResults] = useState(false); const handleSearch = async () => { if (!searchQuery.trim() || !conversationId) return; try { setIsSearching(true); setShowResults(true); // Assuming backend has a search endpoint - if not, we'll search client-side const response = await apiClient.get( `/conversations/${conversationId}/messages/search`, { params: { q: searchQuery, limit: 20 }, }, ); setSearchResults(response.data.messages || []); } catch (error: unknown) { const apiError = parseApiError(error); // If endpoint doesn't exist, fall back to client-side search logger.warn('Search endpoint not available or failed', { error: apiError.message, }); // We'll implement client-side search as fallback setSearchResults([]); } finally { setIsSearching(false); } }; const handleClear = () => { setSearchQuery(''); setSearchResults([]); setShowResults(false); }; return (
setSearchQuery(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); handleSearch(); } }} placeholder="Search messages..." className="pl-8 pr-8" /> {searchQuery && ( )}
{showResults && searchResults.length > 0 && (
{searchResults.length} result(s) found
{searchResults.map((message) => (
{ onMessageSelect?.(message.id); setShowResults(false); }} >
{message.sender_username}
{message.content}
{new Date(message.created_at).toLocaleString()}
))}
)} {showResults && searchResults.length === 0 && searchQuery && (
No messages found
)}
); }