Skip to content

Commit 3f7a033

Browse files
committed
refactor: tree.
1 parent d1992f9 commit 3f7a033

File tree

4 files changed

+84
-40
lines changed

4 files changed

+84
-40
lines changed

package.json

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"activationEvents": [
1414
"onCommand:codingPlugin.show",
1515
"onCommand:codingPlugin.login",
16-
"onView:treeViewSample"
16+
"onView:mrTreeView"
1717
],
1818
"repository": {
1919
"type": "git",
@@ -56,19 +56,19 @@
5656
"view/title": [
5757
{
5858
"command": "codingPlugin.refresh",
59-
"when": "view == treeViewSample",
59+
"when": "view == mrTreeView",
6060
"group": "navigation"
6161
}
6262
]
6363
},
6464
"viewsWelcome": [
6565
{
66-
"view": "treeViewSample",
66+
"view": "mrTreeView",
6767
"contents": "Please login first.\n[Login](command:codingPlugin.login)",
6868
"when": "!loggedIn"
6969
},
7070
{
71-
"view": "treeViewSample",
71+
"view": "mrTreeView",
7272
"contents": "No merge request for now.\n[Create Merge Request](command:codingPlugin.createMr)",
7373
"when": "noMRResult && loggedIn"
7474
}
@@ -85,8 +85,14 @@
8585
"views": {
8686
"treeview-sample": [
8787
{
88-
"id": "treeViewSample",
89-
"name": "CODING Merge Requests",
88+
"id": "mrTreeView",
89+
"name": "Merge Requests",
90+
"icon": "src/assets/coding.svg",
91+
"contextualTitle": "List"
92+
},
93+
{
94+
"id": "releaseTreeView",
95+
"name": "Releases",
9096
"icon": "src/assets/coding.svg",
9197
"contextualTitle": "List"
9298
}

src/extension.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import * as vscode from 'vscode';
33
// import Logger from './common/logger';
44
import { uriHandler, CodingServer } from './codingServer';
55
import { Panel } from './panel';
6-
import { ListItem, ListProvider } from './tree';
6+
import { ListItem, MRTreeDataProvider } from './tree/mr-tree';
7+
import { ReleaseTreeDataProvider } from './tree/release-tree';
78

89
export async function activate(context: vscode.ExtensionContext) {
910
const repoInfo = await CodingServer.getRepoParams();
@@ -23,8 +24,9 @@ export async function activate(context: vscode.ExtensionContext) {
2324
context.workspaceState.update(`session`, codingSrv.session);
2425
}
2526

26-
const treeDataProvider = new ListProvider(context, codingSrv);
27-
const tree = vscode.window.createTreeView(`treeViewSample`, { treeDataProvider });
27+
const treeDataProvider = new MRTreeDataProvider(context, codingSrv);
28+
const tree = vscode.window.createTreeView(`mrTreeView`, { treeDataProvider });
29+
vscode.window.registerTreeDataProvider(`releaseTreeView`, new ReleaseTreeDataProvider(context));
2830

2931
context.subscriptions.push(vscode.window.registerUriHandler(uriHandler));
3032
context.subscriptions.push(

src/tree.ts renamed to src/tree/mr-tree.ts

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
11
import * as vscode from 'vscode';
22
import * as path from 'path';
33

4-
import { CodingServer } from './codingServer';
5-
import { RepoInfo } from './typings/commonTypes';
6-
import { MRData } from './typings/respResult';
4+
import { CodingServer } from '../codingServer';
5+
import { RepoInfo } from '../typings/commonTypes';
6+
import { MRData } from '../typings/respResult';
77

88
enum MRType {
99
Open = `open`,
1010
Closed = `close`,
1111
All = `all`,
1212
}
1313

14-
enum FolderType {
15-
MR = `mr`,
16-
Release = `release`,
17-
}
18-
1914
enum ItemType {
2015
ListItem = `listItem`,
21-
FolderITem = `folderItem`,
2216
CategoryItem = `categoryItem`,
2317
}
2418

25-
export class ListProvider implements vscode.TreeDataProvider<ListItem> {
19+
export class MRTreeDataProvider implements vscode.TreeDataProvider<ListItem> {
2620
private _onDidChangeTreeData: vscode.EventEmitter<ListItem | undefined | void> = new vscode.EventEmitter<ListItem | undefined | void>();
2721
readonly onDidChangeTreeData: vscode.Event<ListItem | undefined | void> = this._onDidChangeTreeData.event;
2822

@@ -54,18 +48,6 @@ export class ListProvider implements vscode.TreeDataProvider<ListItem> {
5448
}
5549

5650
if (element) {
57-
if (element.contextValue === ItemType.FolderITem) {
58-
if (element.value === FolderType.Release) {
59-
return Promise.resolve([]);
60-
}
61-
62-
return Promise.resolve([
63-
new CategoryItem(MRType.Open.toUpperCase(), MRType.Open, vscode.TreeItemCollapsibleState.Collapsed),
64-
new CategoryItem(MRType.Closed.toUpperCase(), MRType.Closed, vscode.TreeItemCollapsibleState.Collapsed),
65-
new CategoryItem(MRType.All.toUpperCase(), MRType.All, vscode.TreeItemCollapsibleState.Collapsed),
66-
]);
67-
}
68-
6951
if (element.contextValue === ItemType.CategoryItem) {
7052
return this._service.getMRList(``, element.value as MRType)
7153
.then(resp => {
@@ -108,9 +90,10 @@ export class ListProvider implements vscode.TreeDataProvider<ListItem> {
10890
return Promise.resolve([]);
10991
}
11092

111-
return Promise.all([
112-
new FolderItem(FolderType.MR.toUpperCase(), FolderType.MR, vscode.TreeItemCollapsibleState.Collapsed),
113-
new FolderItem(FolderType.Release.toUpperCase(), FolderType.Release, vscode.TreeItemCollapsibleState.Collapsed),
93+
return Promise.resolve([
94+
new CategoryItem(MRType.Open.toUpperCase(), MRType.Open, vscode.TreeItemCollapsibleState.Collapsed),
95+
new CategoryItem(MRType.Closed.toUpperCase(), MRType.Closed, vscode.TreeItemCollapsibleState.Collapsed),
96+
new CategoryItem(MRType.All.toUpperCase(), MRType.All, vscode.TreeItemCollapsibleState.Collapsed),
11497
]);
11598
}
11699
}
@@ -135,17 +118,13 @@ export class ListItem extends vscode.TreeItem {
135118
}
136119
}
137120

138-
export class FolderItem extends ListItem {
139-
contextValue = ItemType.FolderITem;
140-
}
141-
142121
export class CategoryItem extends ListItem {
143122
contextValue = ItemType.CategoryItem;
144123
}
145124

146125
export class MRItem extends ListItem {
147126
iconPath = {
148-
light: path.join(__filename, '../../src/assets/star.light.svg'),
149-
dark: path.join(__filename, '../../src/assets/star.dark.svg'),
127+
light: path.join(__filename, '../../../src/assets/star.light.svg'),
128+
dark: path.join(__filename, '../../../src/assets/star.dark.svg'),
150129
};
151130
}

src/tree/release-tree.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import * as vscode from 'vscode';
2+
import * as path from 'path';
3+
4+
enum ItemType {
5+
ListItem = `listItem`,
6+
FolderITem = `folderItem`,
7+
CategoryItem = `categoryItem`,
8+
}
9+
10+
export class ReleaseTreeDataProvider implements vscode.TreeDataProvider<ListItem> {
11+
private _onDidChangeTreeData: vscode.EventEmitter<ListItem | undefined | void> = new vscode.EventEmitter<ListItem | undefined | void>();
12+
readonly onDidChangeTreeData: vscode.Event<ListItem | undefined | void> = this._onDidChangeTreeData.event;
13+
14+
private _context: vscode.ExtensionContext;
15+
16+
constructor(context: vscode.ExtensionContext) {
17+
this._context = context;
18+
}
19+
20+
public refresh(): any {
21+
this._onDidChangeTreeData.fire();
22+
}
23+
24+
getTreeItem(element: ListItem): vscode.TreeItem {
25+
return element;
26+
}
27+
28+
getChildren(element?: ListItem): Thenable<ListItem[]> {
29+
if (element) {
30+
return Promise.resolve([]);
31+
}
32+
33+
return Promise.resolve([
34+
new ListItem(`//TODO`, `noData`, vscode.TreeItemCollapsibleState.None),
35+
]);
36+
}
37+
}
38+
39+
export class ListItem extends vscode.TreeItem {
40+
contextValue = ItemType.ListItem;
41+
private readonly _value: string | number;
42+
43+
constructor(
44+
public readonly label: string,
45+
public readonly val: number | string,
46+
public readonly collapsibleState: vscode.TreeItemCollapsibleState,
47+
public readonly command?: vscode.Command,
48+
) {
49+
super(label, collapsibleState);
50+
51+
this._value = val;
52+
}
53+
54+
get value() {
55+
return this._value;
56+
}
57+
}

0 commit comments

Comments
 (0)