From cce8a050d2aeab05f38d19224147f4fd37e00e99 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 30 Jan 2019 15:43:49 +0100 Subject: [PATCH] async data tree should prevent updateChildren, expand, before input is resolved --- src/vs/base/browser/ui/tree/asyncDataTree.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index bfcb32022e6..2485cf1bd9e 100644 --- a/src/vs/base/browser/ui/tree/asyncDataTree.ts +++ b/src/vs/base/browser/ui/tree/asyncDataTree.ts @@ -401,6 +401,11 @@ export class AsyncDataTree implements IDisposable throw new Error('Tree input not set'); } + if (this.root.state === AsyncDataTreeNodeState.Loading) { + await this.subTreeRefreshPromises.get(this.root)!; + await Event.toPromise(this._onDidRender.event); + } + await this.refreshAndRenderNode(this.getDataNode(element), recursive, ChildrenResolutionReason.Refresh, viewStateContext); } @@ -430,6 +435,15 @@ export class AsyncDataTree implements IDisposable } async expand(element: T, recursive: boolean = false): Promise { + if (typeof this.root.element === 'undefined') { + throw new Error('Tree input not set'); + } + + if (this.root.state === AsyncDataTreeNodeState.Loading) { + await this.subTreeRefreshPromises.get(this.root)!; + await Event.toPromise(this._onDidRender.event); + } + const node = this.getDataNode(element); if (node !== this.root && node.state !== AsyncDataTreeNodeState.Loading && !this.tree.isCollapsed(node)) { -- GitLab