Skip to content

Commit 6f5d953

Browse files
authored
[dashboard] Fix queries useOrgSettings/useConfiguration (#19806)
* [dashboard] Fix useConfiguration ("configurationId data is undefined") * [dashboard] Fix useOrgSettingsQuery.isLoading
1 parent 3ba3118 commit 6f5d953

File tree

5 files changed

+22
-20
lines changed

5 files changed

+22
-20
lines changed

components/dashboard/src/data/configurations/configuration-queries.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,22 +83,31 @@ export const getListConfigurationsVariablesQueryKey = (configurationId: string)
8383
return [BASE_KEY, "variable", "list", { configurationId }];
8484
};
8585

86-
export const useConfiguration = (configurationId: string) => {
87-
return useQuery<Configuration | undefined, Error>(
86+
export const useConfiguration = (configurationId?: string) => {
87+
// As we want to return "undefined" from this query/cache, and useQuery doesn't allow that, we need:
88+
// - use "null" internally/in the cache
89+
// - transform it to "undefined" using the "select" option
90+
return useQuery<Configuration | null, Error, Configuration | undefined>(
8891
getConfigurationQueryKey(configurationId),
8992
async () => {
9093
if (!configurationId) {
91-
return;
94+
return null;
9295
}
9396

9497
const { configuration } = await configurationClient.getConfiguration({
9598
configurationId,
9699
});
97100

98-
return configuration;
101+
return configuration || null;
99102
},
100103
{
104+
initialData: null,
105+
select: (data) => data || undefined,
101106
retry: (failureCount, error) => {
107+
if (!configurationId) {
108+
return false;
109+
}
110+
102111
if (failureCount > 3) {
103112
return false;
104113
}
@@ -165,8 +174,8 @@ export const useConfigurationMutation = () => {
165174
});
166175
};
167176

168-
export const getConfigurationQueryKey = (configurationId: string) => {
169-
const key: any[] = [BASE_KEY, { configurationId }];
177+
export const getConfigurationQueryKey = (configurationId?: string) => {
178+
const key: any[] = [BASE_KEY, { configurationId: configurationId || "undefined" }];
170179

171180
return key;
172181
};

components/dashboard/src/data/ide-options/ide-options-query.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { DisableScope, Scope } from "../workspaces/workspace-classes-query";
1111
import { useOrgSettingsQuery } from "../organizations/org-settings-query";
1212
import { OrganizationSettings } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
1313
import { useMemo } from "react";
14-
import { useCurrentOrg } from "../organizations/orgs-query";
1514
import { useConfiguration } from "../configurations/configuration-queries";
1615
import { useDeepCompareMemoize } from "use-deep-compare-effect";
1716

@@ -67,16 +66,10 @@ interface FilterOptions {
6766
ignoreScope?: DisableScope[];
6867
}
6968
export const useAllowedWorkspaceEditorsMemo = (configurationId: string | undefined, options?: FilterOptions) => {
70-
const organizationId = useCurrentOrg().data?.id;
7169
const { data: orgSettings, isLoading: isLoadingOrgSettings } = useOrgSettingsQuery();
7270
const { data: installationOptions, isLoading: isLoadingInstallationCls } = useIDEOptions();
73-
const { data: configuration, isLoading: isLoadingConfiguration } = useConfiguration(configurationId ?? "");
74-
let isLoading = isLoadingOrgSettings || isLoadingInstallationCls || isLoadingConfiguration;
75-
if (!organizationId) {
76-
// If there's no orgID set (i.e. User onboarding page), isLoadingOrgSettings will always be true
77-
// So we will filter it out
78-
isLoading = isLoadingInstallationCls || isLoadingConfiguration;
79-
}
71+
const { data: configuration, isLoading: isLoadingConfiguration } = useConfiguration(configurationId);
72+
const isLoading = isLoadingOrgSettings || isLoadingInstallationCls || isLoadingConfiguration;
8073
const depItems = [
8174
installationOptions,
8275
options?.ignoreScope,

components/dashboard/src/data/organizations/org-settings-query.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ export function useOrgSettingsQueryInvalidator() {
2020

2121
export function useOrgSettingsQuery() {
2222
const organizationId = useCurrentOrg().data?.id;
23-
return useQuery<OrganizationSettings, Error>(
23+
return useQuery<OrganizationSettings | null, Error, OrganizationSettings | undefined>(
2424
getQueryKey(organizationId),
2525
async () => {
2626
if (!organizationId) {
27-
throw new Error("No org selected.");
27+
return null;
2828
}
2929

3030
const settings = await organizationClient.getOrganizationSettings({ organizationId });
3131
return settings.settings || new OrganizationSettings();
3232
},
3333
{
34-
enabled: !!organizationId,
34+
select: (data) => data || undefined,
3535
},
3636
);
3737
}

components/dashboard/src/data/workspaces/workspace-classes-query.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export const useAllowedWorkspaceClassesMemo = (
120120
const { data: orgSettings, isLoading: isLoadingOrgSettings } = useOrgSettingsQuery();
121121
const { data: installationClasses, isLoading: isLoadingInstallationCls } = useWorkspaceClasses();
122122
// empty configurationId will return undefined
123-
const { data: configuration, isLoading: isLoadingConfiguration } = useConfiguration(configurationId ?? "");
123+
const { data: configuration, isLoading: isLoadingConfiguration } = useConfiguration(configurationId);
124124

125125
const isLoading = isLoadingOrgSettings || isLoadingInstallationCls || isLoadingConfiguration;
126126

components/dashboard/src/prebuilds/list/RunPrebuildModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const RunPrebuildModal: FC<Props> = ({ defaultRepositoryId: defaultConfig
4343
data: prebuildId,
4444
} = useTriggerPrebuildQuery(configurationId, branchName);
4545

46-
const { data: configuration } = useConfiguration(configurationId ?? "");
46+
const { data: configuration } = useConfiguration(configurationId);
4747

4848
const handleSubmit = useCallback(() => {
4949
if (!configurationId) {

0 commit comments

Comments
 (0)