@@ -8,32 +8,16 @@ import { useMutation } from "@tanstack/react-query";
8
8
import { useOrgSettingsQueryInvalidator } from "./org-settings-query" ;
9
9
import { useCurrentOrg } from "./orgs-query" ;
10
10
import { organizationClient } from "../../service/public-api" ;
11
- import { OrganizationSettings } from "@gitpod/public-api/lib/gitpod/v1/organization_pb" ;
11
+ import {
12
+ OrganizationSettings ,
13
+ UpdateOrganizationSettingsRequest ,
14
+ } from "@gitpod/public-api/lib/gitpod/v1/organization_pb" ;
12
15
import { ErrorCode } from "@gitpod/gitpod-protocol/lib/messaging/error" ;
13
16
import { useOrgWorkspaceClassesQueryInvalidator } from "./org-workspace-classes-query" ;
14
- import { PlainMessage } from "@bufbuild/protobuf" ;
15
17
import { useOrgRepoSuggestionsInvalidator } from "./suggested-repositories-query" ;
18
+ import { PartialMessage } from "@bufbuild/protobuf" ;
16
19
17
- export type UpdateOrganizationSettingsArgs = Partial <
18
- Omit <
19
- Pick <
20
- PlainMessage < OrganizationSettings > ,
21
- | "workspaceSharingDisabled"
22
- | "defaultWorkspaceImage"
23
- | "allowedWorkspaceClasses"
24
- | "pinnedEditorVersions"
25
- | "restrictedEditorNames"
26
- | "defaultRole"
27
- | "timeoutSettings"
28
- | "roleRestrictions"
29
- | "maxParallelRunningWorkspaces"
30
- | "annotateGitCommits"
31
- > ,
32
- never
33
- > & {
34
- onboardingSettings ?: Partial < PlainMessage < OrganizationSettings > [ "onboardingSettings" ] > ; // this enables us to not have to specify all of the onboarding settings on every update
35
- }
36
- > ;
20
+ export type UpdateOrganizationSettingsArgs = PartialMessage < UpdateOrganizationSettingsRequest > ;
37
21
38
22
export const useUpdateOrgSettingsMutation = ( ) => {
39
23
const org = useCurrentOrg ( ) . data ;
@@ -43,43 +27,24 @@ export const useUpdateOrgSettingsMutation = () => {
43
27
const organizationId = org ?. id ?? "" ;
44
28
45
29
return useMutation < OrganizationSettings , Error , UpdateOrganizationSettingsArgs > ( {
46
- mutationFn : async ( {
47
- workspaceSharingDisabled,
48
- defaultWorkspaceImage,
49
- allowedWorkspaceClasses,
50
- pinnedEditorVersions,
51
- restrictedEditorNames,
52
- defaultRole,
53
- timeoutSettings,
54
- roleRestrictions,
55
- maxParallelRunningWorkspaces,
56
- onboardingSettings,
57
- annotateGitCommits,
58
- } ) => {
59
- const settings = await organizationClient . updateOrganizationSettings ( {
60
- organizationId,
61
- workspaceSharingDisabled : workspaceSharingDisabled ?? false ,
62
- defaultWorkspaceImage,
63
- allowedWorkspaceClasses,
64
- updatePinnedEditorVersions : ! ! pinnedEditorVersions ,
65
- pinnedEditorVersions,
66
- restrictedEditorNames,
67
- updateRestrictedEditorNames : ! ! restrictedEditorNames ,
68
- defaultRole,
69
- timeoutSettings,
70
- roleRestrictions,
71
- updateRoleRestrictions : ! ! roleRestrictions ,
72
- maxParallelRunningWorkspaces,
73
- onboardingSettings : {
74
- ...onboardingSettings ,
75
- updateRecommendedRepositories : ! ! onboardingSettings ?. recommendedRepositories ,
76
- welcomeMessage : {
77
- ...onboardingSettings ?. welcomeMessage ,
78
- featuredMemberResolvedAvatarUrl : undefined , // This field is not allowed to be set in the request.
79
- } ,
80
- } ,
81
- annotateGitCommits,
82
- } ) ;
30
+ mutationFn : async ( partialUpdate ) => {
31
+ const update : PartialMessage < UpdateOrganizationSettingsRequest > = {
32
+ ...partialUpdate ,
33
+ } ;
34
+ update . organizationId = organizationId ;
35
+ update . updatePinnedEditorVersions = update . pinnedEditorVersions !== undefined ;
36
+ update . updateRestrictedEditorNames = update . restrictedEditorNames !== undefined ;
37
+ update . updateRoleRestrictions = update . roleRestrictions !== undefined ;
38
+ update . updateAllowedWorkspaceClasses = update . allowedWorkspaceClasses !== undefined ;
39
+ if ( update . onboardingSettings ) {
40
+ update . onboardingSettings . updateRecommendedRepositories =
41
+ ! ! update . onboardingSettings . recommendedRepositories ;
42
+ if ( update . onboardingSettings . welcomeMessage ) {
43
+ update . onboardingSettings . welcomeMessage . featuredMemberResolvedAvatarUrl = undefined ; // This field is not allowed to be set in the request.
44
+ }
45
+ }
46
+
47
+ const settings = await organizationClient . updateOrganizationSettings ( update ) ;
83
48
return settings . settings ! ;
84
49
} ,
85
50
onSuccess : ( ) => {
0 commit comments