Skip to content

Commit 03f74e8

Browse files
jankeromnessvenefftinge
authored andcommitted
[dashboad] Apply Default IDE code review feedback
1 parent 5b9ef0b commit 03f74e8

File tree

5 files changed

+42
-30
lines changed

5 files changed

+42
-30
lines changed
Lines changed: 8 additions & 0 deletions
Loading

components/dashboard/public/images/theia.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

components/dashboard/src/components/OptionCard.tsx

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export interface SelectableCardProps {
2+
title: string;
3+
selected: boolean;
4+
className?: string;
5+
onClick: () => void;
6+
children?: React.ReactNode;
7+
}
8+
9+
function SelectableCard(props: SelectableCardProps) {
10+
return <div className={`rounded-xl px-4 py-3 flex flex-col cursor-pointer group border-2 ${props.selected ? 'border-green-600' : 'border-gray-300 hover:border-gray-400'} ${props.className || ''}`} onClick={props.onClick}>
11+
<div className="flex items-center">
12+
<p className={`w-full text-base font-semibold ${props.selected ? 'text-green-600' : 'text-gray-300 group-hover:text-gray-400'}`}>{props.title}</p>
13+
<input className={props.selected ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'} type="radio" checked={props.selected} />
14+
</div>
15+
{props.children}
16+
</div>;
17+
}
18+
19+
export default SelectableCard;

components/dashboard/src/settings/Preferences.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,35 @@
11
import { useContext, useState } from "react";
2-
import OptionCard from "../components/OptionCard";
2+
import { getGitpodService } from "../service/service";
3+
import SelectableCard from "../components/SelectableCard";
34
import { UserContext } from "../user-context";
45
import { SettingsPage } from "./SettingsPage";
56

67
export default function Preferences() {
78
const { user } = useContext(UserContext);
89
const [ defaultIde, setDefaultIde ] = useState<string>(user?.additionalData?.ideSettings?.defaultIde || 'code');
10+
const [ hasIDESettingsPermissions, setHasIDESettingsPermissions ] = useState<boolean | undefined>(undefined);
11+
if (hasIDESettingsPermissions === undefined) {
12+
getGitpodService().server.hasPermission('ide-settings').then(hasPermission => setHasIDESettingsPermissions(hasPermission));
13+
}
914

1015
return <div>
1116
<SettingsPage title='Preferences' subtitle='Configure your Default IDE for all workspaces.'>
1217
<h3>Default IDE</h3>
13-
<p className="text-base">Gitpod is using Code as the default IDE.</p>
18+
<p className="text-base">Choose which IDE your workspaces should use.</p>
1419
<div className="mt-4 space-x-4 flex">
15-
<OptionCard className="w-36 h-40" title="VS Code" selected={defaultIde === 'code'} onClick={()=>setDefaultIde('code')}>
20+
<SelectableCard className="w-36 h-40" title="VS Code" selected={defaultIde === 'code'} onClick={()=>setDefaultIde('code')}>
1621
<div className="flex-grow flex justify-center align-center">
17-
<img className="w-16" src="/images/vscode.svg"/>
22+
<img className="w-16 filter-grayscale" src="/images/vscode.svg"/>
1823
</div>
19-
</OptionCard>
20-
<OptionCard className="w-36 h-40" title="Theia" selected={defaultIde === 'theia'} onClick={()=>setDefaultIde('theia')}>
24+
</SelectableCard>
25+
<SelectableCard className="w-36 h-40" title="Theia" selected={defaultIde === 'theia'} onClick={()=>setDefaultIde('theia')}>
2126
<div className="flex-grow flex justify-center align-center">
22-
<img className="w-16" src="/images/theia.svg"/>
27+
<img className="w-16" src="/images/theia-gray.svg"/>
2328
</div>
24-
</OptionCard>
25-
<OptionCard className="w-36 h-40" title="Custom" selected={!['code', 'theia'].includes(defaultIde)} onClick={()=>setDefaultIde('')}></OptionCard>
29+
</SelectableCard>
30+
<SelectableCard className={`w-36 h-40 ${hasIDESettingsPermissions ? '' : 'invisible'}`} title="Custom" selected={!['code', 'theia'].includes(defaultIde)} onClick={()=>setDefaultIde('')}></SelectableCard>
2631
</div>
27-
<div className="mt-4">
32+
<div className={`mt-4 ${hasIDESettingsPermissions ? '' : 'invisible'}`}>
2833
<label className={['code', 'theia'].includes(defaultIde) ? 'opacity-0' : 'opacity-100'}>
2934
<p className="text-base text-gray-600 font-bold leading-5">Custom IDE image name</p>
3035
<input className="w-80 mt-1" type="text" />

0 commit comments

Comments
 (0)