Skip to content

Commit 61b16f2

Browse files
committed
1 parent d88425e commit 61b16f2

4 files changed

Lines changed: 19 additions & 2 deletions

File tree

src/vs/base/browser/ui/tree/abstractTree.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ class TypeFilterController<T, TFilterData> implements IDisposable {
359359

360360
constructor(
361361
private tree: AbstractTree<T, TFilterData, any>,
362+
model: ITreeModel<T, TFilterData, any>,
362363
private view: List<ITreeNode<T, TFilterData>>,
363364
private filter: TypeFilter<T>,
364365
private keyboardNavigationLabelProvider: IKeyboardNavigationLabelProvider<T>
@@ -383,6 +384,8 @@ class TypeFilterController<T, TFilterData> implements IDisposable {
383384
this.clearDomNode.tabIndex = -1;
384385
this.clearDomNode.title = localize('clear', "Clear");
385386

387+
model.onDidSplice(this.onDidSpliceModel, this, this.disposables);
388+
386389
tree.onDidUpdateOptions(this.onDidUpdateTreeOptions, this, this.disposables);
387390
this.onDidUpdateTreeOptions(tree.options);
388391
}
@@ -524,6 +527,11 @@ class TypeFilterController<T, TFilterData> implements IDisposable {
524527
disposables.push(toDisposable(() => StaticDND.CurrentDragAndDropData = undefined));
525528
}
526529

530+
private onDidSpliceModel(): void {
531+
this.tree.refilter();
532+
this.updateMessage();
533+
}
534+
527535
private onDidChangeFilterOnType(): void {
528536
this.tree.updateOptions({ filterOnType: this.filterOnTypeDomNode.checked });
529537
this.tree.refilter();
@@ -660,7 +668,7 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
660668
}
661669

662670
if (_options.keyboardNavigationLabelProvider) {
663-
const typeFilterController = new TypeFilterController(this, this.view, filter as TypeFilter<T>, _options.keyboardNavigationLabelProvider);
671+
const typeFilterController = new TypeFilterController(this, this.model, this.view, filter as TypeFilter<T>, _options.keyboardNavigationLabelProvider);
664672
this.focusNavigationFilter = node => !typeFilterController.pattern || !FuzzyScore.isDefault(node.filterData as any as FuzzyScore); // TODO@joao
665673
this.disposables.push(typeFilterController);
666674
}

src/vs/base/browser/ui/tree/indexTreeModel.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ export class IndexTreeModel<T extends Exclude<any, undefined>, TFilterData = voi
6161
private filter?: ITreeFilter<T, TFilterData>;
6262
private autoExpandSingleChildren: boolean;
6363

64+
private _onDidSplice = new Emitter<void>();
65+
readonly onDidSplice = this._onDidSplice.event;
66+
6467
constructor(private list: ISpliceable<ITreeNode<T, TFilterData>>, rootElement: T, options: IIndexTreeModelOptions<T, TFilterData> = {}) {
6568
this.collapseByDefault = typeof options.collapseByDefault === 'undefined' ? false : options.collapseByDefault;
6669
this.filter = options.filter;
@@ -123,7 +126,9 @@ export class IndexTreeModel<T extends Exclude<any, undefined>, TFilterData = voi
123126
deletedNodes.forEach(visit);
124127
}
125128

126-
return Iterator.map(Iterator.fromArray(deletedNodes), treeNodeToElement);
129+
const result = Iterator.map(Iterator.fromArray(deletedNodes), treeNodeToElement);
130+
this._onDidSplice.fire(undefined);
131+
return result;
127132
}
128133

129134
refresh(location: number[]): void {

src/vs/base/browser/ui/tree/objectTreeModel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ export class ObjectTreeModel<T extends NonNullable<any>, TFilterData extends Non
2121
private nodes = new Map<T | null, ITreeNode<T, TFilterData>>();
2222
private sorter?: ITreeSorter<ITreeElement<T>>;
2323

24+
readonly onDidSplice: Event<void>;
2425
readonly onDidChangeCollapseState: Event<ICollapseStateChangeEvent<T, TFilterData>>;
2526
readonly onDidChangeRenderNodeCount: Event<ITreeNode<T, TFilterData>>;
2627

2728
get size(): number { return this.nodes.size; }
2829

2930
constructor(list: ISpliceable<ITreeNode<T, TFilterData>>, options: IObjectTreeModelOptions<T, TFilterData> = {}) {
3031
this.model = new IndexTreeModel(list, null, options);
32+
this.onDidSplice = this.model.onDidSplice;
3133
this.onDidChangeCollapseState = this.model.onDidChangeCollapseState as Event<ICollapseStateChangeEvent<T, TFilterData>>;
3234
this.onDidChangeRenderNodeCount = this.model.onDidChangeRenderNodeCount as Event<ITreeNode<T, TFilterData>>;
3335

src/vs/base/browser/ui/tree/tree.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ export interface ICollapseStateChangeEvent<T, TFilterData> {
9797

9898
export interface ITreeModel<T, TFilterData, TRef> {
9999
readonly rootRef: TRef;
100+
101+
readonly onDidSplice: Event<void>;
100102
readonly onDidChangeCollapseState: Event<ICollapseStateChangeEvent<T, TFilterData>>;
101103
readonly onDidChangeRenderNodeCount: Event<ITreeNode<T, TFilterData>>;
102104

0 commit comments

Comments
 (0)