Initial release v1.0.0
This commit is contained in:
47
frontend/features/search/hooks/useSearchData.ts
Normal file
47
frontend/features/search/hooks/useSearchData.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user