@@ -16,39 +16,38 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
1616 private agentMetadata : Record < WorkspaceAgent [ "id" ] , AgentMetadataEvent [ ] > = { }
1717
1818 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 )
4439 } )
40+ }
41+ this . workspaces = workspacesTreeItem
42+ this . refresh ( )
4543 }
4644
4745 private _onDidChangeTreeData : vscode . EventEmitter < vscode . TreeItem | undefined | null | void > =
4846 new vscode . EventEmitter < vscode . TreeItem | undefined | null | void > ( )
4947 readonly onDidChangeTreeData : vscode . Event < vscode . TreeItem | undefined | null | void > =
5048 this . _onDidChangeTreeData . event
5149
50+ // refresh causes the tree to re-render. It does not fetch fresh workspaces.
5251 refresh ( item : vscode . TreeItem | undefined | null | void ) : void {
5352 this . _onDidChangeTreeData . fire ( item )
5453 }
0 commit comments