Skip to content

Commit

Permalink
workaround
Browse files Browse the repository at this point in the history
  • Loading branch information
Katherine Soohoo committed Feb 16, 2022
1 parent b751f69 commit 69200d4
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 21 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Change Log

All notable changes to the "myextension" extension will be documented in this file.
All notable changes to the "treeview-extension" extension will be documented in this file.

Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# myextension README
# treeview-extension README

1. Open project in VS Code.
1. Install dependencies with `npm ci`
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "myextension",
"displayName": "MyExtension",
"name": "treeview-extension",
"displayName": "treeview-extension",
"description": "A test extension to recreate Tree View API issue.",
"version": "0.0.1",
"engines": {
Expand All @@ -16,14 +16,14 @@
"contributes": {
"commands": [
{
"command": "myextension.deleteItem",
"command": "treeview-extension.deleteItem",
"title": "My Extension: Delete Item"
}
],
"views": {
"explorer": [
{
"id": "myTreeDataProvider",
"id": "myTreeView",
"name": "My Tree View"
}
]
Expand Down
26 changes: 18 additions & 8 deletions src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
import { commands, ExtensionContext, window } from 'vscode';
import { MyTreeDataProvider } from './myTreeDataProvider';
import { commands, ExtensionContext, window } from "vscode";
import { MyTreeDataProvider } from "./myTreeDataProvider";

export function activate(context: ExtensionContext) {
const treeViewProvider = new MyTreeDataProvider();
window.registerTreeDataProvider('myTreeDataProvider', treeViewProvider);
let disposable = commands.registerCommand('myextension.deleteItem', () => {
treeViewProvider.deleteItem();
});
const treeViewProvider = new MyTreeDataProvider();
const treeView = window.createTreeView("myTreeView", {
treeDataProvider: treeViewProvider,
});

context.subscriptions.push(disposable);
let disposable = commands.registerCommand(
"treeview-extension.deleteItem",
async () => {
// Workaround for bug
await treeView.reveal(treeViewProvider.parent, {
select: true,
focus: true,
});
treeViewProvider.deleteItem();
}
);
context.subscriptions.push(disposable);
}

export function deactivate() {}
24 changes: 19 additions & 5 deletions src/myTreeDataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import {
class MyTreeItem extends TreeItem {
public constructor(
label: string,
collapsibleState: TreeItemCollapsibleState
collapsibleState: TreeItemCollapsibleState,
public parent: MyTreeItem | null
) {
super(label, collapsibleState);
}
Expand All @@ -23,25 +24,38 @@ export class MyTreeDataProvider implements TreeDataProvider<MyTreeItem> {
readonly onDidChangeTreeData: Event<MyTreeItem | undefined | null | void> =
this.onDidChangeTreeDataEmitter.event;

private parent: TreeItem;
private children: TreeItem[] = [];
public parent: MyTreeItem;
private children: MyTreeItem[] = [];

constructor() {
this.parent = new MyTreeItem("outer", TreeItemCollapsibleState.Collapsed);
this.children.push(new MyTreeItem("inner", TreeItemCollapsibleState.None));
this.parent = new MyTreeItem(
"outer",
TreeItemCollapsibleState.Collapsed,
null
);
this.children.push(
new MyTreeItem("inner", TreeItemCollapsibleState.None, this.parent)
);
}

/** @override */
getTreeItem(element: MyTreeItem): TreeItem | Thenable<TreeItem> {
return element;
}

/** @override */
getChildren(element?: MyTreeItem): ProviderResult<MyTreeItem[]> {
if (element) {
return this.children;
}
return [this.parent];
}

/** @override */
getParent(element?: MyTreeItem): ProviderResult<MyTreeItem> {
return element?.parent;
}

refreshParent() {
this.onDidChangeTreeDataEmitter.fire(this.parent);
}
Expand Down

0 comments on commit 69200d4

Please sign in to comment.