feat(chat): implement search functionality for chat sessions

- Added search capability to the chat interface, allowing users to find sessions by title or message content.
- Integrated debounce logic for search input to enhance performance and user experience.
- Updated the sidebar to include a search input field and loading indicator during search operations.
- Implemented full-text search in the database for efficient session retrieval based on user queries.
- Enhanced session management by filtering out orphan sessions during search results.
This commit is contained in:
Evandro Fonseca Junior committed 2025-11-27 17:58:33 -03:00
1 parent 8c546f6474
commit 6a7eeaf7af
5 files changed
+589 -12

No files matched your search

+30 -1
View File
@@ -38,6 +38,8 @@ export function useChatStorage() {
const [sessions, setSessions] = useState<SessionSummary[]>([]);
const [currentSessionId, setCurrentSessionId] = useState<string | null>(null);
const [isGeneratingTitle, setIsGeneratingTitle] = useState(false);
const [searchQuery, setSearchQuery] = useState<string>('');
const [isSearching, setIsSearching] = useState(false);
const loadSessions = useCallback(async () => {
try {
@@ -47,6 +49,29 @@ export function useChatStorage() {
console.error("Failed to load sessions:", error);
}
}, []);
const searchSessions = useCallback(async (query: string) => {
if (!query || query.trim().length < 2) {
// Se query muito curta, carregar todas as sessões
await loadSessions();
return;
}
setIsSearching(true);
try {
const results = await invoke<SessionSummary[]>('search_chat_sessions', {
query: query.trim(),
limit: 50
});
setSessions(results);
} catch (error) {
console.error("Failed to search sessions:", error);
// Em caso de erro, carregar todas as sessões
await loadSessions();
} finally {
setIsSearching(false);
}
}, [loadSessions]);
const loadSessionHistory = useCallback(async (id: string): Promise<Message[]> => {
try {
@@ -375,7 +400,11 @@ export function useChatStorage() {
deleteSession,
isGeneratingTitle,
setIsGeneratingTitle,
generateTitleFromUserMessage
generateTitleFromUserMessage,
searchSessions,
searchQuery,
setSearchQuery,
isSearching
};
}