1- import { TImageFilter } from "database"
2- import useSWR from "swr"
1+ import { useMemo } from "react"
32
4- const getImages = async ( filter : TImageFilter ) => {
5- const queryParams = new URLSearchParams ( )
6-
7- // TODO: will update filter params later
8- // Add filter parameters to the query string
9- if ( filter . search ) queryParams . append ( "search" , filter . search )
10- if ( filter . order ) queryParams . append ( "order" , filter . order )
11- if ( filter . orderBy ) queryParams . append ( "orderBy" , filter . orderBy )
12- // Add any other filter parameters as needed
13-
14- const url = `/api/protected/images?${ queryParams . toString ( ) } `
3+ import { TImageFilter , TListImageResponse } from "database"
4+ import useSWRInfinite from "swr/infinite"
155
6+ const getImages = async ( url ) : Promise < TListImageResponse > => {
167 const response = await fetch ( url , {
178 method : "GET" ,
189 headers : {
@@ -28,14 +19,36 @@ const getImages = async (filter: TImageFilter) => {
2819}
2920
3021export function useGetImages ( filter : TImageFilter ) {
31- const { data, error, isLoading, mutate } = useSWR ( [ "/api/protected/images" , filter ] , ( ) =>
32- getImages ( filter )
22+ const { data, mutate, size, setSize, isLoading, error } = useSWRInfinite (
23+ ( index ) => {
24+ const queryParams = new URLSearchParams ( )
25+
26+ if ( filter . search ) queryParams . append ( "search" , filter . search )
27+ // if (filter.order) queryParams.append("order", filter.order)
28+ // if (filter.orderBy) queryParams.append("orderBy", filter.orderBy)
29+ queryParams . append ( "page" , ( index + 1 ) . toString ( ) )
30+
31+ return `/api/protected/images?${ queryParams . toString ( ) } `
32+ } ,
33+ ( url ) => getImages ( url )
3334 )
3435
36+ const images = useMemo ( ( ) => ( data || [ ] ) . flatMap ( ( page ) => page . data . data . data ) , [ data ] )
37+ const totalPages = useMemo ( ( ) => data ?. [ 0 ] ?. data ?. data ?. totalPages , [ data ] )
38+
39+ const fetchMore = ( ) => {
40+ if ( size >= totalPages ) {
41+ return
42+ }
43+
44+ setSize ( size + 1 )
45+ }
46+
3547 return {
36- images : data ?. data ?. data ?. data ,
48+ images,
3749 isLoading,
3850 isError : error ,
3951 mutate,
52+ fetchMore,
4053 }
4154}
0 commit comments