Skip to content

Commit 6caab87

Browse files
committed
[dashboard] increase IDE awareness for onboarding user when starting workspace
1 parent af26333 commit 6caab87

File tree

5 files changed

+25
-3
lines changed

5 files changed

+25
-3
lines changed

components/dashboard/src/settings/SelectIDEModal.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import SelectIDE, { updateUserIDEInfo } from "./SelectIDE";
1111
import Modal from "../components/Modal";
1212
import { UserContext } from "../user-context";
1313

14-
export default function () {
14+
export default function (props: { onClose?: () => void }) {
1515
const { user, setUser } = useContext(UserContext);
1616
const [visible, setVisible] = useState(true);
1717

@@ -23,11 +23,13 @@ export default function () {
2323
const handleContinue = async () => {
2424
setVisible(false);
2525
if (!user || User.hasPreferredIde(user)) {
26+
props.onClose && props.onClose();
2627
return;
2728
}
2829
// TODO: We need to get defaultIde in ideOptions..
2930
const defaultIde = "code";
3031
await actualUpdateUserIDEInfo(user, defaultIde, false);
32+
props.onClose && props.onClose();
3133
};
3234

3335
return (

components/dashboard/src/start/CreateWorkspace.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ import {
1515
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
1616
import Modal from "../components/Modal";
1717
import { getGitpodService, gitpodHostUrl } from "../service/service";
18-
import { UserContext } from "../user-context";
1918
import { StartPage, StartPhase, StartWorkspaceError } from "./StartPage";
2019
import StartWorkspace, { parseProps } from "./StartWorkspace";
2120
import { openAuthorizeWindow } from "../provider-utils";
2221
import { SelectAccountPayload } from "@gitpod/gitpod-protocol/lib/auth";
2322
import { SelectAccountModal } from "../settings/SelectAccountModal";
2423
import { watchHeadlessLogs } from "../components/PrebuildLogs";
2524
import CodeText from "../components/CodeText";
25+
import SelectIDEModal from "../settings/SelectIDEModal";
26+
import { UserContext } from "../user-context";
2627

2728
const WorkspaceLogs = React.lazy(() => import("../components/WorkspaceLogs"));
2829

@@ -250,6 +251,8 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
250251
onPrebuildSucceeded={() => this.createWorkspace(CreateWorkspaceMode.UsePrebuild)}
251252
/>
252253
);
254+
} else if (result?.showUserIdePreference) {
255+
statusMessage = <SelectIDEModal onClose={() => this.createWorkspace(CreateWorkspaceMode.Default)} />;
253256
}
254257

255258
return (

components/gitpod-protocol/go/gitpod-service.go

+1
Original file line numberDiff line numberDiff line change
@@ -1516,6 +1516,7 @@ type Repository struct {
15161516
type WorkspaceCreationResult struct {
15171517
CreatedWorkspaceID string `json:"createdWorkspaceId,omitempty"`
15181518
ExistingWorkspaces []*WorkspaceInfo `json:"existingWorkspaces,omitempty"`
1519+
ShowUserIdePreference bool `json:"showUserIdePreference,omitempty"`
15191520
RunningPrebuildWorkspaceID string `json:"runningPrebuildWorkspaceID,omitempty"`
15201521
RunningWorkspacePrebuild *RunningWorkspacePrebuild `json:"runningWorkspacePrebuild,omitempty"`
15211522
WorkspaceURL string `json:"workspaceURL,omitempty"`

components/gitpod-protocol/src/protocol.ts

+12
Original file line numberDiff line numberDiff line change
@@ -968,6 +968,16 @@ export namespace WithReferrerContext {
968968
}
969969
}
970970

971+
export type IDESpecifiedContext = WithReferrerContext;
972+
973+
// For those prefixes that have `IDE` specified.
974+
// Currently used for not showing onboarding IDE awareness modal
975+
export namespace IDESpecifiedContext {
976+
export function is(context: any): context is IDESpecifiedContext {
977+
return context && WithReferrerContext.is(context);
978+
}
979+
}
980+
971981
export interface WithEnvvarsContext extends WorkspaceContext {
972982
envvars: EnvVarWithValue[];
973983
}
@@ -1180,6 +1190,7 @@ export interface WorkspaceCreationResult {
11801190
createdWorkspaceId?: string;
11811191
workspaceURL?: string;
11821192
existingWorkspaces?: WorkspaceInfo[];
1193+
showUserIdePreference?: boolean;
11831194
runningWorkspacePrebuild?: {
11841195
prebuildID: string;
11851196
workspaceID: string;
@@ -1208,6 +1219,7 @@ export namespace WorkspaceCreationResult {
12081219
data &&
12091220
("createdWorkspaceId" in data ||
12101221
"existingWorkspaces" in data ||
1222+
"showUserIdePreference" in data ||
12111223
"runningWorkspacePrebuild" in data ||
12121224
"runningPrebuildWorkspaceID" in data)
12131225
);

components/server/src/workspace/gitpod-server-impl.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ import { IDEConfigService } from "../ide-config";
154154
import { PartialProject } from "@gitpod/gitpod-protocol/src/teams-projects-protocol";
155155
import { ClientMetadata, traceClientMetadata } from "../websocket/websocket-connection-manager";
156156
import { ConfigurationService } from "../config/configuration-service";
157-
import { ProjectEnvVar } from "@gitpod/gitpod-protocol/src/protocol";
157+
import { IDESpecifiedContext, ProjectEnvVar } from "@gitpod/gitpod-protocol/src/protocol";
158158
import { InstallationAdminSettings, TelemetryData } from "@gitpod/gitpod-protocol";
159159
import { Deferred } from "@gitpod/gitpod-protocol/lib/util/deferred";
160160
import { InstallationAdminTelemetryDataProvider } from "../installation-admin/telemetry-data-provider";
@@ -1063,6 +1063,10 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
10631063
}).catch();
10641064
}
10651065

1066+
if (User.isOnboardingUser(user) && !IDESpecifiedContext.is(context)) {
1067+
return { showUserIdePreference: true };
1068+
}
1069+
10661070
// if we're forced to use the default config, mark the context as such
10671071
if (!!options.forceDefaultConfig) {
10681072
context = WithDefaultConfig.mark(context);

0 commit comments

Comments
 (0)