Skip to content

Commit 266fb8b

Browse files
committed
feat: make it possible to delete parts, chapters and lessons
1 parent 47c68d4 commit 266fb8b

File tree

6 files changed

+50
-21
lines changed

6 files changed

+50
-21
lines changed

extensions/vscode/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
],
2020
"main": "./dist/extension.js",
2121
"contributes": {
22+
"keybindings":[
23+
{
24+
"command": "tutorialkit.delete",
25+
"key": "Shift+Backspace",
26+
"when": "focusedView == tutorialkit-lessons-tree"
27+
}
28+
],
2229
"commands": [
2330
{
2431
"command": "tutorialkit.select-tutorial",
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
import { cmd } from '.';
22
import * as vscode from 'vscode';
33
import { Node } from '../models/Node';
4+
import { getLessonsTreeView } from '../global-state';
45

5-
export async function deleteUnit(node: Node) {
6-
await vscode.workspace.fs.delete(node.path, { recursive: true });
6+
export async function deleteUnit(selectedNode: Node | undefined, selectedNodes: Node[] | undefined) {
7+
let nodes: readonly Node[] = (selectedNodes ? selectedNodes : [selectedNode]).filter((node) => node !== undefined);
8+
9+
if (nodes.length === 0) {
10+
nodes = getLessonsTreeView().selection;
11+
}
12+
13+
for (const node of nodes) {
14+
await vscode.workspace.fs.delete(node.path, { recursive: true });
15+
}
716

817
return cmd.refresh();
918
}
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
import * as vscode from 'vscode';
22
import { extContext } from '../extension';
3-
import { LessonsTreeDataProvider, setLessonsTreeDataProvider } from '../views/lessonsTree';
3+
import { LessonsTreeDataProvider } from '../views/lessonsTree';
4+
import { setLessonsTreeDataProvider, setLessonsTreeView } from '../global-state';
45

56
export async function loadTutorial(uri: vscode.Uri) {
67
const treeDataProvider = new LessonsTreeDataProvider(uri, extContext);
78

89
await treeDataProvider.init();
910

11+
const treeView = vscode.window.createTreeView('tutorialkit-lessons-tree', {
12+
treeDataProvider,
13+
canSelectMany: true,
14+
});
15+
1016
setLessonsTreeDataProvider(treeDataProvider);
17+
setLessonsTreeView(treeView);
1118

12-
extContext.subscriptions.push(
13-
vscode.window.createTreeView('tutorialkit-lessons-tree', {
14-
treeDataProvider,
15-
canSelectMany: true,
16-
}),
17-
treeDataProvider,
18-
);
19+
extContext.subscriptions.push(treeView, treeDataProvider);
1920

2021
vscode.commands.executeCommand('setContext', 'tutorialkit:tree', true);
2122
}

extensions/vscode/src/commands/tutorialkit.refresh.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getLessonsTreeDataProvider } from '../views/lessonsTree';
1+
import { getLessonsTreeDataProvider } from '../global-state';
22

33
export default () => {
44
getLessonsTreeDataProvider().refresh();

extensions/vscode/src/global-state.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { TreeView } from 'vscode';
2+
import type { LessonsTreeDataProvider } from './views/lessonsTree';
3+
import type { Node } from './models/Node';
4+
5+
let lessonsTreeDataProvider: LessonsTreeDataProvider;
6+
let lessonsTreeView: TreeView<Node>;
7+
8+
export function getLessonsTreeDataProvider() {
9+
return lessonsTreeDataProvider;
10+
}
11+
12+
export function getLessonsTreeView() {
13+
return lessonsTreeView;
14+
}
15+
16+
export function setLessonsTreeDataProvider(provider: LessonsTreeDataProvider) {
17+
lessonsTreeDataProvider = provider;
18+
}
19+
20+
export function setLessonsTreeView(treeView: TreeView<Node>) {
21+
lessonsTreeView = treeView;
22+
}

extensions/vscode/src/views/lessonsTree.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,6 @@ import { METADATA_FILES } from '../models/tree/constants';
88

99
export const tutorialMimeType = 'application/tutorialkit.unit';
1010

11-
let lessonsTreeDataProvider: LessonsTreeDataProvider;
12-
13-
export function getLessonsTreeDataProvider() {
14-
return lessonsTreeDataProvider;
15-
}
16-
17-
export function setLessonsTreeDataProvider(provider: LessonsTreeDataProvider) {
18-
lessonsTreeDataProvider = provider;
19-
}
20-
2111
export class LessonsTreeDataProvider implements vscode.TreeDataProvider<Node>, vscode.Disposable {
2212
private _tutorial!: Node;
2313
private _tutorialName: string;

0 commit comments

Comments
 (0)