Skip to content

Commit 464c5d6

Browse files
authored
feat(query): support prefetch for suspenseQuery and suspenseInfiniteQuery (#2052)
1 parent ac2e6cd commit 464c5d6

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

packages/query/src/index.ts

+23-5
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,8 @@ const generateQueryImplementation = ({
718718
hasQueryV5WithDataTagError,
719719
doc,
720720
usePrefetch,
721+
useQuery,
722+
useInfinite,
721723
}: {
722724
queryOption: {
723725
name: string;
@@ -748,6 +750,8 @@ const generateQueryImplementation = ({
748750
hasQueryV5WithDataTagError: boolean;
749751
doc?: string;
750752
usePrefetch?: boolean;
753+
useQuery?: boolean;
754+
useInfinite?: boolean;
751755
}) => {
752756
const queryPropDefinitions = toObjectString(props, 'definition');
753757
const definedInitialDataQueryPropsDefinitions = toObjectString(
@@ -1010,6 +1014,20 @@ ${hookOptions}
10101014
export function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\n ${definedInitialDataQueryPropsDefinitions} ${definedInitialDataQueryArguments} ${optionalQueryClientArgument}\n ): ${definedInitialDataReturnType}
10111015
export function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\n ${queryPropDefinitions} ${undefinedInitialDataQueryArguments} ${optionalQueryClientArgument}\n ): ${returnType}
10121016
export function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\n ${queryPropDefinitions} ${queryArguments} ${optionalQueryClientArgument}\n ): ${returnType}`;
1017+
1018+
const shouldGeneratePrefetch =
1019+
usePrefetch &&
1020+
(type === QueryType.QUERY ||
1021+
type === QueryType.INFINITE ||
1022+
(type === QueryType.SUSPENSE_QUERY && !useQuery) ||
1023+
(type === QueryType.SUSPENSE_INFINITE && !useInfinite));
1024+
const prefetchType =
1025+
type === QueryType.QUERY || type === QueryType.SUSPENSE_QUERY
1026+
? 'query'
1027+
: 'infinite-query';
1028+
const prefetchVarName = camel(`prefetch-${operationName}-${prefetchType}`);
1029+
const prefetchFnName = camel(`prefetch-${prefetchType}`);
1030+
10131031
return `
10141032
${queryOptionsFn}
10151033
@@ -1037,16 +1055,14 @@ export function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\n ${q
10371055
return ${queryResultVarName};
10381056
}\n
10391057
${
1040-
usePrefetch && (type === QueryType.QUERY || type === QueryType.INFINITE)
1041-
? `${doc}export const ${camel(
1042-
`prefetch-${name}`,
1043-
)} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\n queryClient: QueryClient, ${queryProps} ${queryArguments}\n ): Promise<QueryClient> => {
1058+
shouldGeneratePrefetch
1059+
? `${doc}export const ${prefetchVarName} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\n queryClient: QueryClient, ${queryProps} ${queryArguments}\n ): Promise<QueryClient> => {
10441060
10451061
const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${
10461062
queryProperties ? ',' : ''
10471063
}${isRequestOptions ? 'options' : 'queryOptions'})
10481064
1049-
await queryClient.${camel(`prefetch-${type}`)}(${queryOptionsVarName});
1065+
await queryClient.${prefetchFnName}(${queryOptionsVarName});
10501066
10511067
return queryClient;
10521068
}\n`
@@ -1282,6 +1298,8 @@ const generateQueryHook = async (
12821298
hasQueryV5WithDataTagError,
12831299
doc,
12841300
usePrefetch: query.usePrefetch,
1301+
useQuery: query.useQuery,
1302+
useInfinite: query.useInfinite,
12851303
}),
12861304
'',
12871305
)}

0 commit comments

Comments
 (0)