Skip to content

Commit a997189

Browse files
authored
ref: move type definition of createQueryToolkit (#13)
1 parent 10ee66f commit a997189

File tree

2 files changed

+46
-93
lines changed

2 files changed

+46
-93
lines changed

src/createQueryToolkit.ts

Lines changed: 11 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -7,69 +7,10 @@ import {
77
} from "react-query";
88
import { generateKey } from "./internal/generateKey";
99
import { returnByCondition } from "./internal/returnByCondition";
10-
import {
11-
QueryDefaultOption,
12-
QueryType,
13-
TQueryFunction,
14-
UseInfiniteQueryDefaultOption,
15-
UseQueryDefaultOption,
16-
} from "./types/query";
17-
import {
18-
QueryToolkit,
19-
QueryToolkitInfiniteQueryType,
20-
QueryToolkitQueryType,
21-
} from "./types/queryToolkit";
10+
import { QueryCreator, QueryToolkit } from "./types/queryToolkit";
2211

23-
export function createQueryToolkit(queryClient: QueryClient) {
24-
function createQuery<
25-
TQueryFnArgs extends unknown[],
26-
TQueryFnReturn,
27-
TData = TQueryFnReturn,
28-
>(
29-
queryKey: QueryKey,
30-
queryFn: TQueryFunction<TQueryFnArgs, TQueryFnReturn>,
31-
options?: {
32-
passArgsToQueryKey?: boolean;
33-
queryType?: "query";
34-
defaultOptions?: QueryDefaultOption<TQueryFnReturn, TData> &
35-
UseQueryDefaultOption<TQueryFnReturn, TData>;
36-
},
37-
): Omit<
38-
QueryToolkitQueryType<TQueryFnArgs, TQueryFnReturn, Error, TData>,
39-
"useInfiniteQuery" | "fetchInfiniteQuery" | "prefetchInfiniteQuery"
40-
>;
41-
function createQuery<
42-
TQueryFnArgs extends unknown[],
43-
TQueryFnReturn,
44-
TData = TQueryFnReturn,
45-
>(
46-
queryKey: QueryKey,
47-
queryFn: TQueryFunction<TQueryFnArgs, TQueryFnReturn>,
48-
options?: {
49-
passArgsToQueryKey?: boolean;
50-
queryType?: "infiniteQuery";
51-
defaultOptions?: QueryDefaultOption<TQueryFnReturn, TData> &
52-
UseInfiniteQueryDefaultOption<TQueryFnReturn, TData>;
53-
},
54-
): Omit<
55-
QueryToolkitInfiniteQueryType<TQueryFnArgs, TQueryFnReturn, Error, TData>,
56-
"useQuery" | "fetchQuery" | "prefetchQuery"
57-
>;
58-
function createQuery<
59-
TQueryFnArgs extends unknown[],
60-
TQueryFnReturn,
61-
TData = TQueryFnReturn,
62-
>(
63-
queryKey: QueryKey,
64-
queryFn: TQueryFunction<TQueryFnArgs, TQueryFnReturn>,
65-
options: {
66-
passArgsToQueryKey?: boolean;
67-
queryType?: QueryType;
68-
defaultOptions?: QueryDefaultOption<TQueryFnReturn, TData> &
69-
UseQueryDefaultOption<TQueryFnReturn, TData> &
70-
UseInfiniteQueryDefaultOption<TQueryFnReturn, TData>;
71-
} = {},
72-
) {
12+
export function createQueryToolkit(queryClient: QueryClient): QueryCreator {
13+
return (queryKey, queryFn, options = {}) => {
7314
const {
7415
passArgsToQueryKey = true,
7516
queryType = "query",
@@ -87,19 +28,14 @@ export function createQueryToolkit(queryClient: QueryClient) {
8728
...(passArgsToQueryKey && args ? args : []),
8829
]);
8930

90-
const handleHooks =
91-
(hook: any) => (args?: TQueryFnArgs, queryOptions?: any) =>
92-
hook(
93-
getKey(queryOptions?.queryKey, args),
94-
queryFn(...((args || []) as TQueryFnArgs)),
95-
{ ...defaultOptions, ...queryOptions },
96-
);
31+
const handleHooks = (hook: any) => (args?: any, queryOptions?: any) =>
32+
hook(getKey(queryOptions?.queryKey, args), queryFn(...(args || [])), {
33+
...defaultOptions,
34+
...queryOptions,
35+
});
9736

9837
const hooks: Partial<
99-
Pick<
100-
QueryToolkit<TQueryFnArgs>,
101-
"useQuery" | "useInfiniteQuery" | "useIsFetching"
102-
>
38+
Pick<QueryToolkit, "useQuery" | "useInfiniteQuery" | "useIsFetching">
10339
> = {
10440
useQuery: returnOnQuery(handleHooks(useQuery)),
10541
useInfiniteQuery: returnOnInfiniteQuery(handleHooks(useInfiniteQuery)),
@@ -119,7 +55,7 @@ export function createQueryToolkit(queryClient: QueryClient) {
11955
),
12056
);
12157

122-
const handler = new Proxy(hooks, {
58+
return new Proxy(hooks, {
12359
get(target: any, path: keyof QueryToolkit) {
12460
if (target[path]) return target[path];
12561
switch (path) {
@@ -144,23 +80,5 @@ export function createQueryToolkit(queryClient: QueryClient) {
14480
}
14581
},
14682
});
147-
148-
if (isInfiniteQuery)
149-
return handler as Omit<
150-
QueryToolkitInfiniteQueryType<
151-
TQueryFnArgs,
152-
TQueryFnReturn,
153-
Error,
154-
TData
155-
>,
156-
"useQuery" | "fetchQuery" | "prefetchQuery"
157-
>;
158-
159-
return handler as Omit<
160-
QueryToolkitQueryType<TQueryFnArgs, TQueryFnReturn, Error, TData>,
161-
"useInfiniteQuery" | "fetchInfiniteQuery" | "prefetchInfiniteQuery"
162-
>;
163-
}
164-
165-
return createQuery;
83+
};
16684
}

src/types/queryToolkit.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ import {
1818
} from "react-query";
1919
import { QueryState } from "react-query/types/core/query";
2020
import { QueryFilters, Updater } from "react-query/types/core/utils";
21+
import {
22+
QueryDefaultOption,
23+
TQueryFunction,
24+
UseInfiniteQueryDefaultOption,
25+
UseQueryDefaultOption,
26+
} from "./query";
2127

2228
interface QueryToolkitBase<
2329
TQueryFnData = unknown,
@@ -120,3 +126,32 @@ export type QueryToolkit<
120126
> =
121127
| QueryToolkitQueryType<TQueryFnArgs, TQueryFnData, TError, TData>
122128
| QueryToolkitInfiniteQueryType<TQueryFnArgs, TQueryFnData, TError, TData>;
129+
130+
export interface QueryCreator {
131+
<TQueryFnArgs extends unknown[], TQueryFnReturn, TData = TQueryFnReturn>(
132+
queryKey: QueryKey,
133+
queryFn: TQueryFunction<TQueryFnArgs, TQueryFnReturn>,
134+
options?: {
135+
passArgsToQueryKey?: boolean;
136+
queryType?: "query";
137+
defaultOptions?: QueryDefaultOption<TQueryFnReturn, TData> &
138+
UseQueryDefaultOption<TQueryFnReturn, TData>;
139+
},
140+
): Omit<
141+
QueryToolkitQueryType<TQueryFnArgs, TQueryFnReturn, Error, TData>,
142+
"useInfiniteQuery" | "fetchInfiniteQuery" | "prefetchInfiniteQuery"
143+
>;
144+
<TQueryFnArgs extends unknown[], TQueryFnReturn, TData = TQueryFnReturn>(
145+
queryKey: QueryKey,
146+
queryFn: TQueryFunction<TQueryFnArgs, TQueryFnReturn>,
147+
options?: {
148+
passArgsToQueryKey?: boolean;
149+
queryType?: "infiniteQuery";
150+
defaultOptions?: QueryDefaultOption<TQueryFnReturn, TData> &
151+
UseInfiniteQueryDefaultOption<TQueryFnReturn, TData>;
152+
},
153+
): Omit<
154+
QueryToolkitInfiniteQueryType<TQueryFnArgs, TQueryFnReturn, Error, TData>,
155+
"useQuery" | "fetchQuery" | "prefetchQuery"
156+
>;
157+
}

0 commit comments

Comments
 (0)