@@ -16,39 +16,38 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
16
16
private agentMetadata : Record < WorkspaceAgent [ "id" ] , AgentMetadataEvent [ ] > = { }
17
17
18
18
constructor ( private readonly getWorkspacesQuery : WorkspaceQuery , private readonly storage : Storage ) {
19
- if ( ! storage . getURL ( ) ) {
20
- // Not logged in.
21
- return
22
- }
23
- getWorkspaces ( { q : this . getWorkspacesQuery } )
24
- . then ( ( workspaces ) => {
25
- const workspacesTreeItem : WorkspaceTreeItem [ ] = [ ]
26
- workspaces . workspaces . forEach ( ( workspace ) => {
27
- const showMetadata = this . getWorkspacesQuery === WorkspaceQuery . Mine
28
- if ( showMetadata ) {
29
- const agents = extractAgents ( workspace )
30
- agents . forEach ( ( agent ) => this . monitorMetadata ( agent . id ) ) // monitor metadata for all agents
31
- }
32
- const treeItem = new WorkspaceTreeItem (
33
- workspace ,
34
- this . getWorkspacesQuery === WorkspaceQuery . All ,
35
- showMetadata ,
36
- )
37
- workspacesTreeItem . push ( treeItem )
38
- } )
39
- return workspacesTreeItem
40
- } )
41
- . then ( ( workspaces ) => {
42
- this . workspaces = workspaces
43
- this . refresh ( )
19
+ this . fetchAndRefresh ( )
20
+ }
21
+
22
+ // fetchAndRefrehsh fetches new workspaces then re-renders the entire tree.
23
+ async fetchAndRefresh ( ) {
24
+ const workspacesTreeItem : WorkspaceTreeItem [ ] = [ ]
25
+ if ( this . storage . getURL ( ) ) { // If this is set we are logged in.
26
+ const resp = await getWorkspaces ( { q : this . getWorkspacesQuery } )
27
+ resp . workspaces . forEach ( ( workspace ) => {
28
+ const showMetadata = this . getWorkspacesQuery === WorkspaceQuery . Mine
29
+ if ( showMetadata ) {
30
+ const agents = extractAgents ( workspace )
31
+ agents . forEach ( ( agent ) => this . monitorMetadata ( agent . id ) ) // monitor metadata for all agents
32
+ }
33
+ const treeItem = new WorkspaceTreeItem (
34
+ workspace ,
35
+ this . getWorkspacesQuery === WorkspaceQuery . All ,
36
+ showMetadata ,
37
+ )
38
+ workspacesTreeItem . push ( treeItem )
44
39
} )
40
+ }
41
+ this . workspaces = workspacesTreeItem
42
+ this . refresh ( )
45
43
}
46
44
47
45
private _onDidChangeTreeData : vscode . EventEmitter < vscode . TreeItem | undefined | null | void > =
48
46
new vscode . EventEmitter < vscode . TreeItem | undefined | null | void > ( )
49
47
readonly onDidChangeTreeData : vscode . Event < vscode . TreeItem | undefined | null | void > =
50
48
this . _onDidChangeTreeData . event
51
49
50
+ // refresh causes the tree to re-render. It does not fetch fresh workspaces.
52
51
refresh ( item : vscode . TreeItem | undefined | null | void ) : void {
53
52
this . _onDidChangeTreeData . fire ( item )
54
53
}
0 commit comments