File size: 2,148 Bytes
3c76719 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 'use client';
import { useCallback } from 'react';
import { sortVideos } from '@/lib/utils/sort';
import type { SortOption } from '@/lib/store/settings-store';
import type { Video, SourceBadge } from '@/lib/types';
import { useSearchState } from './useSearchState';
import { useSearchAction } from './useSearchAction';
interface ParallelSearchResult {
loading: boolean;
results: Video[];
availableSources: SourceBadge[];
completedSources: number;
totalSources: number;
totalVideosFound: number;
performSearch: (query: string, sources?: any[], sortBy?: SortOption) => Promise<void>;
resetSearch: () => void;
loadCachedResults: (results: Video[], sources: any[]) => void;
applySorting: (sortBy: SortOption) => void;
}
export function useParallelSearch(
onCacheUpdate: (query: string, results: any[], sources: any[]) => void,
onUrlUpdate: (query: string) => void
): ParallelSearchResult {
const state = useSearchState();
const {
loading,
results,
availableSources,
completedSources,
totalSources,
totalVideosFound,
setResults,
setAvailableSources,
setTotalVideosFound,
resetState,
} = state;
const { performSearch, cancelSearch } = useSearchAction({
state,
onCacheUpdate,
onUrlUpdate,
});
/**
* Reset search state
*/
const resetSearch = useCallback(() => {
cancelSearch();
resetState();
}, [cancelSearch, resetState]);
/**
* Load cached results
*/
const loadCachedResults = useCallback((cachedResults: Video[], cachedSources: any[]) => {
setResults(cachedResults);
setAvailableSources(cachedSources);
setTotalVideosFound(cachedResults.length);
}, [setResults, setAvailableSources, setTotalVideosFound]);
/**
* Apply sorting to current results
*/
const applySorting = useCallback((sortBy: SortOption) => {
setResults((currentResults) => sortVideos(currentResults, sortBy));
}, [setResults]);
return {
loading,
results,
availableSources,
completedSources,
totalSources,
totalVideosFound,
performSearch,
resetSearch,
loadCachedResults,
applySorting,
};
}
|