@restnfeel/agentc-starter-kit
Version:
한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템
60 lines (51 loc) • 1.49 kB
text/typescript
/**
* @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<void>;
clearSearch: () => void;
hasResults: boolean;
}
export function useSearch(): UseSearchReturn {
const { searchSimilarDocuments } = useChatbot();
const [searchResults, setSearchResults] = useState<Document[]>([]);
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,
};
}