Skip to content

Commit d2e8be1

Browse files
committed
chore: adding infinite query hook and query client options
1 parent 2417515 commit d2e8be1

6 files changed

Lines changed: 136 additions & 14 deletions

File tree

README.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
## useQuery(...) ✅
2-
3-
## useQueries(...) ✅
4-
51
## Features
62

73
- useQuery ✅
84
- useQueries ✅
95
- useMutation ✅
10-
- useInfiniteQuery
11-
- useQueryClient
6+
- useInfiniteQuery
7+
- useQueryClient
128
- useQueryErrorResetBoundary ✅
139
- useIsFetching ✅
1410
- useIsMutating ✅

examples/src/bindings/ReactQuery.res

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
module InfiniteQuery = ReactQuery_InfiniteQuery
12
include ReactQuery_Query
23
include ReactQuery_Mutation
34
include ReactQuery_Hooks

examples/src/bindings/ReactQuery_Client.res

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
type queryClientValue
22
type fetchMeta
33

4+
type invalidateQueryFilter = {
5+
refetchActive: option<bool>,
6+
refetchInactive: option<bool>,
7+
}
8+
9+
type clientRefetchOptions = {throwOnError: option<bool>}
10+
11+
type invalidateQueryOptions<'queryKey> = {
12+
queryKey: option<'queryKey>,
13+
filters: option<invalidateQueryFilter>,
14+
refetchOptions: option<clientRefetchOptions>,
15+
}
16+
17+
type refetchQueriesOptions<'queryKey> = {
18+
queryKey: option<'queryKey>,
19+
filters: option<ReactQuery_Types.queryFilter<'queryKey>>,
20+
refetchOptions: option<clientRefetchOptions>,
21+
}
22+
23+
type cancelQueriesOptions<'queryKey> = {
24+
queryKey: option<'queryKey>,
25+
filters: option<ReactQuery_Types.queryFilter<'queryKey>>,
26+
}
27+
428
type queryState<'queryData, 'queryError> = {
529
data: option<'queryData>,
630
dataUpdateCount: int,
@@ -50,6 +74,31 @@ type queryClient<'queryKey, 'queryData, 'queryError, 'pageParams> = {
5074
ReactQuery_Types.queryDataKeyOrFilterValue<'queryKey>,
5175
option<'queryData> => 'queryData,
5276
) => unit,
77+
invalidateQueries: (
78+
option<ReactQuery_Types.queryFilter<'queryKey>>,
79+
option<clientRefetchOptions>,
80+
) => Js.Promise.t<unit>,
81+
refetchQueries: (
82+
option<ReactQuery_Types.queryFilter<'queryKey>>,
83+
option<clientRefetchOptions>,
84+
) => Js.Promise.t<unit>,
85+
cancelQueries: option<ReactQuery_Types.queryFilter<'queryKey>> => Js.Promise.t<unit>,
86+
removeQueries: option<ReactQuery_Types.queryFilter<'queryKey>> => Js.Promise.t<unit>,
87+
resetQueries: (
88+
option<ReactQuery_Types.queryFilter<'queryKey>>,
89+
option<clientRefetchOptions>,
90+
) => Js.Promise.t<unit>,
91+
isFetching: option<ReactQuery_Types.queryFilter<'queryKey>> => bool,
92+
isMutating: option<ReactQuery_Types.queryFilter<'queryKey>> => bool,
93+
// setDefaultOptions
94+
// getDefaultOptions
95+
// setQueryDefaults
96+
// getQueryDefaults
97+
// getQueryCache
98+
// setQueryCache
99+
// getMutationCache
100+
// setMutationCache
101+
clear: unit => unit,
53102
}
54103

