Skip to content

Commit defb232

Browse files
committed
1 parent 2c76262 commit defb232

49 files changed

Lines changed: 289 additions & 234 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,10 @@ export interface IListDragAndDrop<T> {
105105
onDragOver(data: IDragAndDropData, targetElement: T | undefined, targetIndex: number | undefined, originalEvent: DragEvent): boolean | IListDragOverReaction;
106106
drop(data: IDragAndDropData, targetElement: T | undefined, targetIndex: number | undefined, originalEvent: DragEvent): void;
107107
}
108+
109+
export class ListError extends Error {
110+
111+
constructor(user: string, message: string) {
112+
super(`ListError [${user}] ${message}`);
113+
}
114+
}

src/vs/base/browser/ui/list/listPaging.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,14 @@ export class PagedList<T> implements IDisposable {
7676
private _model!: IPagedModel<T>;
7777

7878
constructor(
79+
user: string,
7980
container: HTMLElement,
8081
virtualDelegate: IListVirtualDelegate<number>,
8182
renderers: IPagedRenderer<T, any>[],
8283
options: IListOptions<any> = {}
8384
) {
8485
const pagedRenderers = renderers.map(r => new PagedRenderer<T, ITemplateData<T>>(r, () => this.model));
85-
this.list = new List(container, virtualDelegate, pagedRenderers, options);
86+
this.list = new List(user, container, virtualDelegate, pagedRenderers, options);
8687
}
8788

8889
getHTMLElement(): HTMLElement {

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
1616
import { StandardKeyboardEvent, IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1717
import { Event, Emitter, EventBufferer } from 'vs/base/common/event';
1818
import { domEvent } from 'vs/base/browser/event';
19-
import { IListVirtualDelegate, IListRenderer, IListEvent, IListContextMenuEvent, IListMouseEvent, IListTouchEvent, IListGestureEvent, IIdentityProvider, IKeyboardNavigationLabelProvider, IListDragAndDrop, IListDragOverReaction, ListAriaRootRole } from './list';
19+
import { IListVirtualDelegate, IListRenderer, IListEvent, IListContextMenuEvent, IListMouseEvent, IListTouchEvent, IListGestureEvent, IIdentityProvider, IKeyboardNavigationLabelProvider, IListDragAndDrop, IListDragOverReaction, ListAriaRootRole, ListError } from './list';
2020
import { ListView, IListViewOptions, IListViewDragAndDrop, IAriaProvider } from './listView';
2121
import { Color } from 'vs/base/common/color';
2222
import { mixin } from 'vs/base/common/objects';
@@ -1170,6 +1170,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
11701170
readonly onDidDispose: Event<void> = this._onDidDispose.event;
11711171

11721172
constructor(
1173+
private user: string,
11731174
container: HTMLElement,
11741175
virtualDelegate: IListVirtualDelegate<T>,
11751176
renderers: IListRenderer<any /* TODO@joao */, any>[],
@@ -1261,11 +1262,11 @@ export class List<T> implements ISpliceable<T>, IDisposable {
12611262

12621263
splice(start: number, deleteCount: number, elements: T[] = []): void {
12631264
if (start < 0 || start > this.view.length) {
1264-
throw new Error(`Invalid start index: ${start}`);
1265+
throw new ListError(this.user, `Invalid start index: ${start}`);
12651266
}
12661267

12671268
if (deleteCount < 0) {
1268-
throw new Error(`Invalid delete count: ${deleteCount}`);
1269+
throw new ListError(this.user, `Invalid delete count: ${deleteCount}`);
12691270
}
12701271

12711272
if (deleteCount === 0 && elements.length === 0) {
@@ -1348,7 +1349,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
13481349
setSelection(indexes: number[], browserEvent?: UIEvent): void {
13491350
for (const index of indexes) {
13501351
if (index < 0 || index >= this.length) {
1351-
throw new Error(`Invalid index ${index}`);
1352+
throw new ListError(this.user, `Invalid index ${index}`);
13521353
}
13531354
}
13541355

@@ -1366,7 +1367,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
13661367
setFocus(indexes: number[], browserEvent?: UIEvent): void {
13671368
for (const index of indexes) {
13681369
if (index < 0 || index >= this.length) {
1369-
throw new Error(`Invalid index ${index}`);
1370+
throw new ListError(this.user, `Invalid index ${index}`);
13701371
}
13711372
}
13721373

@@ -1518,7 +1519,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
15181519

15191520
reveal(index: number, relativeTop?: number): void {
15201521
if (index < 0 || index >= this.length) {
1521-
throw new Error(`Invalid index ${index}`);
1522+
throw new ListError(this.user, `Invalid index ${index}`);
15221523
}
15231524

15241525
const scrollTop = this.view.getScrollTop();
@@ -1547,7 +1548,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
15471548
*/
15481549
getRelativeTop(index: number): number | null {
15491550
if (index < 0 || index >= this.length) {
1550-
throw new Error(`Invalid index ${index}`);
1551+
throw new ListError(this.user, `Invalid index ${index}`);
15511552
}
15521553

15531554
const scrollTop = this.view.getScrollTop();
@@ -1574,7 +1575,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
15741575
open(indexes: number[], browserEvent?: UIEvent): void {
15751576
for (const index of indexes) {
15761577
if (index < 0 || index >= this.length) {
1577-
throw new Error(`Invalid index ${index}`);
1578+
throw new ListError(this.user, `Invalid index ${index}`);
15781579
}
15791580
}
15801581

@@ -1584,7 +1585,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
15841585
pin(indexes: number[]): void {
15851586
for (const index of indexes) {
15861587
if (index < 0 || index >= this.length) {
1587-
throw new Error(`Invalid index ${index}`);
1588+
throw new ListError(this.user, `Invalid index ${index}`);
15881589
}
15891590
}
15901591

src/vs/base/browser/ui/selectBox/selectBoxCustom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
721721

722722
this.listRenderer = new SelectListRenderer();
723723

724-
this.selectList = new List(this.selectDropDownListContainer, this, [this.listRenderer], {
724+
this.selectList = new List('SelectBoxCustom', this.selectDropDownListContainer, this, [this.listRenderer], {
725725
ariaLabel: this.selectBoxOptions.ariaLabel,
726726
useShadows: false,
727727
verticalScrollMode: ScrollbarVisibility.Visible,

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,14 +1087,15 @@ interface ITreeNodeListOptions<T, TFilterData, TRef> extends IListOptions<ITreeN
10871087
class TreeNodeList<T, TFilterData, TRef> extends List<ITreeNode<T, TFilterData>> {
10881088

10891089
constructor(
1090+
user: string,
10901091
container: HTMLElement,
10911092
virtualDelegate: IListVirtualDelegate<ITreeNode<T, TFilterData>>,
10921093
renderers: IListRenderer<any /* TODO@joao */, any>[],
10931094
private focusTrait: Trait<T>,
10941095
private selectionTrait: Trait<T>,
10951096
options: ITreeNodeListOptions<T, TFilterData, TRef>
10961097
) {
1097-
super(container, virtualDelegate, renderers, options);
1098+
super(user, container, virtualDelegate, renderers, options);
10981099
}
10991100

11001101
protected createMouseController(options: ITreeNodeListOptions<T, TFilterData, TRef>): MouseController<ITreeNode<T, TFilterData>> {
@@ -1195,6 +1196,7 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
11951196
get onDidDispose(): Event<void> { return this.view.onDidDispose; }
11961197

11971198
constructor(
1199+
user: string,
11981200
container: HTMLElement,
11991201
delegate: IListVirtualDelegate<T>,
12001202
renderers: ITreeRenderer<T, TFilterData, any>[],
@@ -1220,9 +1222,9 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
12201222

12211223
this.focus = new Trait(_options.identityProvider);
12221224
this.selection = new Trait(_options.identityProvider);
1223-
this.view = new TreeNodeList(container, treeDelegate, this.renderers, this.focus, this.selection, { ...asListOptions(() => this.model, _options), tree: this });
1225+
this.view = new TreeNodeList(user, container, treeDelegate, this.renderers, this.focus, this.selection, { ...asListOptions(() => this.model, _options), tree: this });
12241226

1225-
this.model = this.createModel(this.view, _options);
1227+
this.model = this.createModel(user, this.view, _options);
12261228
onDidChangeCollapseStateRelay.input = this.model.onDidChangeCollapseState;
12271229

12281230
this.model.onDidSplice(e => {
@@ -1586,7 +1588,7 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
15861588
this.model.setCollapsed(location, undefined, recursive);
15871589
}
15881590

1589-
protected abstract createModel(view: ISpliceable<ITreeNode<T, TFilterData>>, options: IAbstractTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, TRef>;
1591+
protected abstract createModel(user: string, view: ISpliceable<ITreeNode<T, TFilterData>>, options: IAbstractTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, TRef>;
15901592

15911593
navigate(start?: TRef): ITreeNavigator<T> {
15921594
return new TreeNavigator(this.view, this.model, start);

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { ComposedTreeDelegate, IAbstractTreeOptions, IAbstractTreeOptionsUpdate } from 'vs/base/browser/ui/tree/abstractTree';
77
import { ObjectTree, IObjectTreeOptions } from 'vs/base/browser/ui/tree/objectTree';
88
import { IListVirtualDelegate, IIdentityProvider, IListDragAndDrop, IListDragOverReaction } from 'vs/base/browser/ui/list/list';
9-
import { ITreeElement, ITreeNode, ITreeRenderer, ITreeEvent, ITreeMouseEvent, ITreeContextMenuEvent, ITreeSorter, ICollapseStateChangeEvent, IAsyncDataSource, ITreeDragAndDrop } from 'vs/base/browser/ui/tree/tree';
9+
import { ITreeElement, ITreeNode, ITreeRenderer, ITreeEvent, ITreeMouseEvent, ITreeContextMenuEvent, ITreeSorter, ICollapseStateChangeEvent, IAsyncDataSource, ITreeDragAndDrop, TreeError } from 'vs/base/browser/ui/tree/tree';
1010
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
1111
import { Emitter, Event } from 'vs/base/common/event';
1212
import { timeout, CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
@@ -339,6 +339,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
339339
get onDidDispose(): Event<void> { return this.tree.onDidDispose; }
340340

341341
constructor(
342+
private user: string,
342343
container: HTMLElement,
343344
delegate: IListVirtualDelegate<T>,
344345
renderers: ITreeRenderer<T, TFilterData, any>[],
@@ -354,7 +355,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
354355
const objectTreeRenderers = renderers.map(r => new DataTreeRenderer(r, this._onDidChangeNodeSlowState.event));
355356
const objectTreeOptions = asObjectTreeOptions<TInput, T, TFilterData>(options) || {};
356357

357-
this.tree = new ObjectTree(container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);
358+
this.tree = new ObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);
358359

359360
this.root = createAsyncDataTreeNode({
360361
element: undefined!,
@@ -464,7 +465,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
464465

465466
async updateChildren(element: TInput | T = this.root.element, recursive = true, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): Promise<void> {
466467
if (typeof this.root.element === 'undefined') {
467-
throw new Error('Tree input not set');
468+
throw new TreeError(this.user, 'Tree input not set');
468469
}
469470

470471
if (this.root.loading) {
@@ -515,7 +516,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
515516

516517
async expand(element: T, recursive: boolean = false): Promise<boolean> {
517518
if (typeof this.root.element === 'undefined') {
518-
throw new Error('Tree input not set');
519+
throw new TreeError(this.user, 'Tree input not set');
519520
}
520521

521522
if (this.root.loading) {
@@ -643,7 +644,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
643644
const node: IAsyncDataTreeNode<TInput, T> | undefined = this.nodes.get((element === this.root.element ? null : element) as T);
644645

645646
if (!node) {
646-
throw new Error(`Data tree node not found: ${element}`);
647+
throw new TreeError(this.user, `Data tree node not found: ${element}`);
647648
}
648649

649650
return node;
@@ -875,7 +876,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
875876

876877
getViewState(): IAsyncDataTreeViewState {
877878
if (!this.identityProvider) {
878-
throw new Error('Can\'t get tree view state without an identity provider');
879+
throw new TreeError(this.user, 'Can\'t get tree view state without an identity provider');
879880
}
880881

881882
const getId = (element: T) => this.identityProvider!.getId(element).toString();

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ export class CompressedObjectTree<T extends NonNullable<any>, TFilterData = void
2222
get onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidChangeCollapseState; }
2323

2424
constructor(
25+
user: string,
2526
container: HTMLElement,
2627
delegate: IListVirtualDelegate<ICompressedTreeNode<T>>,
2728
renderers: ITreeRenderer<ICompressedTreeNode<T>, TFilterData, any>[],
2829
options: IObjectTreeOptions<ICompressedTreeNode<T>, TFilterData> = {}
2930
) {
30-
super(container, delegate, renderers, options);
31+
super(user, container, delegate, renderers, options);
3132
}
3233

3334
setChildren(
@@ -50,7 +51,7 @@ export class CompressedObjectTree<T extends NonNullable<any>, TFilterData = void
5051
this.model.resort(element, recursive);
5152
}
5253

53-
protected createModel(view: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>, options: IObjectTreeOptions<ICompressedTreeNode<T>, TFilterData>): ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {
54-
return new CompressedTreeModel(view, options);
54+
protected createModel(user: string, view: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>, options: IObjectTreeOptions<ICompressedTreeNode<T>, TFilterData>): ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {
55+
return new CompressedTreeModel(user, view, options);
5556
}
5657
}

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { ISpliceable } from 'vs/base/common/sequence';
77
import { Iterator, ISequence } from 'vs/base/common/iterator';
88
import { Event } from 'vs/base/common/event';
9-
import { ITreeModel, ITreeNode, ITreeElement, ICollapseStateChangeEvent, ITreeModelSpliceEvent } from 'vs/base/browser/ui/tree/tree';
9+
import { ITreeModel, ITreeNode, ITreeElement, ICollapseStateChangeEvent, ITreeModelSpliceEvent, TreeError } from 'vs/base/browser/ui/tree/tree';
1010
import { IObjectTreeModelOptions, ObjectTreeModel, IObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel';
1111

1212
export interface ICompressedTreeElement<T> extends ITreeElement<T> {
@@ -95,8 +95,12 @@ export class CompressedTreeModel<T extends NonNullable<any>, TFilterData extends
9595

9696
get size(): number { return this.nodes.size; }
9797

98-
constructor(list: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>, options: ICompressedTreeModelOptions<T, TFilterData> = {}) {
99-
this.model = new ObjectTreeModel(list, options);
98+
constructor(
99+
private user: string,
100+
list: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>,
101+
options: ICompressedTreeModelOptions<T, TFilterData> = {}
102+
) {
103+
this.model = new ObjectTreeModel(user, list, options);
100104
}
101105

102106
setChildren(
@@ -264,7 +268,7 @@ export class CompressedTreeModel<T extends NonNullable<any>, TFilterData extends
264268
const node = this.nodes.get(element);
265269

266270
if (!node) {
267-
throw new Error(`Tree element not found: ${element}`);
271+
throw new TreeError(this.user, `Tree element not found: ${element}`);
268272
}
269273

270274
return node;
@@ -320,12 +324,13 @@ export class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData e
320324
private model: CompressedTreeModel<T, TFilterData>;
321325

322326
constructor(
327+
user: string,
323328
list: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>,
324329
options: ICompressedObjectTreeModelOptions<T, TFilterData> = {}
325330
) {
326331
this.mapElement = options.elementMapper || DefaultElementMapper;
327332
this.mapNode = createNodeMapper(this.mapElement);
328-
this.model = new CompressedTreeModel(list, options);
333+
this.model = new CompressedTreeModel(user, list, options);
329334
}
330335

331336
setChildren(
@@ -415,4 +420,4 @@ export class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData e
415420
resort(element: T | null = null, recursive = true): void {
416421
return this.model.resort(element, recursive);
417422
}
418-
}
423+
}

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree';
77
import { ISpliceable } from 'vs/base/common/sequence';
8-
import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, IDataSource } from 'vs/base/browser/ui/tree/tree';
8+
import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, IDataSource, TreeError } from 'vs/base/browser/ui/tree/tree';
99
import { ObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel';
1010
import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list';
1111
import { Iterator } from 'vs/base/common/iterator';
@@ -30,13 +30,14 @@ export class DataTree<TInput, T, TFilterData = void> extends AbstractTree<T | nu
3030
private nodesByIdentity = new Map<string, ITreeNode<T, TFilterData>>();
3131

3232
constructor(
33+
private user: string,
3334
container: HTMLElement,
3435
delegate: IListVirtualDelegate<T>,
3536
renderers: ITreeRenderer<T, TFilterData, any>[],
3637
private dataSource: IDataSource<TInput, T>,
3738
options: IDataTreeOptions<T, TFilterData> = {}
3839
) {
39-
super(container, delegate, renderers, options);
40+
super(user, container, delegate, renderers, options);
4041
this.identityProvider = options.identityProvider;
4142
}
4243

@@ -48,7 +49,7 @@ export class DataTree<TInput, T, TFilterData = void> extends AbstractTree<T | nu
4849

4950
setInput(input: TInput, viewState?: IDataTreeViewState): void {
5051
if (viewState && !this.identityProvider) {
51-
throw new Error('Can\'t restore tree view state without an identity provider');
52+
throw new TreeError(this.user, 'Can\'t restore tree view state without an identity provider');
5253
}
5354

5455
this.input = input;
@@ -89,7 +90,7 @@ export class DataTree<TInput, T, TFilterData = void> extends AbstractTree<T | nu
8990

9091
updateChildren(element: TInput | T = this.input!): void {
9192
if (typeof this.input === 'undefined') {
92-
throw new Error('Tree input not set');
93+
throw new TreeError(this.user, 'Tree input not set');
9394
}
9495

9596
let isCollapsed: ((el: T) => boolean | undefined) | undefined;
@@ -169,15 +170,15 @@ export class DataTree<TInput, T, TFilterData = void> extends AbstractTree<T | nu
169170
return { elements, size: children.length };
170171
}
171172

172-
protected createModel(view: ISpliceable<ITreeNode<T, TFilterData>>, options: IDataTreeOptions<T, TFilterData>): ITreeModel<T | null, TFilterData, T | null> {
173-
return new ObjectTreeModel(view, options);
173+
protected createModel(user: string, view: ISpliceable<ITreeNode<T, TFilterData>>, options: IDataTreeOptions<T, TFilterData>): ITreeModel<T | null, TFilterData, T | null> {
174+
return new ObjectTreeModel(user, view, options);
174175
}
175176

176177
// view state
177178

178179
getViewState(): IDataTreeViewState {
179180
if (!this.identityProvider) {
180-
throw new Error('Can\'t get tree view state without an identity provider');
181+
throw new TreeError(this.user, 'Can\'t get tree view state without an identity provider');
181182
}
182183

183184
const getId = (element: T) => this.identityProvider!.getId(element).toString();

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ export class IndexTree<T, TFilterData = void> extends AbstractTree<T, TFilterDat
1818
protected model!: IndexTreeModel<T, TFilterData>;
1919

2020
constructor(
21+
user: string,
2122
container: HTMLElement,
2223
delegate: IListVirtualDelegate<T>,
2324
renderers: ITreeRenderer<T, TFilterData, any>[],
2425
private rootElement: T,
2526
options: IIndexTreeOptions<T, TFilterData> = {}
2627
) {
27-
super(container, delegate, renderers, options);
28+
super(user, container, delegate, renderers, options);
2829
}
2930

3031
splice(location: number[], deleteCount: number, toInsert: ISequence<ITreeElement<T>> = Iterator.empty()): Iterator<ITreeElement<T>> {
@@ -40,7 +41,7 @@ export class IndexTree<T, TFilterData = void> extends AbstractTree<T, TFilterDat
4041
this.model.rerender(location);
4142
}
4243

43-
protected createModel(view: ISpliceable<ITreeNode<T, TFilterData>>, options: IIndexTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, number[]> {
44-
return new IndexTreeModel(view, this.rootElement, options);
44+
protected createModel(user: string, view: ISpliceable<ITreeNode<T, TFilterData>>, options: IIndexTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, number[]> {
45+
return new IndexTreeModel(user, view, this.rootElement, options);
4546
}
4647
}

0 commit comments

Comments
 (0)