Skip to content

Commit 14c7bab

Browse files
committed
chore: Adding default options and query observer options
1 parent d2e8be1 commit 14c7bab

6 files changed

Lines changed: 131 additions & 18 deletions

File tree

examples/src/UseMutation.res

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ let createTodo = post =>
3939

4040
@react.component
4141
let make = () => {
42-
let {mutate, isLoading, isSuccess, data, _} =
42+
let {mutate, isLoading, isSuccess, data, _} = ReactQuery.useMutation(
4343
ReactQuery.mutationOptions(
4444
~mutationKey="create-post",
4545
~mutationFn=createTodo,
46+
~retry=false->#bool->ReactQuery.retry,
4647
(),
47-
)->ReactQuery.useMutation
48+
),
49+
)
4850

4951
let handleCreation = React.useCallback1(_ => {
5052
let post = {

examples/src/UseQuery.res

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@ let make = () => {
2929
ReactQuery.queryOptions(
3030
~queryKey="/todo-1",
3131
~queryFn=_ => fetchTodo(1),
32+
~retry=false->#bool->ReactQuery.retry,
3233
~refetchIntervalInBackground=false,
3334
(),
3435
),
3536
)
3637

3738
switch result {
38-
| {data: Some(value)} => Js.log(value.title)
39-
| _ => Js.log("caboom!")
39+
| {data: Some(todo)} => <div> {todo.title->React.string} </div>
40+
| _ => React.null
4041
}
41-
42-
<div />
4342
}

examples/src/bindings/ReactQuery_Client.res

Lines changed: 99 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,87 @@
11
type queryClientValue
22
type fetchMeta
33

4+
type notifyOnChangePropsKeys = [
5+
| #error
6+
| #isError
7+
| #isIdle
8+
| #isLoading
9+
| #isLoadingError
10+
| #isRefetchError
11+
| #isSuccess
12+
| #status
13+
| #tracked
14+
]
15+
16+
type infiniteQueryObserverResultProps = [
17+
| #error
18+
| #isError
19+
| #isIdle
20+
| #isLoading
21+
| #isLoadingError
22+
| #isRefetchError
23+
| #isSuccess
24+
| #status
25+
| #tracked
26+
]
27+
28+
type fetchContext
29+
30+
type queryBehavior = {onFetch: fetchContext => unit}
31+
32+
type getPreviousPageParamFunction<'data> = {
33+
firstPage: 'data,
34+
allPages: array<'data>,
35+
}
36+
37+
type getNextPageParamFunction<'data> = {
38+
lastPage: 'data,
39+
allPages: array<'data>,
40+
}
41+
42+
@deriving(abstract)
43+
type queryObserverOptions<'error, 'data, 'queryData, 'queryKey, 'pageParam> = {
44+
@optional retry: ReactQuery_Types.retryValue<'error>,
45+
@optional retryDelay: ReactQuery_Types.retryValue<'error>,
46+
@optional cacheTime: int,
47+
@optional isDataEqual: (option<'data>, 'data) => bool,
48+
@optional
49+
queryFn: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>,
50+
@optional queryHash: string,
51+
@optional queryKey: 'queryKey,
52+
@optional queryKeyHashFn: 'queryKey => string,
53+
@optional initialData: unit => 'data,
54+
@optional initialDataUpdatedAt: unit => option<int>,
55+
@optional behavior: queryBehavior, // Revisar context type
56+
@optional structuralSharing: bool,
57+
@optional getPreviousPageParam: getPreviousPageParamFunction<'data>,
58+
@optional getNextPageParam: getNextPageParamFunction<'data>,
59+
@optional _defaulted: bool,
60+
@optional enabled: bool,
61+
@optional staleTime: int,
62+
@optional refetchInterval: ReactQuery_Types.refetchIntervalValue,
63+
@optional refetchIntervalInBackground: bool,
64+
@optional refetchOnWindowFocus: ReactQuery_Types.boolOrAlwaysValue,
65+
@optional refetchOnReconnect: ReactQuery_Types.boolOrAlwaysValue,
66+
@optional refetchOnMount: ReactQuery_Types.boolOrAlwaysValue,
67+
@optional retryOnMount: bool,
68+
@optional notifyOnChangeProps: array<notifyOnChangePropsKeys>,
69+
@optional notifyOnChangePropsExclusions: array<bool>,
70+
@optional onSuccess: 'data => unit,
71+
@optional onError: 'error => unit,
72+
@optional onSettled: (option<'data>, option<'error>) => unit,
73+
@optional useErrorBoundary: bool,
74+
@optional select: 'queryData => 'data,
75+
@optional suspense: bool,
76+
@optional keepPreviousData: bool,
77+
@optional placeholderData: ReactQuery_Types.placeholderDataValue,
78+
@optional optimisticResults: bool,
79+
}
80+
81+
type defaultOptions<'error, 'data, 'queryData, 'queryKey, 'pageParam> = {
82+
queries: option<queryObserverOptions<'error, 'data, 'queryData, 'queryKey, 'pageParam>>,
83+
}
84+
485
type invalidateQueryFilter = {
586
refetchActive: option<bool>,
687
refetchInactive: option<bool>,
@@ -41,9 +122,10 @@ type queryState<'queryData, 'queryError> = {
41122
}
42123

43124
@deriving(abstract)
44-
type fetchQueryOptions<'queryKey, 'queryData, 'queryError> = {
125+
type fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> = {
45126
@optional queryKey: 'queryKey,
46-
@optional queryFn: ReactQuery_Types.queryFunctionContext => Js.Promise.t<'queryData>,
127+
@optional
128+
queryFn: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>,
47129
@optional retry: ReactQuery_Types.retryValue<'queryError>,
48130
@optional retryOnMount: bool,
49131
@optional retryDelay: ReactQuery_Types.retryDelayValue<'queryError>,
@@ -56,14 +138,24 @@ type fetchQueryOptions<'queryKey, 'queryData, 'queryError> = {
56138
}
57139

58140
type queryClient<'queryKey, 'queryData, 'queryError, 'pageParams> = {
59-
fetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError> => Js.Promise.t<'queryData>,
60-
fetchInfiniteQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError> => Js.Promise.t<
61-
ReactQuery_Types.infiniteData<'queryData, 'pageParams>,
141+
fetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParams> => Js.Promise.t<
142+
'queryData,
62143
>,
63-
prefetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError> => Js.Promise.t<unit>,
64-
prefetchInfiniteQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError> => Js.Promise.t<
144+
fetchInfiniteQuery: fetchQueryOptions<
145+
'queryKey,
146+
'queryData,
147+
'queryError,
148+
'pageParams,
149+
> => Js.Promise.t<ReactQuery_Types.infiniteData<'queryData, 'pageParams>>,
150+
prefetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParams> => Js.Promise.t<
65151
unit,
66152
>,
153+
prefetchInfiniteQuery: fetchQueryOptions<
154+
'queryKey,
155+
'queryData,
156+
'queryError,
157+
'pageParams,
158+
> => Js.Promise.t<unit>,
67159
getQueryData: 'queryKey => option<'queryData>,
68160
setQueryData: ('queryKey, option<'queryData>) => 'queryData,
69161
getQueryState: (

examples/src/bindings/ReactQuery_Query.res

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
@deriving(abstract)
2-
type queryOptions<'queryKey, 'queryData, 'queryError> = {
2+
type queryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> = {
33
@optional queryKey: 'queryKey,
4-
@optional queryFn: ReactQuery_Types.queryFunctionContext => Js.Promise.t<'queryData>,
4+
@optional
5+
queryFn: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>,
56
@optional enabled: bool,
67
@optional retry: ReactQuery_Types.retryValue<'queryError>,
78
@optional retryOnMount: bool,
@@ -52,12 +53,12 @@ type rec queryResult<'queryError, 'queryData> = {
5253
}
5354

5455
@module("react-query")
55-
external useQuery: queryOptions<'queryKey, 'queryData, 'queryError> => queryResult<
56+
external useQuery: queryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> => queryResult<
5657
'queryError,
5758
'queryData,
5859
> = "useQuery"
5960

6061
@module("react-query")
61-
external useQueries: array<queryOptions<'queryKey, 'queryData, 'queryError>> => array<
62+
external useQueries: array<queryOptions<'queryKey, 'queryData, 'queryError, 'pageParam>> => array<
6263
queryResult<'queryError, 'queryData>,
6364
> = "useQueries"

examples/src/bindings/ReactQuery_Types.res

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
type query
2-
type queryFunctionContext
32
type timeValue
43
type boolOrAlwaysValue
54
type refetchIntervalValue
65
type notifyOnChangePropsValue
76
type retryValue<'queryError>
87
type retryDelayValue<'queryError>
98
type queryDataKeyOrFilterValue<'queryKey>
9+
type placeholderDataValue
10+
11+
type queryFunctionContext<'queryKey, 'pageParam> = {
12+
queryKey: 'queryKey,
13+
pageParam: 'pageParam,
14+
}
1015

1116
type retryParam<'error> = [#bool(bool) | #number(int) | #fn((int, 'error) => bool)]
1217
type retryDelayParam<'error> = [#number(int) | #fn((int, 'error) => int)]
@@ -20,6 +25,11 @@ type infiniteData<'queryData, 'pageParam> = {
2025
}
2126
type queryStatus = [#loading | #success | #idle | #error | #initialData]
2227

28+
type placeholderData<'queryData, 'queryResult> = [
29+
| #data('queryData)
30+
| #function(unit => option<'queryResult>)
31+
]
32+
2333
@deriving(abstract)
2434
type queryFilter<'queryKey> = {
2535
@optional exact: bool,

examples/src/bindings/ReactQuery_Utils.res

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ let setQueryData: ReactQuery_Types.queryDataKeyOrFilter<
4545
| #filters(value) => Obj.magic(value)
4646
}
4747

48+
let placeholderData: ReactQuery_Types.placeholderData<
49+
'queryData,
50+
'queryResult,
51+
> => ReactQuery_Types.placeholderDataValue = value =>
52+
switch value {
53+
| #data(data) => Obj.magic(data)
54+
| #function(value) => Obj.magic(value)
55+
}
56+
4857
let refetchOnMount = boolOrAlways
4958
let refetchOnWindowFocus = boolOrAlways
5059
let refetchOnReconnect = boolOrAlways

0 commit comments

Comments
 (0)