Skip to content

Commit 6c3ae2a

Browse files
committed
update user in context
1 parent 4a44f13 commit 6c3ae2a

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

components/dashboard/src/user-settings/Preferences.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export default function Preferences() {
7676
Learn more
7777
</a>
7878
</Subheading>
79-
<SelectIDE updateUserContext={false} location="preferences" />
79+
<SelectIDE location="preferences" />
8080

8181
<ThemeSelector className="mt-12" />
8282

components/dashboard/src/user-settings/SelectIDE.tsx

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import { useContext, useEffect, useState } from "react";
7+
import { useCallback, useContext, useEffect, useState } from "react";
88
import { UserContext } from "../user-context";
99
import CheckBox from "../components/CheckBox";
1010
import { User } from "@gitpod/gitpod-protocol";
@@ -14,7 +14,6 @@ import { useUpdateCurrentUserMutation } from "../data/current-user/update-mutati
1414

1515
export type IDEChangedTrackLocation = "workspace_list" | "workspace_start" | "preferences";
1616
interface SelectIDEProps {
17-
updateUserContext?: boolean;
1817
location: IDEChangedTrackLocation;
1918
}
2019

@@ -33,27 +32,44 @@ export default function SelectIDE(props: SelectIDEProps) {
3332
user?.additionalData?.ideSettings?.useLatestVersion ?? false,
3433
);
3534

36-
const actualUpdateUserIDEInfo = async (selectedIde: string, useLatestVersion: boolean) => {
37-
const additionalData = user?.additionalData ?? {};
38-
const settings = additionalData.ideSettings ?? {};
39-
settings.settingVersion = "2.0";
40-
settings.defaultIde = selectedIde;
41-
settings.useLatestVersion = useLatestVersion;
42-
additionalData.ideSettings = settings;
35+
const actualUpdateUserIDEInfo = useCallback(
36+
async (selectedIde: string, useLatestVersion: boolean) => {
37+
const additionalData = user?.additionalData || {};
38+
const ideSettings = additionalData.ideSettings || {};
4339

44-
const newUserData = await updateUser.mutateAsync({ additionalData });
45-
props.updateUserContext && setUser({ ...newUserData });
46-
};
40+
// Avoid mutating user object in state for updates
41+
const updates = {
42+
additionalData: {
43+
...additionalData,
44+
ideSettings: {
45+
...ideSettings,
46+
settingVersion: "2.0",
47+
defaultIde: selectedIde,
48+
useLatestVersion: useLatestVersion,
49+
},
50+
},
51+
};
52+
const newUserData = await updateUser.mutateAsync(updates);
53+
setUser(newUserData);
54+
},
55+
[setUser, updateUser, user?.additionalData],
56+
);
4757

48-
const actuallySetDefaultIde = async (value: string) => {
49-
await actualUpdateUserIDEInfo(value, useLatestVersion);
50-
setDefaultIde(value);
51-
};
58+
const actuallySetDefaultIde = useCallback(
59+
async (value: string) => {
60+
await actualUpdateUserIDEInfo(value, useLatestVersion);
61+
setDefaultIde(value);
62+
},
63+
[actualUpdateUserIDEInfo, useLatestVersion],
64+
);
5265

53-
const actuallySetUseLatestVersion = async (value: boolean) => {
54-
await actualUpdateUserIDEInfo(defaultIde, value);
55-
setUseLatestVersion(value);
56-
};
66+
const actuallySetUseLatestVersion = useCallback(
67+
async (value: boolean) => {
68+
await actualUpdateUserIDEInfo(defaultIde, value);
69+
setUseLatestVersion(value);
70+
},
71+
[actualUpdateUserIDEInfo, defaultIde],
72+
);
5773

5874
//todo(ft): find a better way to group IDEs by vendor
5975
const shouldShowJetbrainsNotice = !["code", "code-desktop"].includes(defaultIde); // a really hacky way to get just JetBrains IDEs
@@ -62,9 +78,7 @@ export default function SelectIDE(props: SelectIDEProps) {
6278
<>
6379
<div className="w-112 my-4">
6480
<SelectIDEComponent
65-
onSelectionChange={async (ide) => {
66-
await actuallySetDefaultIde(ide);
67-
}}
81+
onSelectionChange={actuallySetDefaultIde}
6882
selectedIdeOption={defaultIde}
6983
useLatest={useLatestVersion}
7084
/>

0 commit comments

Comments
 (0)