From d34b0382146a32886b931b32afd9dd69603e20dc Mon Sep 17 00:00:00 2001 From: alex-mcgovern Date: Wed, 5 Feb 2025 14:52:21 +0000 Subject: [PATCH] fix: implement default caching options for react-query --- src/components/react-query-provider.tsx | 12 +++++++++- src/lib/react-query-utils.ts | 31 ++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/components/react-query-provider.tsx b/src/components/react-query-provider.tsx index 00adac41..97f9fd62 100644 --- a/src/components/react-query-provider.tsx +++ b/src/components/react-query-provider.tsx @@ -1,5 +1,6 @@ import { V1ListActiveWorkspacesResponse } from "@/api/generated"; import { v1ListActiveWorkspacesQueryKey } from "@/api/generated/@tanstack/react-query.gen"; +import { getQueryCacheConfig } from "@/lib/react-query-utils"; import { QueryCacheNotifyEvent, QueryClient, @@ -36,7 +37,16 @@ export function QueryClientProvider({ children }: { children: ReactNode }) { null, ); - const [queryClient] = useState(() => new QueryClient()); + const [queryClient] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + ...getQueryCacheConfig("short"), + }, + }, + }), + ); useEffect(() => { const queryCache = queryClient.getQueryCache(); diff --git a/src/lib/react-query-utils.ts b/src/lib/react-query-utils.ts index 53f566bc..b677843f 100644 --- a/src/lib/react-query-utils.ts +++ b/src/lib/react-query-utils.ts @@ -1,6 +1,10 @@ import { OpenApiTsReactQueryKey } from "@/types/openapi-ts"; import { OptionsLegacyParser } from "@hey-api/client-fetch"; -import { Query, QueryClient } from "@tanstack/react-query"; +import { + Query, + QueryClient, + QueryObserverOptions, +} from "@tanstack/react-query"; // NOTE: This is copy/pasted from @/api/generated/@tanstack/react-query.gen type QueryKey = [ @@ -33,6 +37,7 @@ export function invalidateQueries( ) { return queryClient.invalidateQueries({ refetchType: "all", + stale: true, predicate: ( query: Query, ) => { @@ -42,3 +47,27 @@ export function invalidateQueries( }, }); } + +export function getQueryCacheConfig( + lifetime: "dynamic" | "short" | "indefinite", +) { + switch (lifetime) { + case "dynamic": + return { + staleTime: 0, + } as const satisfies Pick; + + case "short": + return { + staleTime: 5 * 1_000, + } as const satisfies Pick; + + case "indefinite": + return { + staleTime: Infinity, + } as const satisfies Pick; + + default: + return lifetime satisfies never; + } +}