提交 73d7889c 编写于 作者: R Rob Lourens

Allow new tree navigator to start from element

上级 e7102b18
......@@ -491,8 +491,8 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
protected abstract createModel(view: ISpliceable<ITreeNode<T, TFilterData>>, options: IAbstractTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, TRef>;
navigate(): ITreeNavigator<T> {
return new TreeNavigator(this.view, this.model);
navigate(start?: TRef): ITreeNavigator<T> {
return new TreeNavigator(this.view, this.model, start);
}
dispose(): void {
......@@ -508,9 +508,15 @@ interface ITreeNavigatorView<T extends NonNullable<any>, TFilterData> {
class TreeNavigator<T extends NonNullable<any>, TFilterData, TRef> implements ITreeNavigator<T> {
private index: number = -1;
private index: number;
constructor(private view: ITreeNavigatorView<T, TFilterData>, private model: ITreeModel<T, TFilterData, TRef>) { }
constructor(private view: ITreeNavigatorView<T, TFilterData>, private model: ITreeModel<T, TFilterData, TRef>, start?: TRef) {
if (start) {
this.index = this.model.getListIndex(start);
} else {
this.index = -1;
}
}
current(): T | null {
if (this.index < 0 || this.index >= this.view.length) {
......
......@@ -151,5 +151,38 @@ suite('ObjectTree', function () {
assert.equal(navigator.first(), 0);
assert.equal(navigator.last(), 2);
});
test('should be able to start from node', () => {
tree.setChildren(null, Iterator.fromArray([
{
element: 0, children: Iterator.fromArray([
{ element: 10 },
{ element: 11 },
{ element: 12 },
])
},
{ element: 1 },
{ element: 2 }
]));
const navigator = tree.navigate(1);
assert.equal(navigator.current(), 1);
assert.equal(navigator.next(), 2);
assert.equal(navigator.current(), 2);
assert.equal(navigator.previous(), 1);
assert.equal(navigator.current(), 1);
assert.equal(navigator.previous(), 12);
assert.equal(navigator.previous(), 11);
assert.equal(navigator.previous(), 10);
assert.equal(navigator.previous(), 0);
assert.equal(navigator.previous(), null);
assert.equal(navigator.next(), 0);
assert.equal(navigator.next(), 10);
assert.equal(navigator.parent(), 0);
assert.equal(navigator.parent(), null);
assert.equal(navigator.first(), 0);
assert.equal(navigator.last(), 2);
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册