-
-
Notifications
You must be signed in to change notification settings - Fork 86
/
Copy pathStaticTreeDataProvider.ts
56 lines (48 loc) · 1.66 KB
/
StaticTreeDataProvider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import {
Disposable,
ExplicitDataSource,
TreeDataProvider,
TreeItem,
TreeItemIndex,
} from '../types';
import { EventEmitter } from '../EventEmitter';
export class StaticTreeDataProvider<T = any> implements TreeDataProvider {
private data: ExplicitDataSource;
/** Emit an event with the changed item ids to notify the tree view about changes. */
public readonly onDidChangeTreeDataEmitter = new EventEmitter<
TreeItemIndex[]
>();
private setItemName?: (item: TreeItem<T>, newName: string) => TreeItem<T>;
constructor(
items: Record<TreeItemIndex, TreeItem<T>>,
setItemName?: (item: TreeItem<T>, newName: string) => TreeItem<T>
// private implicitItemOrdering?: (itemA: TreeItem<T>, itemB: TreeItem<T>) => number,
) {
this.data = { items };
this.setItemName = setItemName;
}
public async getTreeItem(itemId: TreeItemIndex): Promise<TreeItem> {
return this.data.items[itemId];
}
public async onChangeItemChildren(
itemId: TreeItemIndex,
newChildren: TreeItemIndex[]
): Promise<void> {
this.data.items[itemId].children = newChildren;
this.onDidChangeTreeDataEmitter.emit([itemId]);
}
public onDidChangeTreeData(
listener: (changedItemIds: TreeItemIndex[]) => void
): Disposable {
const handlerId = this.onDidChangeTreeDataEmitter.on(payload =>
listener(payload)
);
return { dispose: () => this.onDidChangeTreeDataEmitter.off(handlerId) };
}
public async onRenameItem(item: TreeItem<any>, name: string): Promise<void> {
if (this.setItemName) {
this.data.items[item.index] = this.setItemName(item, name);
// this.onDidChangeTreeDataEmitter.emit(item.index);
}
}
}