11import * as vscode from "vscode" ;
22import * as fs from "fs" ;
33import * as path from "path" ;
4+ import { VscAssessmentOverview } from "../utils/messages" ;
45
5- export function setupTreeView ( ) {
6+ export let treeDataProvider : NodeDependenciesProvider ;
7+
8+ export function setupTreeView ( context : vscode . ExtensionContext ) {
69 const rootPath =
710 vscode . workspace . workspaceFolders &&
811 vscode . workspace . workspaceFolders . length > 0
912 ? vscode . workspace . workspaceFolders [ 0 ] . uri . fsPath
1013 : undefined ;
1114 console . log ( "Creating tree view" ) ;
15+ treeDataProvider = new NodeDependenciesProvider (
16+ context ,
17+ "/home/heyzec/Documents/NUS/FYP/sa-vscode" ,
18+ ) ;
1219 vscode . window . createTreeView ( "nodeDependencies" , {
13- treeDataProvider : new NodeDependenciesProvider (
14- "/home/heyzec/Documents/NUS/FYP/sa-vscode" ,
15- ) ,
20+ treeDataProvider : treeDataProvider ,
1621 } ) ;
1722}
1823
@@ -39,48 +44,67 @@ const hardcode = [
3944 [ "The Essence of the Source" , "Apr 20, 2025, 7:00 PM" ] ,
4045] ;
4146export class NodeDependenciesProvider
42- implements vscode . TreeDataProvider < Dependency | DependencyFolder >
47+ implements vscode . TreeDataProvider < BaseTreeItem >
4348{
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 ;
4560
4661 // impl
47- getTreeItem ( element : Dependency ) : vscode . TreeItem {
62+ getTreeItem ( element : BaseTreeItem ) : vscode . TreeItem {
4863 return element ;
4964 }
5065
5166 // impl
52- getChildren (
53- element ?: Dependency ,
54- ) : Thenable < ( Dependency | DependencyFolder ) [ ] > {
67+ getChildren ( element ?: BaseTreeItem ) : Thenable < BaseTreeItem [ ] > {
5568 if ( ! element ) {
5669 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" ) ,
7273 ] ) ;
7374 }
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+ // );
84108
85109 // console.log("Attempt to child")
86110 // if (!this.workspaceRoot) {
@@ -110,6 +134,10 @@ export class NodeDependenciesProvider
110134 // }
111135 }
112136
137+ refresh ( ) {
138+ this . _onDidChangeTreeData . fire ( ) ;
139+ }
140+
113141 /**
114142 * Given the path to package.json, read all its dependencies and devDependencies.
115143 */
@@ -163,15 +191,14 @@ export class NodeDependenciesProvider
163191 }
164192}
165193
166- class DependencyFolder extends vscode . TreeItem {
194+ class BaseTreeItem extends vscode . TreeItem {
195+ type ?: string ;
196+
167197 constructor (
168198 public readonly label : string ,
169- private version : string ,
170199 public readonly collapsibleState : vscode . TreeItemCollapsibleState ,
171200 ) {
172201 super ( label , collapsibleState ) ;
173- this . tooltip = `${ this . label } -${ this . version } ` ;
174- this . description = this . version ;
175202 }
176203
177204 iconPath = {
@@ -180,6 +207,24 @@ class DependencyFolder extends vscode.TreeItem {
180207 } ;
181208}
182209
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+
183228class Dependency extends vscode . TreeItem {
184229 constructor (
185230 public readonly label : string ,
0 commit comments