From acf2dffb8fdfec589a4330d9845ee22db95e129f Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Mon, 28 Oct 2019 15:30:47 +0100 Subject: [PATCH] fixes #83211 --- src/vs/base/browser/ui/tree/indexTreeModel.ts | 1 + .../browser/ui/tree/indexTreeModel.test.ts | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/vs/base/browser/ui/tree/indexTreeModel.ts b/src/vs/base/browser/ui/tree/indexTreeModel.ts index 8616d00e8cd..c7f287e873b 100644 --- a/src/vs/base/browser/ui/tree/indexTreeModel.ts +++ b/src/vs/base/browser/ui/tree/indexTreeModel.ts @@ -442,6 +442,7 @@ export class IndexTreeModel, TFilterData = voi if (visibility === TreeVisibility.Hidden) { node.visible = false; + node.renderNodeCount = 0; return false; } diff --git a/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts b/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts index e11b73ed9d8..d1914e5584f 100644 --- a/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts +++ b/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts @@ -724,4 +724,35 @@ suite('IndexTreeModel', function () { model.refilter(); assert.deepEqual(toArray(list), ['platinum']); }); + + test('explicit hidden nodes should have renderNodeCount == 0, issue #83211', function () { + const list: ITreeNode[] = []; + let query = new RegExp(''); + const filter = new class implements ITreeFilter { + filter(element: string): boolean { + return query.test(element); + } + }; + + const model = new IndexTreeModel('test', toSpliceable(list), 'root', { filter }); + + model.splice([0], 0, [ + { element: 'a', children: [{ element: 'aa' }] }, + { element: 'b', children: [{ element: 'bb' }] } + ]); + + assert.deepEqual(toArray(list), ['a', 'aa', 'b', 'bb']); + assert.deepEqual(model.getListIndex([0]), 0); + assert.deepEqual(model.getListIndex([0, 0]), 1); + assert.deepEqual(model.getListIndex([1]), 2); + assert.deepEqual(model.getListIndex([1, 0]), 3); + + query = /b/; + model.refilter(); + assert.deepEqual(toArray(list), ['b', 'bb']); + assert.deepEqual(model.getListIndex([0]), -1); + assert.deepEqual(model.getListIndex([0, 0]), -1); + assert.deepEqual(model.getListIndex([1]), 0); + assert.deepEqual(model.getListIndex([1, 0]), 1); + }); });