From 56813ee0430d3309c38de3885068e8258e8a8279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20S=C3=A1ez?= Date: Mon, 3 Jun 2024 17:51:41 -0400 Subject: [PATCH] Safer refetch (#158) --- .changeset/real-clocks-know.md | 5 ++++ packages/graphql-react-query/src/client.ts | 27 ++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 .changeset/real-clocks-know.md diff --git a/.changeset/real-clocks-know.md b/.changeset/real-clocks-know.md new file mode 100644 index 00000000..5a26098f --- /dev/null +++ b/.changeset/real-clocks-know.md @@ -0,0 +1,5 @@ +--- +'@soundxyz/graphql-react-query': minor +--- + +Underlying refetch is not called if query is not enabled or variables is false diff --git a/packages/graphql-react-query/src/client.ts b/packages/graphql-react-query/src/client.ts index f58239e2..3c4e7c86 100644 --- a/packages/graphql-react-query/src/client.ts +++ b/packages/graphql-react-query/src/client.ts @@ -572,11 +572,14 @@ export function GraphQLReactQueryClient< ) { const queryKey = filterQueryKey !== undefined ? [query, variables, filterQueryKey] : [query, variables]; + + const isEnabled = enabled && variables !== false; + const result = useQueryReactQuery>, Error, QueryData>({ queryFn: fetchOptions ? queryFnWithFetchOptions(fetchOptions) : defaultQueryFn, queryKey, ...options, - enabled: enabled && variables !== false, + enabled: isEnabled, staleTime: getTimeProp(staleTime), cacheTime: cacheTime != null ? getTimeProp(cacheTime) : undefined, }); @@ -604,11 +607,18 @@ export function GraphQLReactQueryClient< }, ); + const refetch = useStableCallback((...params: Parameters) => { + if (!isEnabled) return; + + return result.refetch(...params); + }); + return { ...result, isLoading: result.isInitialLoading, setQueryData: setQueryDataCallback, queryKey, + refetch, }; } @@ -874,6 +884,8 @@ export function GraphQLReactQueryClient< null, ); + const isEnabled = enabled && !!variables; + const result = useInfiniteReactQuery({ staleTime: getTimeProp(staleTime), cacheTime: cacheTime != null ? getTimeProp(cacheTime) : undefined, @@ -902,7 +914,7 @@ export function GraphQLReactQueryClient< throw Error(`Missing variables required to execute query!`); }, ...options, - enabled: enabled && !!variables, + enabled: isEnabled, }); const { @@ -916,12 +928,16 @@ export function GraphQLReactQueryClient< } = result; const loadMoreNextPage = useStableCallback(() => { + if (!isEnabled) return; + if (hasNextPage && !isFetchingNextPage) return fetchNextPage(); return null; }); const loadMorePreviousPage = useStableCallback(() => { + if (!isEnabled) return; + if (hasPreviousPage && !isFetchingPreviousPage) return fetchPreviousPage(); return null; @@ -981,6 +997,12 @@ export function GraphQLReactQueryClient< return Object.values(values); }, [stableOrderType, data, entityStoreNodesSnapshot, customPages, filter]); + const refetch = useStableCallback((...params: Parameters) => { + if (!isEnabled) return; + + return result.refetch(...params); + }); + return { ...result, isLoadingNewPage: @@ -995,6 +1017,7 @@ export function GraphQLReactQueryClient< setInfiniteQueryData: setInfiniteQueryDataCallback, latestData, queryKey, + refetch, }; }