Skip to content

Commit 3aa7ba1

Browse files
committed
Auto-expand when emulators are running.
Signed-off-by: Phillip Hoff <phillip@orst.edu>
1 parent b14fd22 commit 3aa7ba1

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

src/tree/durableTaskScheduler/DurableTaskSchedulerEmulatorsWorkspaceResourceModel.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@ import { TreeItem, TreeItemCollapsibleState } from "vscode";
77
import { type DurableTaskSchedulerWorkspaceResourceModel } from "./DurableTaskSchedulerWorkspaceResourceModel";
88
import { localize } from "../../localize";
99
import { treeUtils } from "../../utils/treeUtils";
10-
import {type DurableTaskSchedulerEmulatorClient } from "./DurableTaskSchedulerEmulatorClient";
10+
import {type DurableTaskSchedulerEmulator, type DurableTaskSchedulerEmulatorClient } from "./DurableTaskSchedulerEmulatorClient";
1111
import { DurableTaskSchedulerEmulatorWorkspaceResourceModel } from "./DurableTaskSchedulerEmulatorWorkspaceResourceModel";
1212
import { DurableTaskSchedulerErrorWorkspaceResourceModel } from "./DurableTaskSchedulerErrorWorkspaceResourceModel";
1313
import { parseError } from "@microsoft/vscode-azext-utils";
1414

1515
export 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

Comments
 (0)