Skip to content

Commit d40ad5c

Browse files
committed
[dashboard] display warning for latest IDE versions
1 parent 9590097 commit d40ad5c

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

components/dashboard/src/start/StartPage.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import { useEffect } from "react";
88
import gitpodIconUA from "../icons/gitpod-ua.svg";
9+
import { gitpodHostUrl } from "../service/service";
910

1011
export enum StartPhase {
1112
Checking = 0,
@@ -47,7 +48,7 @@ function getPhaseTitle(phase?: StartPhase, error?: StartWorkspaceError) {
4748
function ProgressBar(props: { phase: number; error: boolean }) {
4849
const { phase, error } = props;
4950
return (
50-
<div className="flex mt-4 mb-6">
51+
<div className="flex justify-center">
5152
{[1, 2, 3].map((i) => {
5253
let classes = "h-2 w-10 mx-1 my-2 rounded-full";
5354
if (i < phase) {
@@ -74,6 +75,7 @@ export interface StartPageProps {
7475
error?: StartWorkspaceError;
7576
title?: string;
7677
children?: React.ReactNode;
78+
latestWarning?: boolean;
7779
}
7880

7981
export interface StartWorkspaceError {
@@ -85,6 +87,15 @@ export interface StartWorkspaceError {
8587
export function StartPage(props: StartPageProps) {
8688
const { phase, error } = props;
8789
let title = props.title || getPhaseTitle(phase, error);
90+
const warningMessage = props.latestWarning && (
91+
<div className="text-center text-sm w-72 text-orange-400">
92+
LATEST IDE WARNING PLACEHOLDER, CLICK
93+
<a className="hover:text-blue-600 dark:hover:text-blue-400" href={gitpodHostUrl.asPreferences().toString()}>
94+
&nbsp;HERE&nbsp;
95+
</a>
96+
TO CHANGE YOUR IDE
97+
</div>
98+
);
8899
useEffect(() => {
89100
document.title = "Starting — Gitpod";
90101
}, []);
@@ -100,9 +111,13 @@ export function StartPage(props: StartPageProps) {
100111
}`}
101112
/>
102113
<h3 className="mt-8 text-xl">{title}</h3>
103-
{typeof phase === "number" && phase < StartPhase.IdeReady && (
104-
<ProgressBar phase={phase} error={!!error} />
105-
)}
114+
<div className="space-y-6 mb-6 mt-4">
115+
{typeof phase === "number" && phase < StartPhase.IdeReady && (
116+
<ProgressBar phase={phase} error={!!error} />
117+
)}
118+
{warningMessage}
119+
</div>
120+
106121
{error && <StartError error={error} />}
107122
{props.children}
108123
</div>

components/dashboard/src/start/StartWorkspace.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -650,9 +650,9 @@ export default class StartWorkspace extends React.Component<StartWorkspaceProps,
650650
);
651651
break;
652652
}
653-
653+
const latestWarning = this.state.workspaceInstance?.configuration?.latestWarning;
654654
return (
655-
<StartPage phase={phase} error={error} title={title}>
655+
<StartPage phase={phase} error={error} title={title} latestWarning={latestWarning}>
656656
{statusMessage}
657657
</StartPage>
658658
);

components/gitpod-protocol/src/workspace-instance.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ export interface WorkspaceInstanceConfiguration {
217217

218218
// supervisorImage is the ref of the supervisor image this instance uses.
219219
supervisorImage?: string;
220+
221+
// display warning for latest IDE versions on the loading screen.
222+
latestWarning?: boolean;
220223
}
221224

222225
/**

components/server/src/workspace/workspace-starter.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,17 @@ export class WorkspaceStarter {
527527
const configuration: WorkspaceInstanceConfiguration = {
528528
ideImage: ideConfig.ideOptions.options[ideConfig.ideOptions.defaultIde].image,
529529
supervisorImage: ideConfig.supervisorImage,
530+
latestWarning: false,
530531
};
531532

533+
function shouldDisplayLatestWarning(ide?: string, desktopIde?: string, useLatest?: boolean) {
534+
const useLatestJetBrainsDesktop = useLatest && !desktopIde?.startsWith("code");
535+
const useBrowserInsiders = ide === "code-latest";
536+
return useLatestJetBrainsDesktop || useBrowserInsiders;
537+
}
538+
532539
const ideChoice = user.additionalData?.ideSettings?.defaultIde;
540+
const useLatest = !!user.additionalData?.ideSettings?.useLatestVersion;
533541
if (!!ideChoice) {
534542
const mappedImage = ideConfig.ideOptions.options[ideChoice];
535543
if (!!mappedImage && mappedImage.image) {
@@ -539,14 +547,18 @@ export class WorkspaceStarter {
539547
// For now, this feature requires special permissions.
540548
configuration.ideImage = ideChoice;
541549
}
550+
configuration.latestWarning = shouldDisplayLatestWarning(
551+
ideChoice,
552+
user.additionalData?.ideSettings?.defaultDesktopIde,
553+
useLatest,
554+
);
542555
}
543556

544-
const useLatest = !!user.additionalData?.ideSettings?.useLatestVersion;
545557
const referrerIde = this.resolveReferrerIDE(workspace, user, ideConfig);
546558
if (referrerIde) {
547-
configuration.desktopIdeImage = useLatest
548-
? referrerIde.option.latestImage ?? referrerIde.option.image
549-
: referrerIde.option.image;
559+
const refUseLatest = useLatest && referrerIde.option.latestImage != null;
560+
configuration.desktopIdeImage = refUseLatest ? referrerIde.option.latestImage : referrerIde.option.image;
561+
configuration.latestWarning = shouldDisplayLatestWarning(undefined, referrerIde.id, refUseLatest);
550562
if (!user.additionalData?.ideSettings) {
551563
// A user does not have IDE settings configured yet configure it with a referrer ide as default.
552564
const additionalData = user?.additionalData || {};

0 commit comments

Comments
 (0)