33 * React Query hooks for fetching resume data
44 */
55
6- import { useQuery } from '@tanstack/react-query' ;
6+ import { useQuery , useInfiniteQuery } from '@tanstack/react-query' ;
77import {
88 fetchResumes ,
99 fetchResumeById ,
@@ -21,10 +21,33 @@ export const resumeKeys = {
2121 detail : ( id ) => [ ...resumeKeys . details ( ) , id ] ,
2222} ;
2323
24- export function useResumes ( { page = 0 , size = 10 } = { } ) {
25- return useQuery ( {
26- queryKey : [ 'resumes' , { page, size } ] ,
27- queryFn : ( ) => fetchResumes ( { page, size } ) ,
24+ /**
25+ * Fetch resumes with infinite scroll (cursor-based pagination)
26+ * Supports search and sort functionality
27+ * @param {Object } params
28+ * @param {number } params.size - Page size (default: 10)
29+ * @param {string } params.keyword - Search keyword (optional, 1-30 chars)
30+ * @param {string } params.sortedBy - Sort order: UPDATED_DESC (default) | UPDATED_ASC
31+ * @returns {import('@tanstack/react-query').UseInfiniteQueryResult }
32+ */
33+ export function useResumes ( {
34+ size = 10 ,
35+ keyword = '' ,
36+ sortedBy = 'UPDATED_DESC' ,
37+ } = { } ) {
38+ return useInfiniteQuery ( {
39+ queryKey : [ 'resumes' , 'list' , { size, keyword : keyword . trim ( ) , sortedBy } ] ,
40+ queryFn : ( { pageParam = null } ) =>
41+ fetchResumes ( {
42+ next : pageParam ,
43+ size,
44+ keyword : keyword . trim ( ) || undefined ,
45+ sortedBy,
46+ } ) ,
47+ getNextPageParam : ( lastPage ) => lastPage . next || undefined ,
48+ initialPageParam : null ,
49+ staleTime : 0 ,
50+ gcTime : 1000 * 60 * 5 ,
2851 } ) ;
2952}
3053
0 commit comments