Skip to content

Commit 7732ac4

Browse files
authored
refactor: update logic for all metadata query factories (coder#10356)
* refactor: simplify metadata patterns * fix: add return type to me factory * fix: make sure query key for me is always defined at type level
1 parent 6b2aee4 commit 7732ac4

File tree

6 files changed

+27
-43
lines changed

6 files changed

+27
-43
lines changed

site/src/api/queries/appearance.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,12 @@ import { getMetadataAsJSON } from "utils/metadata";
66
const initialAppearanceData = getMetadataAsJSON<AppearanceConfig>("appearance");
77
const appearanceConfigKey = ["appearance"] as const;
88

9-
export const appearance = (queryClient: QueryClient) => {
9+
export const appearance = (): UseQueryOptions<AppearanceConfig> => {
1010
return {
11-
queryKey: appearanceConfigKey,
12-
queryFn: async () => {
13-
const cachedData = queryClient.getQueryData(appearanceConfigKey);
14-
if (cachedData === undefined && initialAppearanceData !== undefined) {
15-
return initialAppearanceData;
16-
}
17-
18-
return API.getAppearance();
19-
},
20-
} satisfies UseQueryOptions<AppearanceConfig>;
11+
queryKey: ["appearance"],
12+
initialData: initialAppearanceData,
13+
queryFn: () => API.getAppearance(),
14+
};
2115
};
2216

2317
export const updateAppearance = (queryClient: QueryClient) => {

site/src/api/queries/buildInfo.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
import { QueryClient, type UseQueryOptions } from "react-query";
1+
import { type UseQueryOptions } from "react-query";
22
import { type BuildInfoResponse } from "api/typesGenerated";
33
import * as API from "api/api";
44
import { getMetadataAsJSON } from "utils/metadata";
55

66
const initialBuildInfoData = getMetadataAsJSON<BuildInfoResponse>("build-info");
77
const buildInfoKey = ["buildInfo"] as const;
88

9-
export const buildInfo = (queryClient: QueryClient) => {
9+
export const buildInfo = (): UseQueryOptions<BuildInfoResponse> => {
1010
return {
1111
queryKey: buildInfoKey,
12-
queryFn: async () => {
13-
const cachedData = queryClient.getQueryData(buildInfoKey);
14-
if (cachedData === undefined && initialBuildInfoData !== undefined) {
15-
return initialBuildInfoData;
16-
}
17-
18-
return API.getBuildInfo();
19-
},
20-
} satisfies UseQueryOptions<BuildInfoResponse>;
12+
initialData: initialBuildInfoData,
13+
queryFn: () => API.getBuildInfo(),
14+
};
2115
};

site/src/api/queries/entitlements.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
import { QueryClient } from "react-query";
1+
import { QueryClient, UseQueryOptions } from "react-query";
22
import * as API from "api/api";
33
import { Entitlements } from "api/typesGenerated";
44
import { getMetadataAsJSON } from "utils/metadata";
55

6-
const ENTITLEMENTS_QUERY_KEY = ["entitlements"];
6+
const initialEntitlementsData = getMetadataAsJSON<Entitlements>("entitlements");
7+
const ENTITLEMENTS_QUERY_KEY = ["entitlements"] as const;
78

8-
export const entitlements = () => {
9+
export const entitlements = (): UseQueryOptions<Entitlements> => {
910
return {
1011
queryKey: ENTITLEMENTS_QUERY_KEY,
11-
queryFn: async () =>
12-
getMetadataAsJSON<Entitlements>("entitlements") ?? API.getEntitlements(),
12+
queryFn: () => API.getEntitlements(),
13+
initialData: initialEntitlementsData,
1314
};
1415
};
1516

site/src/api/queries/experiments.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
import * as API from "api/api";
22
import { getMetadataAsJSON } from "utils/metadata";
33
import { type Experiments } from "api/typesGenerated";
4-
import { QueryClient, type UseQueryOptions } from "react-query";
4+
import { type UseQueryOptions } from "react-query";
55

66
const initialExperimentsData = getMetadataAsJSON<Experiments>("experiments");
77
const experimentsKey = ["experiments"] as const;
88

9-
export const experiments = (queryClient: QueryClient) => {
9+
export const experiments = (): UseQueryOptions<Experiments> => {
1010
return {
1111
queryKey: experimentsKey,
12-
queryFn: async () => {
13-
const cachedData = queryClient.getQueryData(experimentsKey);
14-
if (cachedData === undefined && initialExperimentsData !== undefined) {
15-
return initialExperimentsData;
16-
}
17-
18-
return API.getExperiments();
19-
},
12+
initialData: initialExperimentsData,
13+
queryFn: () => API.getExperiments(),
2014
} satisfies UseQueryOptions<Experiments>;
2115
};
2216

site/src/api/queries/users.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ export const authMethods = () => {
9191

9292
const initialUserData = getMetadataAsJSON<User>("user");
9393

94-
export const me = () => {
94+
export const me = (): UseQueryOptions<User> & {
95+
queryKey: NonNullable<UseQueryOptions<User>["queryKey"]>;
96+
} => {
9597
return {
9698
queryKey: ["me"],
9799
initialData: initialUserData,

site/src/components/Dashboard/DashboardProvider.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useQuery, useQueryClient } from "react-query";
1+
import { useQuery } from "react-query";
22
import { buildInfo } from "api/queries/buildInfo";
33
import { experiments } from "api/queries/experiments";
44
import { entitlements } from "api/queries/entitlements";
@@ -39,11 +39,10 @@ export const DashboardProviderContext = createContext<
3939
>(undefined);
4040

4141
export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
42-
const queryClient = useQueryClient();
43-
const buildInfoQuery = useQuery(buildInfo(queryClient));
42+
const buildInfoQuery = useQuery(buildInfo());
4443
const entitlementsQuery = useQuery(entitlements());
45-
const experimentsQuery = useQuery(experiments(queryClient));
46-
const appearanceQuery = useQuery(appearance(queryClient));
44+
const experimentsQuery = useQuery(experiments());
45+
const appearanceQuery = useQuery(appearance());
4746

4847
const isLoading =
4948
!buildInfoQuery.data ||

0 commit comments

Comments
 (0)