Skip to content

Commit e6ee954

Browse files
committed
Proper partial updating for onboardingSettings
Tool: gitpod/catfood.gitpod.cloud
1 parent b216fa4 commit e6ee954

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

components/dashboard/src/repositories/detail/general/ManageRepoSuggestion.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export const ManageRepoSuggestion: FC<Props> = ({ configuration }) => {
3636
await updateTeamSettings.mutateAsync(
3737
{
3838
onboardingSettings: {
39-
...orgSettings?.onboardingSettings,
4039
recommendedRepositories: [...newRepositories],
4140
},
4241
},
@@ -47,7 +46,7 @@ export const ManageRepoSuggestion: FC<Props> = ({ configuration }) => {
4746
},
4847
);
4948
},
50-
[orgSettings?.onboardingSettings, toast, updateTeamSettings],
49+
[orgSettings?.onboardingSettings?.recommendedRepositories, toast, updateTeamSettings],
5150
);
5251

5352
const isSuggested = orgSettings?.onboardingSettings?.recommendedRepositories?.includes(configuration.id);

components/dashboard/src/teams/TeamOnboarding.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,11 @@ export default function TeamOnboardingPage() {
7575

7676
await handleUpdateTeamSettings({
7777
onboardingSettings: {
78-
...settings?.onboardingSettings,
7978
internalLink,
8079
},
8180
});
8281
},
83-
[handleUpdateTeamSettings, internalLink, settings?.onboardingSettings],
82+
[handleUpdateTeamSettings, internalLink],
8483
);
8584

8685
useEffect(() => {

components/server/src/api/organization-service-api.ts

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -355,19 +355,36 @@ export class OrganizationServiceAPI implements ServiceImpl<typeof OrganizationSe
355355
}
356356

357357
if (req.onboardingSettings && Object.keys(req.onboardingSettings).length > 0) {
358+
update.onboardingSettings = {};
359+
358360
if (!this.config.isDedicatedInstallation) {
359361
throw new ApplicationError(
360362
ErrorCodes.BAD_REQUEST,
361363
"onboardingSettings can only be set on enterprise installations",
362364
);
363365
}
364-
if ((req.onboardingSettings.internalLink?.length ?? 0) > 255) {
365-
throw new ApplicationError(ErrorCodes.BAD_REQUEST, "internalLink must be <= 255 characters");
366+
367+
if (req.onboardingSettings.internalLink) {
368+
if (req.onboardingSettings.internalLink.length > 255) {
369+
throw new ApplicationError(ErrorCodes.BAD_REQUEST, "internalLink must be <= 255 characters long");
370+
}
371+
372+
update.onboardingSettings.internalLink = req.onboardingSettings.internalLink;
366373
}
367374

368375
if (
369-
req.onboardingSettings.recommendedRepositories &&
370-
req.onboardingSettings.updateRecommendedRepositories
376+
!req.onboardingSettings.updateRecommendedRepositories &&
377+
req.onboardingSettings.recommendedRepositories.length > 0
378+
) {
379+
throw new ApplicationError(
380+
ErrorCodes.BAD_REQUEST,
381+
"recommendedRepositories can only be set when updateRecommendedRepositories is true",
382+
);
383+
}
384+
385+
if (
386+
req.onboardingSettings.updateRecommendedRepositories &&
387+
req.onboardingSettings.recommendedRepositories
371388
) {
372389
if (req.onboardingSettings.recommendedRepositories.length > 3) {
373390
throw new ApplicationError(
@@ -385,6 +402,8 @@ export class OrganizationServiceAPI implements ServiceImpl<typeof OrganizationSe
385402
throw new ApplicationError(ErrorCodes.BAD_REQUEST, `repository ${configurationId} not found`);
386403
}
387404
}
405+
406+
update.onboardingSettings.recommendedRepositories = req.onboardingSettings.recommendedRepositories;
388407
}
389408

390409
if (
@@ -411,9 +430,15 @@ export class OrganizationServiceAPI implements ServiceImpl<typeof OrganizationSe
411430
) {
412431
throw new ApplicationError(ErrorCodes.BAD_REQUEST, "welcomeMessage must not be empty when enabled");
413432
}
433+
434+
update.onboardingSettings.welcomeMessage = req.onboardingSettings.welcomeMessage;
414435
}
415436

416-
update.onboardingSettings = req.onboardingSettings;
437+
const existingOnboardingSettings = await this.orgService.getSettings(ctxUserId(), req.organizationId);
438+
update.onboardingSettings = {
439+
...existingOnboardingSettings.onboardingSettings,
440+
...update.onboardingSettings,
441+
};
417442
}
418443
if (req.annotateGitCommits !== undefined) {
419444
update.annotateGitCommits = req.annotateGitCommits;

components/server/src/orgs/organization-service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { CostCenter_BillingStrategy } from "@gitpod/gitpod-protocol/lib/usage";
3737
import { CreateUserParams, UserAuthentication } from "../user/user-authentication";
3838
import isURL from "validator/lib/isURL";
3939
import { DBTeamMembership } from "@gitpod/gitpod-db/lib/typeorm/entity/db-team-membership";
40+
import { TrustedValue } from "@gitpod/gitpod-protocol/lib/util/scrubbing";
4041

4142
@injectable()
4243
export class OrganizationService {
@@ -603,6 +604,7 @@ export class OrganizationService {
603604
}
604605
}
605606

607+
log.info({ settings: new TrustedValue(settings) }, "Updating organization settings");
606608
return this.toSettings(await this.teamDB.setOrgSettings(orgId, settings));
607609
}
608610

0 commit comments

Comments
 (0)