@@ -16,39 +16,35 @@ 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 the URL is set then we are logged in.
26
+ if ( this . storage . getURL ( ) ) {
27
+ const resp = await getWorkspaces ( { q : this . getWorkspacesQuery } )
28
+ resp . workspaces . forEach ( ( workspace ) => {
29
+ const showMetadata = this . getWorkspacesQuery === WorkspaceQuery . Mine
30
+ if ( showMetadata ) {
31
+ const agents = extractAgents ( workspace )
32
+ agents . forEach ( ( agent ) => this . monitorMetadata ( agent . id ) ) // monitor metadata for all agents
33
+ }
34
+ const treeItem = new WorkspaceTreeItem ( workspace , this . getWorkspacesQuery === WorkspaceQuery . All , showMetadata )
35
+ workspacesTreeItem . push ( treeItem )
44
36
} )
37
+ }
38
+ this . workspaces = workspacesTreeItem
39
+ this . refresh ( )
45
40
}
46
41
47
42
private _onDidChangeTreeData : vscode . EventEmitter < vscode . TreeItem | undefined | null | void > =
48
43
new vscode . EventEmitter < vscode . TreeItem | undefined | null | void > ( )
49
44
readonly onDidChangeTreeData : vscode . Event < vscode . TreeItem | undefined | null | void > =
50
45
this . _onDidChangeTreeData . event
51
46
47
+ // refresh causes the tree to re-render. It does not fetch fresh workspaces.
52
48
refresh ( item : vscode . TreeItem | undefined | null | void ) : void {
53
49
this . _onDidChangeTreeData . fire ( item )
54
50
}
0 commit comments