@@ -7,18 +7,22 @@ import { TreeItem, TreeItemCollapsibleState } from "vscode";
77import { type DurableTaskSchedulerWorkspaceResourceModel } from "./DurableTaskSchedulerWorkspaceResourceModel" ;
88import { localize } from "../../localize" ;
99import { treeUtils } from "../../utils/treeUtils" ;
10- import { type DurableTaskSchedulerEmulatorClient } from "./DurableTaskSchedulerEmulatorClient" ;
10+ import { type DurableTaskSchedulerEmulator , type DurableTaskSchedulerEmulatorClient } from "./DurableTaskSchedulerEmulatorClient" ;
1111import { DurableTaskSchedulerEmulatorWorkspaceResourceModel } from "./DurableTaskSchedulerEmulatorWorkspaceResourceModel" ;
1212import { DurableTaskSchedulerErrorWorkspaceResourceModel } from "./DurableTaskSchedulerErrorWorkspaceResourceModel" ;
1313import { parseError } from "@microsoft/vscode-azext-utils" ;
1414
1515export class DurableTaskSchedulerEmulatorsWorkspaceResourceModel implements DurableTaskSchedulerWorkspaceResourceModel {
16+ private getEmulatorsTask : Promise < DurableTaskSchedulerEmulator [ ] > ;
17+
1618 constructor ( private readonly emulatorClient : DurableTaskSchedulerEmulatorClient ) {
1719 }
1820
1921 async getChildren ( ) : Promise < DurableTaskSchedulerWorkspaceResourceModel [ ] > {
22+ this . getEmulatorsTask = this . emulatorClient . getEmulators ( ) ;
23+
2024 try {
21- const emulators = await this . emulatorClient . getEmulators ( ) ;
25+ const emulators = await this . getEmulatorsTask
2226
2327 return emulators . map ( emulator => new DurableTaskSchedulerEmulatorWorkspaceResourceModel ( emulator ) ) ;
2428 }
@@ -27,8 +31,14 @@ export class DurableTaskSchedulerEmulatorsWorkspaceResourceModel implements Dura
2731 }
2832 }
2933
30- getTreeItem ( ) : TreeItem | Thenable < TreeItem > {
31- const treeItem = new TreeItem ( localize ( 'dtsEmulatorsLabel' , 'Durable Task Scheduler Emulators' ) , TreeItemCollapsibleState . Collapsed ) ;
34+ async getTreeItem ( ) : Promise < TreeItem > {
35+ this . getEmulatorsTask ??= this . emulatorClient . getEmulators ( ) ;
36+
37+ const collapsibleState = await this . emulatorsExist ( )
38+ ? TreeItemCollapsibleState . Expanded
39+ : TreeItemCollapsibleState . Collapsed ;
40+
41+ const treeItem = new TreeItem ( localize ( 'dtsEmulatorsLabel' , 'Durable Task Scheduler Emulators' ) , collapsibleState ) ;
3242
3343 treeItem . contextValue = 'azFunc.dts.emulators' ;
3444 treeItem . iconPath = treeUtils . getIconPath ( 'durableTaskScheduler/DurableTaskScheduler' ) ;
@@ -37,4 +47,24 @@ export class DurableTaskSchedulerEmulatorsWorkspaceResourceModel implements Dura
3747 }
3848
3949 id ?: string | undefined ;
50+
51+ private async emulatorsExist ( ) : Promise < boolean > {
52+ // Used any cached result that might exist...
53+ this . getEmulatorsTask ??= this . emulatorClient . getEmulators ( ) ;
54+
55+ try {
56+ await this . getEmulatorsTask ;
57+
58+ const emulators = await this . getEmulatorsTask ;
59+
60+ if ( emulators . length ) {
61+ return true ;
62+ }
63+ }
64+ catch {
65+ // NOTE: No-op.
66+ }
67+
68+ return false ;
69+ }
4070}
0 commit comments