1+ import * as vscode from 'vscode'
2+
3+ const tree = {
4+ 'level1Id' :{
5+ 'stage1Id' :{ } ,
6+ 'stage2Id' :{ } ,
7+ } ,
8+ 'level2Id' :{
9+ 'l2s1' :{ } ,
10+ 'l2s2' :{ }
11+ }
12+ }
13+
14+ function getChildren ( key :string ) :string [ ] {
15+ if ( ! key ) {
16+ return Object . keys ( tree ) ;
17+ }
18+ let treeElement = getTreeElement ( key ) ;
19+ if ( treeElement ) {
20+ return Object . values ( treeElement ) ;
21+ }
22+ return [ ] ;
23+ }
24+
25+ function getTreeItem ( key :string ) :vscode . TreeItem {
26+ const treeElement = getTreeElement ( key ) ;
27+ return {
28+ label :key ,
29+ tooltip :`Tooltip for${ key } ` ,
30+ collapsibleState :treeElement && Object . keys ( treeElement ) . length ?vscode . TreeItemCollapsibleState . Collapsed :vscode . TreeItemCollapsibleState . None
31+ } ;
32+ }
33+
34+ function getTreeElement ( element :any ) :any {
35+ let parent = tree ;
36+ const levels = Object . keys ( parent )
37+
38+ if ( levels . includes ( element ) ) {
39+ return Object . keys ( parent [ element ] )
40+ } else {
41+ return null
42+ }
43+ }
44+
45+ function getNode ( key :string ) :{ key :string } {
46+ if ( ! nodes [ key ] ) {
47+ nodes [ key ] = new Key ( key ) ;
48+ }
49+ return nodes [ key ] ;
50+ }
51+
52+ export class TestView {
53+
54+ constructor ( context :vscode . ExtensionContext ) {
55+ const view = vscode . window . createTreeView ( 'progress' , {
56+ treeDataProvider :aNodeWithIdTreeDataProvider ( ) ,
57+ showCollapseAll :true
58+ } ) ;
59+ // vscode.commands.registerCommand('progress.reveal', async () => {
60+ // const key = await vscode.window.showInputBox({ placeHolder: 'Type the label of the item to reveal' });
61+ // if (key) {
62+ // await view.reveal({ key }, { focus: true, select: false, expand: true });
63+ // }
64+ // });
65+ }
66+ }
67+
68+ let nodes = { } ;
69+
70+ function aNodeWithIdTreeDataProvider ( ) :vscode . TreeDataProvider < { key :string } > {
71+ return {
72+ getChildren :( element :{ key :string } ) :{ key :string } [ ] => {
73+ return getChildren ( element ?element . key :'' ) . map ( ( key :string ) => getNode ( key ) ) ;
74+ } ,
75+ getTreeItem :( element :{ key :string } ) :vscode . TreeItem => {
76+ const treeItem = getTreeItem ( element . key ) ;
77+ treeItem . id = element . key ;
78+ return treeItem ;
79+ } ,
80+ getParent :( { key} :{ key :string } ) :{ key :string } | undefined => {
81+ return new Key ( key )
82+ }
83+ } ;
84+ }
85+
86+
87+
88+ class Key {
89+ constructor ( readonly key :string ) { }
90+ }