forked from clerk/javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtypes.ts
More file actions
65 lines (57 loc) · 1.9 KB
/
Copy pathtypes.ts
File metadata and controls
65 lines (57 loc) · 1.9 KB
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
import type { ClerkPaginatedResponse } from '@clerk/types';
import type { ClerkAPIResponseError } from '../error';
export type ValueOrSetter<T = unknown> = (size: T | ((_size: T) => T)) => void;
export type CacheSetter<CData = any> = (
data?: CData | ((currentData?: CData) => Promise<undefined | CData> | undefined | CData),
) => Promise<CData | undefined>;
export type PaginatedResources<T = unknown, Infinite = false> = {
data: T[];
count: number;
error: ClerkAPIResponseError | null;
isLoading: boolean;
isFetching: boolean;
isError: boolean;
page: number;
pageCount: number;
fetchPage: ValueOrSetter<number>;
fetchPrevious: () => void;
fetchNext: () => void;
hasNextPage: boolean;
hasPreviousPage: boolean;
revalidate: () => Promise<void>;
setData: Infinite extends true
? // Array of pages of data
CacheSetter<(ClerkPaginatedResponse<T> | undefined)[]>
: // Array of data
CacheSetter<ClerkPaginatedResponse<T> | undefined>;
};
// Utility type to convert PaginatedDataAPI to properties as undefined, except booleans set to false
export type PaginatedResourcesWithDefault<T> = {
[K in keyof PaginatedResources<T>]: PaginatedResources<T>[K] extends boolean ? false : undefined;
};
export type PaginatedHookConfig<T> = T & {
/**
* Persists the previous pages with new ones in the same array
*/
infinite?: boolean;
/**
* Return the previous key's data until the new data has been loaded
*/
keepPreviousData?: boolean;
};
export type PagesOrInfiniteConfig = PaginatedHookConfig<{
/**
* Should a request be triggered
*/
enabled?: boolean;
}>;
export type PagesOrInfiniteOptions = {
/**
* This the starting point for your fetched results. The initial value persists between re-renders
*/
initialPage?: number;
/**
* Maximum number of items returned per request. The initial value persists between re-renders
*/
pageSize?: number;
};