@@ -34,10 +34,14 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
3434 > ( ) ;
3535 private revealMap = new Map < string , PythonEnvTreeItem > ( ) ;
3636 private managerViews = new Map < string , EnvManagerTreeItem > ( ) ;
37+ private groupViews = new Map < string , PythonGroupEnvTreeItem > ( ) ;
3738 private selected : Map < string , string > = new Map ( ) ;
3839 private disposables : Disposable [ ] = [ ] ;
3940
40- public constructor ( public providers : EnvironmentManagers , private stateManager : ITemporaryStateManager ) {
41+ public constructor (
42+ public providers : EnvironmentManagers ,
43+ private stateManager : ITemporaryStateManager ,
44+ ) {
4145 this . treeView = window . createTreeView < EnvTreeItem > ( 'env-managers' , {
4246 treeDataProvider : this ,
4347 } ) ;
@@ -46,6 +50,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
4650 new Disposable ( ( ) => {
4751 this . revealMap . clear ( ) ;
4852 this . managerViews . clear ( ) ;
53+ this . groupViews . clear ( ) ;
4954 this . selected . clear ( ) ;
5055 } ) ,
5156 this . treeView ,
@@ -107,6 +112,7 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
107112 if ( ! element ) {
108113 const views : EnvTreeItem [ ] = [ ] ;
109114 this . managerViews . clear ( ) ;
115+ this . groupViews . clear ( ) ;
110116 this . providers . managers . forEach ( ( m ) => {
111117 const view = new EnvManagerTreeItem ( m ) ;
112118 views . push ( view ) ;
@@ -137,7 +143,10 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
137143 } ) ;
138144
139145 groupObjects . forEach ( ( group ) => {
140- views . push ( new PythonGroupEnvTreeItem ( element as EnvManagerTreeItem , group ) ) ;
146+ const groupView = new PythonGroupEnvTreeItem ( element as EnvManagerTreeItem , group ) ;
147+ const groupName = typeof group === 'string' ? group : group . name ;
148+ this . groupViews . set ( `${ manager . id } :${ groupName } ` , groupView ) ;
149+ views . push ( groupView ) ;
141150 } ) ;
142151
143152 if ( views . length === 0 ) {
@@ -202,12 +211,47 @@ export class EnvManagerView implements TreeDataProvider<EnvTreeItem>, Disposable
202211 return element . parent ;
203212 }
204213
205- reveal ( environment ?: PythonEnvironment ) {
206- const view = environment ? this . revealMap . get ( environment . envId . id ) : undefined ;
214+ /**
215+ * Reveals and focuses on the given environment in the Environment Managers view.
216+ *
217+ * @param environment - The Python environment to reveal
218+ */
219+ async reveal ( environment ?: PythonEnvironment ) : Promise < void > {
220+ if ( ! environment ) {
221+ return ;
222+ }
223+
224+ const manager = this . providers . getEnvironmentManager ( environment ) ;
225+ if ( ! manager ) {
226+ return ;
227+ }
228+
229+ if ( ! this . managerViews . has ( manager . id ) ) {
230+ await this . getChildren ( undefined ) ;
231+ }
232+
233+ const managerView = this . managerViews . get ( manager . id ) ;
234+ if ( ! managerView ) {
235+ return ;
236+ }
237+
238+ const groupName = typeof environment . group === 'string' ? environment . group : environment . group ?. name ;
239+ if ( groupName ) {
240+ if ( ! this . groupViews . has ( `${ manager . id } :${ groupName } ` ) ) {
241+ await this . getChildren ( managerView ) ;
242+ }
243+
244+ const groupView = this . groupViews . get ( `${ manager . id } :${ groupName } ` ) ;
245+ if ( groupView ) {
246+ await this . getChildren ( groupView ) ;
247+ }
248+ } else {
249+ await this . getChildren ( managerView ) ;
250+ }
251+
252+ const view = this . revealMap . get ( environment . envId . id ) ;
207253 if ( view && this . treeView . visible ) {
208- setImmediate ( async ( ) => {
209- await this . treeView . reveal ( view ) ;
210- } ) ;
254+ await this . treeView . reveal ( view , { expand : false , focus : true , select : true } ) ;
211255 }
212256 }
213257
0 commit comments