/** * @fileoverview Search functionality hook * @module hooks/useSearch */ import { useCallback, useState } from "react"; import { useChatbot } from "./useChatbot"; import type { Document } from "../core/contexts/ChatbotContext"; export interface UseSearchReturn { searchResults: Document[]; isSearching: boolean; searchQuery: string; search: (query: string, limit?: number) => Promise; clearSearch: () => void; hasResults: boolean; } export function useSearch(): UseSearchReturn { const { searchSimilarDocuments } = useChatbot(); const [searchResults, setSearchResults] = useState([]); const [isSearching, setIsSearching] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const search = useCallback( async (query: string, limit = 10) => { if (!query.trim()) return; setIsSearching(true); setSearchQuery(query); try { const results = await searchSimilarDocuments(query, limit); setSearchResults(results); } catch (error) { console.error("Search failed:", error); setSearchResults([]); } finally { setIsSearching(false); } }, [searchSimilarDocuments] ); const clearSearch = useCallback(() => { setSearchResults([]); setSearchQuery(""); setIsSearching(false); }, []); return { searchResults, isSearching, searchQuery, search, clearSearch, hasResults: searchResults.length > 0, }; }