55104
@module("react-query")
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
type inifiniteQueryFunctionContext<'queryKey, 'pageParam> = {
2+
queryKey: array<'queryKey>,
3+
pageParam: option<'pageParam>,
4+
}
5+
6+
@deriving(abstract)
7+
type infiniteQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> = {
8+
@optional queryKey: 'queryKey,
9+
@optional
10+
queryFn: inifiniteQueryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>,
11+
@optional enabled: bool,
12+
@optional retry: ReactQuery_Types.retryValue<'queryError>,
13+
@optional retryOnMount: bool,
14+
@optional retryDelay: ReactQuery_Types.retryDelayValue<'queryError>,
15+
@optional staleTime: ReactQuery_Types.timeValue,
16+
@optional queryKeyHashFn: 'queryKey => string,
17+
@optional refetchInterval: ReactQuery_Types.refetchIntervalValue,
18+
@optional refetchIntervalInBackground: bool,
19+
@optional refetchOnMount: ReactQuery_Types.boolOrAlwaysValue,
20+
@optional refetchOnWindowFocus: ReactQuery_Types.boolOrAlwaysValue,
21+
@optional refetchOnReconnect: ReactQuery_Types.boolOrAlwaysValue,
22+
@optional notifyOnChangeProps: ReactQuery_Types.notifyOnChangePropsValue,
23+
@optional notifyOnChangePropsExclusions: array<string>,
24+
@optional onSuccess: 'queryData => unit,
25+
@optional onError: 'queryError => unit,
26+
@optional onSettled: ('queryData, 'queryError) => unit,
27+
@optional select: 'queryData => 'queryData,
28+
@optional suspense: bool,
29+
@optional keepPreviousData: bool,
30+
@optional structuralSharing: bool,
31+
@optional useErrorBoundary: bool,
32+
@optional initialData: 'queryData => 'queryData,
33+
@optional initialDataUpdatedAt: unit => int,
34+
@optional placeholderData: unit => 'queryData,
35+
@optional getNextPageParam: ('pageParam, array<'pageParam>) => option<'pageParam>,
36+
@optional getPreviousPageParam: ('pageParam, array<'pageParam>) => option<'pageParam>,
37+
}
38+
39+
type rec infiniteQueryResult<'queryError, 'queryData, 'pageParam> = {
40+
status: ReactQuery_Types.queryStatus,
41+
isIdle: bool,
42+
isError: bool,
43+
isFetched: bool,
44+
isFetchedAfterMount: bool,
45+
isFetching: bool,
46+
isLoading: bool,
47+
isLoadingError: bool,
48+
isPlaceholderData: bool,
49+
isPreviousData: bool,
50+
isRefetchError: bool,
51+
isStale: bool,
52+
isSuccess: bool,
53+
dataUpdatedAt: int,
54+
error: Js.Nullable.t<'queryError>,
55+
errorUpdatedAt: int,
56+
failureCount: int,
57+
refetch: ReactQuery_Types.refetchOptions => Js.Promise.t<
58+
infiniteQueryResult<'queryError, 'queryData, 'pageParam>,
59+
>,
60+
remove: unit => unit,
61+
data: ReactQuery_Types.infiniteData<'queryData, 'pageParam>,
62+
isFetchingNextPage: bool,
63+
isFetchingPreviousPage: bool,
64+
//fetchNextPage: (options?: FetchNextPageOptions) => Promise<UseInfiniteQueryResult>
65+
//fetchPreviousPage: (options?: FetchPreviousPageOptions) => Promise<UseInfiniteQueryResult>
66+
hasNextPage: bool,
67+
hasPreviousPage: bool,
68+
}
69+
70+
@module("react-query")
71+
external useQuery: infiniteQueryOptions<
72+
'queryKey,
73+
'queryData,
74+
'queryError,
75+
'pageParam,
76+
> => infiniteQueryResult<'queryError, 'queryData, 'pageParam> = "useInfiniteQuery"

examples/src/bindings/ReactQuery_Query.res

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
type refetchOptions = {
2-
throwOnError: bool,
3-
cancelRefetch: bool,
4-
}
5-
61
@deriving(abstract)
72
type queryOptions<'queryKey, 'queryData, 'queryError> = {
83
@optional queryKey: 'queryKey,
@@ -52,7 +47,7 @@ type rec queryResult<'queryError, 'queryData> = {
5247
error: Js.Nullable.t<'queryError>,
5348
errorUpdatedAt: int,
5449
failureCount: int,
55-
refetch: refetchOptions => Js.Promise.t<queryResult<'queryError, 'queryData>>,
50+
refetch: ReactQuery_Types.refetchOptions => Js.Promise.t<queryResult<'queryError, 'queryData>>,
5651
remove: unit => unit,
5752
}
5853

examples/src/bindings/ReactQuery_Types.res

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ type time = [#number(int) | #infinity]
1414
type refetchInterval = [#bool(bool) | #number(int)]
1515
type boolOrAlways = [#bool(bool) | #always]
1616
type notifyOnChangeProps = [#array(array<string>) | #tracked]
17-
type infiniteData<'queryData, 'params> = {
17+
type infiniteData<'queryData, 'pageParam> = {
1818
pages: array<'queryData>,
19-
pageParams: array<'params>,
19+
pageParams: array<'pageParam>,
2020
}
2121
type queryStatus = [#loading | #success | #idle | #error | #initialData]
2222

@@ -32,3 +32,8 @@ type queryFilter<'queryKey> = {
3232
}
3333

3434
type queryDataKeyOrFilter<'queryKey> = [#keys('queryKey) | #filters(queryFilter<'queryKey>)]
35+
36+
type refetchOptions = {
37+
throwOnError: bool,
38+
cancelRefetch: bool,
39+
}

0 commit comments

Comments
 (0)