3
3
import { useCallback , useMemo , useRef , useState } from 'react' ;
4
4
5
5
import { useSWR , useSWRInfinite } from '../clerk-swr' ;
6
- import type { CacheSetter , PaginatedResources , ValueOrSetter } from '../types' ;
6
+ import type {
7
+ CacheSetter ,
8
+ PagesOrInfiniteConfig ,
9
+ PagesOrInfiniteOptions ,
10
+ PaginatedResources ,
11
+ ValueOrSetter ,
12
+ } from '../types' ;
7
13
8
14
function getDifferentKeys ( obj1 : Record < string , unknown > , obj2 : Record < string , unknown > ) : Record < string , unknown > {
9
15
const keysSet = new Set ( Object . keys ( obj2 ) ) ;
@@ -18,17 +24,6 @@ function getDifferentKeys(obj1: Record<string, unknown>, obj2: Record<string, un
18
24
return differentKeysObject ;
19
25
}
20
26
21
- type PagesOrInfiniteOptions = {
22
- /**
23
- * This the starting point for your fetched results. The initial value persists between re-renders
24
- */
25
- initialPage ?: number ;
26
- /**
27
- * Maximum number of items returned per request. The initial value persists between re-renders
28
- */
29
- pageSize ?: number ;
30
- } ;
31
-
32
27
export const useWithSafeValues = < T extends PagesOrInfiniteOptions > ( params : T | true | undefined , defaultValues : T ) => {
33
28
const shouldUseDefaults = typeof params === 'boolean' && params ;
34
29
@@ -59,26 +54,11 @@ const cachingSWROptions = {
59
54
type ArrayType < DataArray > = DataArray extends Array < infer ElementType > ? ElementType : never ;
60
55
type ExtractData < Type > = Type extends { data : infer Data } ? ArrayType < Data > : Type ;
61
56
62
- type DefaultOptions = {
63
- /**
64
- * Persists the previous pages with new ones in the same array
65
- */
66
- infinite ?: boolean ;
67
- /**
68
- * Return the previous key's data until the new data has been loaded
69
- */
70
- keepPreviousData ?: boolean ;
71
- /**
72
- * Should a request be triggered
73
- */
74
- enabled ?: boolean ;
75
- } ;
76
-
77
57
type UsePagesOrInfinite = <
78
58
Params extends PagesOrInfiniteOptions ,
79
59
FetcherReturnData extends Record < string , any > ,
80
60
CacheKeys = Record < string , unknown > ,
81
- TOptions extends DefaultOptions = DefaultOptions ,
61
+ TConfig extends PagesOrInfiniteConfig = PagesOrInfiniteConfig ,
82
62
> (
83
63
/**
84
64
* The parameters will be passed to the fetcher
@@ -91,20 +71,20 @@ type UsePagesOrInfinite = <
91
71
/**
92
72
* Internal configuration of the hook
93
73
*/
94
- options : TOptions ,
74
+ config : TConfig ,
95
75
cacheKeys : CacheKeys ,
96
- ) => PaginatedResources < ExtractData < FetcherReturnData > , TOptions [ 'infinite' ] > ;
76
+ ) => PaginatedResources < ExtractData < FetcherReturnData > , TConfig [ 'infinite' ] > ;
97
77
98
- export const usePagesOrInfinite : UsePagesOrInfinite = ( params , fetcher , options , cacheKeys ) => {
78
+ export const usePagesOrInfinite : UsePagesOrInfinite = ( params , fetcher , config , cacheKeys ) => {
99
79
const [ paginatedPage , setPaginatedPage ] = useState ( params . initialPage ?? 1 ) ;
100
80
101
81
// Cache initialPage and initialPageSize until unmount
102
82
const initialPageRef = useRef ( params . initialPage ?? 1 ) ;
103
83
const pageSizeRef = useRef ( params . pageSize ?? 10 ) ;
104
84
105
- const enabled = options . enabled ?? true ;
106
- const triggerInfinite = options . infinite ?? false ;
107
- const keepPreviousData = options . keepPreviousData ?? false ;
85
+ const enabled = config . enabled ?? true ;
86
+ const triggerInfinite = config . infinite ?? false ;
87
+ const keepPreviousData = config . keepPreviousData ?? false ;
108
88
109
89
const pagesCacheKey = {
110
90
...cacheKeys ,
0 commit comments