import { Disposable, ExplicitDataSource, TreeDataProvider, TreeItem, TreeItemIndex, } from '../types'; import { EventEmitter } from '../EventEmitter'; export class StaticTreeDataProvider 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, newName: string) => TreeItem; constructor( items: Record>, setItemName?: (item: TreeItem, newName: string) => TreeItem // private implicitItemOrdering?: (itemA: TreeItem, itemB: TreeItem) => number, ) { this.data = { items }; this.setItemName = setItemName; } public async getTreeItem(itemId: TreeItemIndex): Promise { return this.data.items[itemId]; } public async onChangeItemChildren( itemId: TreeItemIndex, newChildren: TreeItemIndex[] ): Promise { 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, name: string): Promise { if (this.setItemName) { this.data.items[item.index] = this.setItemName(item, name); // this.onDidChangeTreeDataEmitter.emit(item.index); } } }