Files
lidify/frontend/features/search/hooks/useSearchData.ts
2025-12-25 18:58:06 -06:00

48 lines
1.5 KiB
TypeScript

import { useSearchQuery, useDiscoverSearchQuery } from "@/hooks/useQueries";
import type { SearchResult, DiscoverResult } from "../types";
import { useMemo } from "react";
interface UseSearchDataProps {
query: string;
}
interface UseSearchDataReturn {
libraryResults: SearchResult | null;
discoverResults: DiscoverResult[];
isLibrarySearching: boolean;
isDiscoverSearching: boolean;
hasSearched: boolean;
}
export function useSearchData({ query }: UseSearchDataProps): UseSearchDataReturn {
// React Query automatically handles debouncing through the enabled flag
// Queries only run when query is at least 2 characters
const {
data: libraryResults,
isLoading: isLibrarySearching,
isFetching: isLibraryFetching
} = useSearchQuery(query, "all", 20);
const {
data: discoverData,
isLoading: isDiscoverSearching,
isFetching: isDiscoverFetching
} = useDiscoverSearchQuery(query, "all", 20);
// Extract discover results
const discoverResults = useMemo(() => {
return discoverData?.results || [];
}, [discoverData]);
// Track if user has searched (query is at least 2 characters)
const hasSearched = query.trim().length >= 2;
return {
libraryResults: libraryResults || null,
discoverResults,
isLibrarySearching: isLibrarySearching || isLibraryFetching,
isDiscoverSearching: isDiscoverSearching || isDiscoverFetching,
hasSearched,
};
}