4
4
* See License.AGPL.txt in the project root for license information.
5
5
*/
6
6
7
- import { useContext , useEffect , useState } from "react" ;
7
+ import { useCallback , useContext , useEffect , useState } from "react" ;
8
8
import { UserContext } from "../user-context" ;
9
9
import CheckBox from "../components/CheckBox" ;
10
10
import { User } from "@gitpod/gitpod-protocol" ;
@@ -14,7 +14,6 @@ import { useUpdateCurrentUserMutation } from "../data/current-user/update-mutati
14
14
15
15
export type IDEChangedTrackLocation = "workspace_list" | "workspace_start" | "preferences" ;
16
16
interface SelectIDEProps {
17
- updateUserContext ?: boolean ;
18
17
location : IDEChangedTrackLocation ;
19
18
}
20
19
@@ -33,27 +32,43 @@ export default function SelectIDE(props: SelectIDEProps) {
33
32
user ?. additionalData ?. ideSettings ?. useLatestVersion ?? false ,
34
33
) ;
35
34
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 || { } ;
43
39
44
- const newUserData = await updateUser . mutateAsync ( { additionalData } ) ;
45
- props . updateUserContext && setUser ( { ...newUserData } ) ;
46
- } ;
40
+ const updates = {
41
+ additionalData : {
42
+ ...additionalData ,
43
+ ideSettings : {
44
+ ...ideSettings ,
45
+ settingVersion : "2.0" ,
46
+ defaultIde : selectedIde ,
47
+ useLatestVersion : useLatestVersion ,
48
+ } ,
49
+ } ,
50
+ } ;
51
+ const newUserData = await updateUser . mutateAsync ( updates ) ;
52
+ setUser ( newUserData ) ;
53
+ } ,
54
+ [ setUser , updateUser , user ?. additionalData ] ,
55
+ ) ;
47
56
48
- const actuallySetDefaultIde = async ( value : string ) => {
49
- await actualUpdateUserIDEInfo ( value , useLatestVersion ) ;
50
- setDefaultIde ( value ) ;
51
- } ;
57
+ const actuallySetDefaultIde = useCallback (
58
+ async ( value : string ) => {
59
+ await actualUpdateUserIDEInfo ( value , useLatestVersion ) ;
60
+ setDefaultIde ( value ) ;
61
+ } ,
62
+ [ actualUpdateUserIDEInfo , useLatestVersion ] ,
63
+ ) ;
52
64
53
- const actuallySetUseLatestVersion = async ( value : boolean ) => {
54
- await actualUpdateUserIDEInfo ( defaultIde , value ) ;
55
- setUseLatestVersion ( value ) ;
56
- } ;
65
+ const actuallySetUseLatestVersion = useCallback (
66
+ async ( value : boolean ) => {
67
+ await actualUpdateUserIDEInfo ( defaultIde , value ) ;
68
+ setUseLatestVersion ( value ) ;
69
+ } ,
70
+ [ actualUpdateUserIDEInfo , defaultIde ] ,
71
+ ) ;
57
72
58
73
//todo(ft): find a better way to group IDEs by vendor
59
74
const shouldShowJetbrainsNotice = ! [ "code" , "code-desktop" ] . includes ( defaultIde ) ; // a really hacky way to get just JetBrains IDEs
@@ -62,9 +77,7 @@ export default function SelectIDE(props: SelectIDEProps) {
62
77
< >
63
78
< div className = "w-112 my-4" >
64
79
< SelectIDEComponent
65
- onSelectionChange = { async ( ide ) => {
66
- await actuallySetDefaultIde ( ide ) ;
67
- } }
80
+ onSelectionChange = { actuallySetDefaultIde }
68
81
selectedIdeOption = { defaultIde }
69
82
useLatest = { useLatestVersion }
70
83
/>
0 commit comments