Skip to content

Commit 6ff153c

Browse files
jankeromnessvenefftinge
authored andcommitted
[dashboard] Make the new Default IDE page actually change the user settings
1 parent 03f74e8 commit 6ff153c

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

components/dashboard/src/settings/Preferences.tsx

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,47 @@ import { UserContext } from "../user-context";
55
import { SettingsPage } from "./SettingsPage";
66

77
export default function Preferences() {
8-
const { user } = useContext(UserContext);
9-
const [ defaultIde, setDefaultIde ] = useState<string>(user?.additionalData?.ideSettings?.defaultIde || 'code');
108
const [ hasIDESettingsPermissions, setHasIDESettingsPermissions ] = useState<boolean | undefined>(undefined);
119
if (hasIDESettingsPermissions === undefined) {
1210
getGitpodService().server.hasPermission('ide-settings').then(hasPermission => setHasIDESettingsPermissions(hasPermission));
1311
}
1412

13+
const { user } = useContext(UserContext);
14+
const [ defaultIde, setDefaultIde ] = useState<string>(user?.additionalData?.ideSettings?.defaultIde || 'theia');
15+
const actuallySetDefaultIde = async (value: string) => {
16+
const additionalData = user?.additionalData || {};
17+
const settings = additionalData.ideSettings || {};
18+
if (value === 'theia') {
19+
delete settings.defaultIde;
20+
} else {
21+
settings.defaultIde = value;
22+
}
23+
additionalData.ideSettings = settings;
24+
await getGitpodService().server.updateLoggedInUser({ additionalData });
25+
setDefaultIde(value);
26+
}
27+
1528
return <div>
1629
<SettingsPage title='Preferences' subtitle='Configure your Default IDE for all workspaces.'>
1730
<h3>Default IDE</h3>
18-
<p className="text-base">Choose which IDE your workspaces should use.</p>
31+
<p className="text-base">Choose which IDE you want to use.</p>
1932
<div className="mt-4 space-x-4 flex">
20-
<SelectableCard className="w-36 h-40" title="VS Code" selected={defaultIde === 'code'} onClick={()=>setDefaultIde('code')}>
33+
<SelectableCard className="w-36 h-40" title="VS Code" selected={defaultIde === 'code'} onClick={() => actuallySetDefaultIde('code')}>
2134
<div className="flex-grow flex justify-center align-center">
2235
<img className="w-16 filter-grayscale" src="/images/vscode.svg"/>
2336
</div>
2437
</SelectableCard>
25-
<SelectableCard className="w-36 h-40" title="Theia" selected={defaultIde === 'theia'} onClick={()=>setDefaultIde('theia')}>
38+
<SelectableCard className="w-36 h-40" title="Theia" selected={defaultIde === 'theia'} onClick={() => actuallySetDefaultIde('theia')}>
2639
<div className="flex-grow flex justify-center align-center">
2740
<img className="w-16" src="/images/theia-gray.svg"/>
2841
</div>
2942
</SelectableCard>
30-
<SelectableCard className={`w-36 h-40 ${hasIDESettingsPermissions ? '' : 'invisible'}`} title="Custom" selected={!['code', 'theia'].includes(defaultIde)} onClick={()=>setDefaultIde('')}></SelectableCard>
43+
<SelectableCard className={`w-36 h-40 ${hasIDESettingsPermissions ? '' : 'invisible'}`} title="Custom" selected={!['code', 'theia'].includes(defaultIde)} onClick={() => setDefaultIde('')}></SelectableCard>
3144
</div>
32-
<div className={`mt-4 ${hasIDESettingsPermissions ? '' : 'invisible'}`}>
33-
<label className={['code', 'theia'].includes(defaultIde) ? 'opacity-0' : 'opacity-100'}>
45+
<div className={`mt-4`}>
46+
<label className={hasIDESettingsPermissions && !['code', 'theia'].includes(defaultIde) ? 'opacity-100' : 'opacity-0'}>
3447
<p className="text-base text-gray-600 font-bold leading-5">Custom IDE image name</p>
35-
<input className="w-80 mt-1" type="text" />
48+
<input className="w-80 mt-1" type="text" value={defaultIde} onChange={(e) => setDefaultIde(e.target.value)} onBlur={(e) => actuallySetDefaultIde(e.target.value)} />
3649
</label>
3750
</div>
3851
</SettingsPage>

0 commit comments

Comments
 (0)