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