tree trait model change events should only fire if collection actually changes

fixes #72965
This commit is contained in:
Joao Moreno 2019-05-06 14:41:40 +02:00 committed by João Moreno
parent 9ce42976fb
commit 33876f102b

View file

@ -789,12 +789,18 @@ class Trait<T> {
return;
}
this._set(nodes, false, browserEvent);
}
private _set(nodes: ITreeNode<T, any>[], silent: boolean, browserEvent?: UIEvent): void {
this.nodes = [...nodes];
this.elements = undefined;
this._nodeSet = undefined;
const that = this;
this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent });
if (!silent) {
const that = this;
this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent });
}
}
get(): T[] {
@ -827,6 +833,7 @@ class Trait<T> {
insertedNodes.forEach(node => dfs(node, insertedNodesVisitor));
const nodes: ITreeNode<T, any>[] = [];
let silent = true;
for (const node of this.nodes) {
const id = this.identityProvider.getId(node.element).toString();
@ -839,11 +846,13 @@ class Trait<T> {
if (insertedNode) {
nodes.push(insertedNode);
} else {
silent = false;
}
}
}
this.set(nodes);
this._set(nodes, silent);
}
private createNodeSet(): Set<ITreeNode<T, any>> {