Skip to content

Commit 44cc8e0

Browse files
committed
Make workspaces refresh load new workspaces
Currently the refresh button does exactly nothing. This will also let us load new workspaces in other cases, like when logging in or out.
1 parent b921eb9 commit 44cc8e0

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed

src/extension.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ export async function activate(ctx: vscode.ExtensionContext): Promise<void> {
138138
commands.navigateToWorkspaceSettings.bind(commands),
139139
)
140140
vscode.commands.registerCommand("coder.refreshWorkspaces", () => {
141-
myWorkspacesProvider.refresh()
142-
allWorkspacesProvider.refresh()
141+
myWorkspacesProvider.fetchAndRefresh()
142+
allWorkspacesProvider.fetchAndRefresh()
143143
})
144144

145145
// Since the "onResolveRemoteAuthority:ssh-remote" activation event exists

src/workspacesProvider.ts

+24-25
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)