Skip to content

Commit 9246ec2

Browse files
authored
Feat: add rocket button (#41)
1 parent b4d9e56 commit 9246ec2

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

package.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
},
2727
{
2828
"command": "source-academy.show-panel",
29-
"title": "Source Academy: Show the Source Academy panel"
29+
"title": "Source Academy: Show the Source Academy panel",
30+
"icon": "$(rocket)"
3031
},
3132
{
3233
"command": "source-academy.eval-editor",
@@ -74,11 +75,20 @@
7475
"key": "shift+enter"
7576
}
7677
],
78+
"menus": {
79+
"view/title": [
80+
{
81+
"command": "source-academy.show-panel",
82+
"when": "view == assessments",
83+
"group": "navigation"
84+
}
85+
]
86+
},
7787
"views": {
7888
"source-academy": [
7989
{
8090
"id": "assessments",
81-
"name": "Assessments",
91+
"name": "",
8292
"icon": "assets/icon.svg",
8393
"contextualTitle": "Source Academy"
8494
}

src/treeview/index.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ export class AssessmentsSidebarProvider
3333
}
3434

3535
getChildren(element?: BaseTreeItem): Thenable<BaseTreeItem[]> {
36+
// Synthetic root item that launches the Source Academy panel.
37+
const launchItem = new PlaygroundItem();
38+
3639
// @ts-ignore
3740
const assessmentOverviews: VscAssessmentOverview[] =
3841
this.context.globalState.get("assessmentOverviews");
@@ -44,14 +47,18 @@ export class AssessmentsSidebarProvider
4447
const assessmentTypes = [
4548
...new Set(assessmentOverviews.map((ao) => ao.type)),
4649
];
47-
return Promise.resolve(
48-
assessmentTypes.map((at) => new AssessmentFolder(at)),
49-
);
50+
const folders = assessmentTypes.map((at) => new AssessmentFolder(at));
51+
52+
return Promise.resolve([launchItem, ...folders]);
5053
}
5154

5255
if (element && element.type === "AssessmentFolder") {
5356
const elem = element as AssessmentFolder;
5457

58+
if (!assessmentOverviews) {
59+
return Promise.resolve([]);
60+
}
61+
5562
return Promise.resolve(
5663
assessmentOverviews
5764
.filter((ao) => ao.type == elem.assessmentType)
@@ -84,6 +91,21 @@ class BaseTreeItem extends vscode.TreeItem {
8491
};
8592
}
8693

94+
/**
95+
* Synthetic tree item that always appears at the top-level of the view.
96+
*/
97+
class PlaygroundItem extends BaseTreeItem {
98+
constructor() {
99+
super("Playground", vscode.TreeItemCollapsibleState.None);
100+
this.type = "LaunchItem";
101+
this.command = {
102+
title: "Playground",
103+
command: "source-academy.navigate",
104+
arguments: ["/playground"],
105+
};
106+
}
107+
}
108+
87109
class AssessmentFolder extends BaseTreeItem {
88110
constructor(public readonly assessmentType: string) {
89111
super(assessmentType, vscode.TreeItemCollapsibleState.Collapsed);

0 commit comments

Comments
 (0)