|
1 | 1 | import { useContext, useState } from "react";
|
2 |
| -import OptionCard from "../components/OptionCard"; |
| 2 | +import { getGitpodService } from "../service/service"; |
| 3 | +import SelectableCard from "../components/SelectableCard"; |
3 | 4 | import { UserContext } from "../user-context";
|
4 | 5 | import { SettingsPage } from "./SettingsPage";
|
5 | 6 |
|
6 | 7 | export default function Preferences() {
|
7 | 8 | const { user } = useContext(UserContext);
|
8 | 9 | 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 | + } |
9 | 14 |
|
10 | 15 | return <div>
|
11 | 16 | <SettingsPage title='Preferences' subtitle='Configure your Default IDE for all workspaces.'>
|
12 | 17 | <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> |
14 | 19 | <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')}> |
16 | 21 | <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"/> |
18 | 23 | </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')}> |
21 | 26 | <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"/> |
23 | 28 | </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> |
26 | 31 | </div>
|
27 |
| - <div className="mt-4"> |
| 32 | + <div className={`mt-4 ${hasIDESettingsPermissions ? '' : 'invisible'}`}> |
28 | 33 | <label className={['code', 'theia'].includes(defaultIde) ? 'opacity-0' : 'opacity-100'}>
|
29 | 34 | <p className="text-base text-gray-600 font-bold leading-5">Custom IDE image name</p>
|
30 | 35 | <input className="w-80 mt-1" type="text" />
|
|
0 commit comments