Skip to content

Commit 694964f

Browse files
fix: implement default caching options for react-query (#265)
1 parent eb46c5b commit 694964f

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

Diff for: src/components/react-query-provider.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { V1ListActiveWorkspacesResponse } from "@/api/generated";
22
import { v1ListActiveWorkspacesQueryKey } from "@/api/generated/@tanstack/react-query.gen";
3+
import { getQueryCacheConfig } from "@/lib/react-query-utils";
34
import {
45
QueryCacheNotifyEvent,
56
QueryClient,
@@ -36,7 +37,16 @@ export function QueryClientProvider({ children }: { children: ReactNode }) {
3637
null,
3738
);
3839

39-
const [queryClient] = useState(() => new QueryClient());
40+
const [queryClient] = useState(
41+
() =>
42+
new QueryClient({
43+
defaultOptions: {
44+
queries: {
45+
...getQueryCacheConfig("short"),
46+
},
47+
},
48+
}),
49+
);
4050

4151
useEffect(() => {
4252
const queryCache = queryClient.getQueryCache();

Diff for: src/lib/react-query-utils.ts

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { OpenApiTsReactQueryKey } from "@/types/openapi-ts";
22
import { OptionsLegacyParser } from "@hey-api/client-fetch";
3-
import { Query, QueryClient } from "@tanstack/react-query";
3+
import {
4+
Query,
5+
QueryClient,
6+
QueryObserverOptions,
7+
} from "@tanstack/react-query";
48

59
// NOTE: This is copy/pasted from @/api/generated/@tanstack/react-query.gen
610
type QueryKey<TOptions extends OptionsLegacyParser = OptionsLegacyParser> = [
@@ -33,6 +37,7 @@ export function invalidateQueries(
3337
) {
3438
return queryClient.invalidateQueries({
3539
refetchType: "all",
40+
stale: true,
3641
predicate: (
3742
query: Query<unknown, Error, unknown, OpenApiTsReactQueryKey>,
3843
) => {
@@ -42,3 +47,27 @@ export function invalidateQueries(
4247
},
4348
});
4449
}
50+
51+
export function getQueryCacheConfig(
52+
lifetime: "dynamic" | "short" | "indefinite",
53+
) {
54+
switch (lifetime) {
55+
case "dynamic":
56+
return {
57+
staleTime: 0,
58+
} as const satisfies Pick<QueryObserverOptions, "staleTime">;
59+
60+
case "short":
61+
return {
62+
staleTime: 5 * 1_000,
63+
} as const satisfies Pick<QueryObserverOptions, "staleTime">;
64+
65+
case "indefinite":
66+
return {
67+
staleTime: Infinity,
68+
} as const satisfies Pick<QueryObserverOptions, "staleTime">;
69+
70+
default:
71+
return lifetime satisfies never;
72+
}
73+
}

0 commit comments

Comments
 (0)