1
1
import * as vscode from "vscode" ;
2
2
import * as fs from "fs" ;
3
3
import * as path from "path" ;
4
+ import { VscAssessmentOverview } from "../utils/messages" ;
4
5
5
- export function setupTreeView ( ) {
6
+ export let treeDataProvider : NodeDependenciesProvider ;
7
+
8
+ export function setupTreeView ( context : vscode . ExtensionContext ) {
6
9
const rootPath =
7
10
vscode . workspace . workspaceFolders &&
8
11
vscode . workspace . workspaceFolders . length > 0
9
12
? vscode . workspace . workspaceFolders [ 0 ] . uri . fsPath
10
13
: undefined ;
11
14
console . log ( "Creating tree view" ) ;
15
+ treeDataProvider = new NodeDependenciesProvider (
16
+ context ,
17
+ "/home/heyzec/Documents/NUS/FYP/sa-vscode" ,
18
+ ) ;
12
19
vscode . window . createTreeView ( "nodeDependencies" , {
13
- treeDataProvider : new NodeDependenciesProvider (
14
- "/home/heyzec/Documents/NUS/FYP/sa-vscode" ,
15
- ) ,
20
+ treeDataProvider : treeDataProvider ,
16
21
} ) ;
17
22
}
18
23
@@ -39,48 +44,67 @@ const hardcode = [
39
44
[ "The Essence of the Source" , "Apr 20, 2025, 7:00 PM" ] ,
40
45
] ;
41
46
export class NodeDependenciesProvider
42
- implements vscode . TreeDataProvider < Dependency | DependencyFolder >
47
+ implements vscode . TreeDataProvider < BaseTreeItem >
43
48
{
44
- constructor ( private workspaceRoot : string ) { }
49
+ constructor (
50
+ private context : vscode . ExtensionContext ,
51
+ private workspaceRoot : string ,
52
+ ) { }
53
+
54
+ private _onDidChangeTreeData : vscode . EventEmitter <
55
+ BaseTreeItem | undefined | null | void
56
+ > = new vscode . EventEmitter < BaseTreeItem | undefined | null | void > ( ) ;
57
+ readonly onDidChangeTreeData : vscode . Event <
58
+ BaseTreeItem | undefined | null | void
59
+ > = this . _onDidChangeTreeData . event ;
45
60
46
61
// impl
47
- getTreeItem ( element : Dependency ) : vscode . TreeItem {
62
+ getTreeItem ( element : BaseTreeItem ) : vscode . TreeItem {
48
63
return element ;
49
64
}
50
65
51
66
// impl
52
- getChildren (
53
- element ?: Dependency ,
54
- ) : Thenable < ( Dependency | DependencyFolder ) [ ] > {
67
+ getChildren ( element ?: BaseTreeItem ) : Thenable < BaseTreeItem [ ] > {
55
68
if ( ! element ) {
56
69
return Promise . resolve ( [
57
- new DependencyFolder (
58
- "Missions" ,
59
- "" ,
60
- vscode . TreeItemCollapsibleState . Expanded ,
61
- ) ,
62
- new DependencyFolder (
63
- "Quests" ,
64
- "" ,
65
- vscode . TreeItemCollapsibleState . Collapsed ,
66
- ) ,
67
- new DependencyFolder (
68
- "Path" ,
69
- "" ,
70
- vscode . TreeItemCollapsibleState . Collapsed ,
71
- ) ,
70
+ new AssessmentFolder ( "Missions" ) ,
71
+ new AssessmentFolder ( "Quests" ) ,
72
+ new AssessmentFolder ( "Path" ) ,
72
73
] ) ;
73
74
}
74
- return Promise . resolve (
75
- hardcode . map (
76
- ( entry ) =>
77
- new Dependency (
78
- entry [ 0 ] ,
79
- entry [ 1 ] ,
80
- vscode . TreeItemCollapsibleState . None ,
81
- ) ,
82
- ) ,
83
- ) ;
75
+
76
+ if ( element && element . type === "AssessmentFolder" ) {
77
+ // element: typeof AssessmentFolder = element as AssessmentFolder;
78
+ const elem = element as AssessmentFolder ;
79
+
80
+ // @ts -ignore
81
+ const assessmentOverviews : VscAssessmentOverview [ ] =
82
+ this . context . globalState . get ( "assessmentOverviews" ) ;
83
+
84
+ console . log ( "=============OA" ) ;
85
+ console . log ( assessmentOverviews ) ;
86
+ return Promise . resolve (
87
+ assessmentOverviews
88
+ . filter ( ( oa ) => oa . type == elem . assessmentType )
89
+ . map ( ( oa ) => {
90
+ const label = oa . title ;
91
+ const version = oa . closeAt ;
92
+ const collapsibleState = vscode . TreeItemCollapsibleState . Collapsed ;
93
+ return new AssessmentOverview ( oa ) ;
94
+ } ) ,
95
+ ) ;
96
+ }
97
+ return Promise . resolve ( [ ] ) ;
98
+ // return Promise.resolve(
99
+ // hardcode.map(
100
+ // (entry) =>
101
+ // new Dependency(
102
+ // entry[0],
103
+ // entry[1],
104
+ // vscode.TreeItemCollapsibleState.None,
105
+ // ),
106
+ // ),
107
+ // );
84
108
85
109
// console.log("Attempt to child")
86
110
// if (!this.workspaceRoot) {
@@ -110,6 +134,10 @@ export class NodeDependenciesProvider
110
134
// }
111
135
}
112
136
137
+ refresh ( ) {
138
+ this . _onDidChangeTreeData . fire ( ) ;
139
+ }
140
+
113
141
/**
114
142
* Given the path to package.json, read all its dependencies and devDependencies.
115
143
*/
@@ -163,15 +191,14 @@ export class NodeDependenciesProvider
163
191
}
164
192
}
165
193
166
- class DependencyFolder extends vscode . TreeItem {
194
+ class BaseTreeItem extends vscode . TreeItem {
195
+ type ?: string ;
196
+
167
197
constructor (
168
198
public readonly label : string ,
169
- private version : string ,
170
199
public readonly collapsibleState : vscode . TreeItemCollapsibleState ,
171
200
) {
172
201
super ( label , collapsibleState ) ;
173
- this . tooltip = `${ this . label } -${ this . version } ` ;
174
- this . description = this . version ;
175
202
}
176
203
177
204
iconPath = {
@@ -180,6 +207,24 @@ class DependencyFolder extends vscode.TreeItem {
180
207
} ;
181
208
}
182
209
210
+ class AssessmentFolder extends BaseTreeItem {
211
+ constructor ( public readonly assessmentType : string ) {
212
+ super ( assessmentType , vscode . TreeItemCollapsibleState . Collapsed ) ;
213
+ this . type = "AssessmentFolder" ;
214
+ // this.tooltip = `${this.label}-${this.version}`;
215
+ // this.description = this.version;
216
+ }
217
+ }
218
+
219
+ class AssessmentOverview extends BaseTreeItem {
220
+ constructor ( assessmentOverview : VscAssessmentOverview ) {
221
+ super ( assessmentOverview . title , vscode . TreeItemCollapsibleState . None ) ;
222
+ this . type = "AssessmentOverview" ;
223
+ this . description = assessmentOverview . closeAt ;
224
+ // this.tooltip = `${this.label}-${this.version}`;
225
+ }
226
+ }
227
+
183
228
class Dependency extends vscode . TreeItem {
184
229
constructor (
185
230
public readonly label : string ,
0 commit comments