Fix refreshing nodes in Azure view (#9215)

* Fix refreshing nodes in Azure view

* refactor

* Remove refreshNode from shim

* Add missing await
This commit is contained in:
Charles Gagnon
2020-02-19 16:55:17 -08:00
committed by GitHub
parent 1d0f76d26a
commit 7eef23f232
2 changed files with 15 additions and 13 deletions

View File

@@ -698,26 +698,28 @@ class TreeDataSource implements IAsyncDataSource<ITreeItem, ITreeItem> {
return this.treeView.dataProvider && node.collapsibleState !== TreeItemCollapsibleState.None; return this.treeView.dataProvider && node.collapsibleState !== TreeItemCollapsibleState.None;
} }
getChildren(node: ITreeItem): Promise<any[]> { async getChildren(node: ITreeItem): Promise<any[]> {
if (node.childProvider) { if (node.childProvider) {
return this.withProgress(this.objectExplorerService.getChildren(node, this.id)).catch(e => { try {
return await this.withProgress(this.objectExplorerService.getChildren(node, this.id));
} catch (err) {
// if some error is caused we assume something tangently happened // if some error is caused we assume something tangently happened
// i.e the user could retry if they wanted. // i.e the user could retry if they wanted.
// So in order to enable this we need to tell the tree to refresh this node so it will ask us for the data again // So in order to enable this we need to tell the tree to refresh this node so it will ask us for the data again
setTimeout(() => { setTimeout(() => {
this.treeView.collapse(node); this.treeView.collapse(node);
if (e instanceof UserCancelledConnectionError) { if (err instanceof UserCancelledConnectionError) {
return; return;
} }
this.treeView.refresh([node]); this.treeView.refresh([node]);
}); });
return []; return [];
}); }
} }
if (this.treeView.dataProvider) { if (this.treeView.dataProvider) {
return this.withProgress(this.treeView.dataProvider.getChildren(node)); return await this.withProgress(this.treeView.dataProvider.getChildren(node));
} }
return Promise.resolve([]); return [];
} }
} }

View File

@@ -130,19 +130,19 @@ export class OEShimService extends Disposable implements IOEShimService {
public async getChildren(node: ITreeItem, viewId: string): Promise<ITreeItem[]> { public async getChildren(node: ITreeItem, viewId: string): Promise<ITreeItem[]> {
if (node.payload) { if (node.payload) {
let sessionId = await this.getOrCreateSession(viewId, node); const sessionId = await this.getOrCreateSession(viewId, node);
let requestHandle = this.nodeHandleMap.get(generateNodeMapKey(viewId, node)) || node.handle; const requestHandle = this.nodeHandleMap.get(generateNodeMapKey(viewId, node)) || node.handle;
let treeNode = new TreeNode(undefined, undefined, undefined, requestHandle, undefined, undefined, undefined, undefined, undefined, undefined); const treeNode = new TreeNode(undefined, undefined, undefined, requestHandle, undefined, undefined, undefined, undefined, undefined, undefined);
treeNode.connection = new ConnectionProfile(this.capabilities, node.payload); treeNode.connection = new ConnectionProfile(this.capabilities, node.payload);
return this.oe.resolveTreeNodeChildren({ const childrenNodes = await this.oe.refreshTreeNode({
success: undefined, success: undefined,
sessionId, sessionId,
rootNode: undefined, rootNode: undefined,
errorMessage: undefined errorMessage: undefined
}, treeNode).then(e => e.map(n => this.treeNodeToITreeItem(viewId, n, node))); }, treeNode);
} else { return childrenNodes.map(n => this.treeNodeToITreeItem(viewId, n, node));
return Promise.resolve([]);
} }
return [];
} }
private treeNodeToITreeItem(viewId: string, node: TreeNode, parentNode: ITreeItem): ITreeItem { private treeNodeToITreeItem(viewId: string, node: TreeNode, parentNode: ITreeItem): ITreeItem {