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" ;
88import { UserContext } from "../user-context" ;
99import CheckBox from "../components/CheckBox" ;
1010import { User } from "@gitpod/gitpod-protocol" ;
@@ -14,7 +14,6 @@ import { useUpdateCurrentUserMutation } from "../data/current-user/update-mutati
1414
1515export type IDEChangedTrackLocation = "workspace_list" | "workspace_start" | "preferences" ;
1616interface SelectIDEProps {
17- updateUserContext ?: boolean ;
1817 location : IDEChangedTrackLocation ;
1918}
2019
@@ -33,27 +32,43 @@ 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+ 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+ ) ;
4756
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+ ) ;
5264
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+ ) ;
5772
5873 //todo(ft): find a better way to group IDEs by vendor
5974 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) {
6277 < >
6378 < div className = "w-112 my-4" >
6479 < SelectIDEComponent
65- onSelectionChange = { async ( ide ) => {
66- await actuallySetDefaultIde ( ide ) ;
67- } }
80+ onSelectionChange = { actuallySetDefaultIde }
6881 selectedIdeOption = { defaultIde }
6982 useLatest = { useLatestVersion }
7083 />
0 commit comments