Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/dashboard/src/data/organizations/update-org-settings-mutation.ts
2501 views
1
/**
2
* Copyright (c) 2023 Gitpod GmbH. All rights reserved.
3
* Licensed under the GNU Affero General Public License (AGPL).
4
* See License.AGPL.txt in the project root for license information.
5
*/
6
7
import { useMutation, useQueryClient } from "@tanstack/react-query";
8
import { getQueryKey, useOrgSettingsQueryInvalidator } from "./org-settings-query";
9
import { useCurrentOrg } from "./orgs-query";
10
import { organizationClient } from "../../service/public-api";
11
import {
12
OrganizationSettings,
13
UpdateOrganizationSettingsRequest,
14
} from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
15
import { ErrorCode } from "@gitpod/gitpod-protocol/lib/messaging/error";
16
import { useOrgWorkspaceClassesQueryInvalidator } from "./org-workspace-classes-query";
17
import { useOrgRepoSuggestionsInvalidator } from "./suggested-repositories-query";
18
import { PartialMessage } from "@bufbuild/protobuf";
19
20
export type UpdateOrganizationSettingsArgs = PartialMessage<UpdateOrganizationSettingsRequest>;
21
22
export const useUpdateOrgSettingsMutation = () => {
23
const org = useCurrentOrg().data;
24
const invalidateOrgSettings = useOrgSettingsQueryInvalidator();
25
const invalidateWorkspaceClasses = useOrgWorkspaceClassesQueryInvalidator();
26
const invalidateOrgRepoSuggestions = useOrgRepoSuggestionsInvalidator();
27
28
const queryClient = useQueryClient();
29
const organizationId = org?.id ?? "";
30
31
return useMutation<OrganizationSettings, Error, UpdateOrganizationSettingsArgs>({
32
mutationFn: async (partialUpdate) => {
33
const update: UpdateOrganizationSettingsArgs = {
34
...partialUpdate,
35
};
36
update.organizationId = organizationId;
37
update.updatePinnedEditorVersions = update.pinnedEditorVersions !== undefined;
38
update.updateRestrictedEditorNames = update.restrictedEditorNames !== undefined;
39
update.updateRoleRestrictions = update.roleRestrictions !== undefined;
40
update.updateAllowedWorkspaceClasses = update.allowedWorkspaceClasses !== undefined;
41
if (update.onboardingSettings) {
42
update.onboardingSettings.updateRecommendedRepositories =
43
!!update.onboardingSettings.recommendedRepositories;
44
if (update.onboardingSettings.welcomeMessage) {
45
update.onboardingSettings.welcomeMessage.featuredMemberResolvedAvatarUrl = undefined; // This field is not allowed to be set in the request.
46
}
47
}
48
49
const { settings } = await organizationClient.updateOrganizationSettings(update);
50
return settings!;
51
},
52
onSuccess: (settings) => {
53
invalidateWorkspaceClasses();
54
invalidateOrgRepoSuggestions();
55
56
if (settings) {
57
queryClient.setQueryData(getQueryKey(organizationId), settings);
58
} else {
59
invalidateOrgSettings();
60
}
61
},
62
onError: (err) => {
63
if (!ErrorCode.isUserError((err as any)?.["code"])) {
64
console.error(err);
65
}
66
},
67
});
68
};
69
70