Skip to content

Commit c956ec1

Browse files
committed
[dashboard] allow show options on ws start
1 parent 5570678 commit c956ec1

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

components/dashboard/src/start/CreateWorkspace.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { BillingAccountSelector } from "../components/BillingAccountSelector";
2828
import { FeatureFlagContext } from "../contexts/FeatureFlagContext";
2929
import { UsageLimitReachedModal } from "../components/UsageLimitReachedModal";
3030
import { StartOptions } from "@gitpod/gitpod-protocol/lib/util/gitpod-host-url";
31+
import { StartWorkspaceModal } from "../workspaces/StartWorkspaceModal";
3132

3233
export interface CreateWorkspaceProps {
3334
contextUrl: string;
@@ -56,13 +57,21 @@ function parseSearchParams(search: string): GitpodServer.StartWorkspaceOptions {
5657
return options;
5758
}
5859

60+
function isShowOptions(search: string): boolean {
61+
const params = new URLSearchParams(search);
62+
return params.has(StartOptions.SHOW_OPTIONS);
63+
}
64+
5965
export default class CreateWorkspace extends React.Component<CreateWorkspaceProps, CreateWorkspaceState> {
6066
constructor(props: CreateWorkspaceProps) {
6167
super(props);
6268
this.state = { stillParsing: true };
6369
}
6470

6571
componentDidMount() {
72+
if (isShowOptions(window.location.search)) {
73+
return;
74+
}
6675
this.createWorkspace();
6776
}
6877

@@ -135,6 +144,13 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
135144
</StartPage>
136145
);
137146
}
147+
if (isShowOptions(window.location.search)) {
148+
return (
149+
<StartPage>
150+
<StartWorkspaceModal contextUrl={this.props.contextUrl} />
151+
</StartPage>
152+
);
153+
}
138154

139155
let phase = StartPhase.Checking;
140156
let statusMessage = (

components/dashboard/src/workspaces/StartWorkspaceModal.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,23 @@ import SelectWorkspaceClassComponent from "../components/SelectWorkspaceClassCom
1414
import { UserContext } from "../user-context";
1515
import { StartWorkspaceModalContext } from "./start-workspace-modal-context";
1616

17-
export function StartWorkspaceModal() {
17+
export interface StartWorkspaceProps {
18+
uselatestIde?: boolean;
19+
ide?: string;
20+
workspaceClass?: string;
21+
contextUrl?: string;
22+
}
23+
24+
export function StartWorkspaceModal(props: StartWorkspaceProps) {
1825
const { user } = useContext(UserContext);
1926
const { isStartWorkspaceModalVisible, setIsStartWorkspaceModalVisible } = useContext(StartWorkspaceModalContext);
2027
const location = useLocation();
2128
const [useLatestIde, setUseLatestIde] = useState<boolean | undefined>(
22-
!!user?.additionalData?.ideSettings?.useLatestVersion,
29+
props.uselatestIde || !!user?.additionalData?.ideSettings?.useLatestVersion,
2330
);
24-
const [selectedIde, setSelectedIde] = useState(user?.additionalData?.ideSettings?.defaultIde);
25-
const [selectedWsClass, setSelectedWsClass] = useState<string | undefined>();
26-
const [repo, setRepo] = useState<string | undefined>(undefined);
31+
const [selectedIde, setSelectedIde] = useState(props.ide || user?.additionalData?.ideSettings?.defaultIde);
32+
const [selectedWsClass, setSelectedWsClass] = useState<string | undefined>(props.workspaceClass);
33+
const [repo, setRepo] = useState<string | undefined>(props.contextUrl);
2734
const onSelectEditorChange = useCallback(
2835
(ide: string, useLatest: boolean) => {
2936
setSelectedIde(ide);
@@ -59,10 +66,18 @@ export function StartWorkspaceModal() {
5966

6067
useEffect(() => {
6168
// reset state when visibility changes.
62-
setSelectedIde(user?.additionalData?.ideSettings?.defaultIde);
63-
setUseLatestIde(!!user?.additionalData?.ideSettings?.useLatestVersion);
64-
setRepo(undefined);
65-
}, [user, setSelectedIde, setUseLatestIde, isStartWorkspaceModalVisible]);
69+
setSelectedIde(props.ide || user?.additionalData?.ideSettings?.defaultIde);
70+
setUseLatestIde(props.uselatestIde || !!user?.additionalData?.ideSettings?.useLatestVersion);
71+
setRepo(props.contextUrl);
72+
}, [
73+
user,
74+
setSelectedIde,
75+
setUseLatestIde,
76+
isStartWorkspaceModalVisible,
77+
props.ide,
78+
props.uselatestIde,
79+
props.contextUrl,
80+
]);
6681

6782
return (
6883
<Modal

components/gitpod-protocol/src/util/gitpod-host-url.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export namespace StartOptions {
2525
export const WORKSPACE_CLASS = "workspaceClass";
2626
export const EDITOR = "editor";
2727
export const USE_LATEST_EDITOR = "useLatestEditor";
28+
export const SHOW_OPTIONS = "showOptions";
2829
}
2930

3031
export class GitpodHostUrl {

0 commit comments

Comments
 (0)