@@ -8,13 +8,16 @@ import { IssueModel } from '../github/issueModel';
8
8
import { MilestoneModel } from '../github/milestoneModel' ;
9
9
import { StateManager } from './stateManager' ;
10
10
import { Resource } from '../common/resources' ;
11
+ import { PullRequestManager , PRManagerState } from '../github/pullRequestManager' ;
11
12
12
13
export class IssuesTreeData implements vscode . TreeDataProvider < IssueModel | MilestoneModel | vscode . TreeItem > {
13
14
private _onDidChangeTreeData : vscode . EventEmitter < IssueModel | MilestoneModel | null | undefined | void > = new vscode . EventEmitter ( ) ;
14
15
public onDidChangeTreeData : vscode . Event < IssueModel | MilestoneModel | null | undefined | void > = this . _onDidChangeTreeData . event ;
15
- private firstLabel : string | undefined ;
16
16
17
- constructor ( private stateManager : StateManager , context : vscode . ExtensionContext ) {
17
+ constructor ( private stateManager : StateManager , private manager : PullRequestManager , context : vscode . ExtensionContext ) {
18
+ context . subscriptions . push ( this . manager . onDidChangeState ( ( ) => {
19
+ this . _onDidChangeTreeData . fire ( ) ;
20
+ } ) ) ;
18
21
context . subscriptions . push ( this . stateManager . onDidChangeIssueData ( ( ) => {
19
22
this . _onDidChangeTreeData . fire ( ) ;
20
23
} ) ) ;
@@ -28,7 +31,6 @@ export class IssuesTreeData implements vscode.TreeDataProvider<IssueModel | Mile
28
31
let treeItem : vscode . TreeItem ;
29
32
if ( element instanceof vscode . TreeItem ) {
30
33
treeItem = element ;
31
- treeItem . collapsibleState = element . label === this . firstLabel ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . Collapsed ;
32
34
} else if ( ! ( element instanceof IssueModel ) ) {
33
35
treeItem = new vscode . TreeItem ( element . milestone . title , element . issues . length > 0 ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . None ) ;
34
36
} else {
@@ -54,16 +56,39 @@ export class IssuesTreeData implements vscode.TreeDataProvider<IssueModel | Mile
54
56
}
55
57
56
58
getChildren ( element : IssueModel | MilestoneModel | vscode . TreeItem | undefined ) : Promise < ( IssueModel | MilestoneModel ) [ ] > | IssueModel [ ] | vscode . TreeItem [ ] {
59
+ if ( element === undefined && this . manager . state !== PRManagerState . RepositoriesLoaded ) {
60
+ return this . getStateChildren ( ) ;
61
+ } else {
62
+ return this . getIssuesChildren ( element ) ;
63
+ }
64
+ }
65
+
66
+ getStateChildren ( ) : vscode . TreeItem [ ] {
67
+ if ( this . manager . state === PRManagerState . NeedsAuthentication ) {
68
+ const item = new vscode . TreeItem ( 'Sign in' ) ;
69
+ item . command = {
70
+ title : 'Sign in' ,
71
+ command : 'issue.signinAndRefreshList' ,
72
+ arguments : [ ]
73
+ } ;
74
+ return [ item ] ;
75
+ } else {
76
+ return [ new vscode . TreeItem ( 'Loading...' ) ] ;
77
+ }
78
+ }
79
+
80
+ getIssuesChildren ( element : IssueModel | MilestoneModel | vscode . TreeItem | undefined ) : Promise < ( IssueModel | MilestoneModel ) [ ] > | IssueModel [ ] | vscode . TreeItem [ ] {
57
81
if ( element === undefined ) {
58
82
// If there's only one query, don't display a title for it
59
83
if ( this . stateManager . issueCollection . size === 1 ) {
60
84
return Array . from ( this . stateManager . issueCollection . values ( ) ) [ 0 ] ;
61
85
}
62
86
const queryLabels = Array . from ( this . stateManager . issueCollection . keys ( ) ) ;
63
- this . firstLabel = queryLabels [ 0 ] ;
87
+ const firstLabel = queryLabels [ 0 ] ;
64
88
return queryLabels . map ( label => {
65
89
const item = new vscode . TreeItem ( label ) ;
66
90
item . contextValue = 'query' ;
91
+ item . collapsibleState = label === firstLabel ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . Collapsed ;
67
92
return item ;
68
93
} ) ;
69
94
} else if ( element instanceof vscode . TreeItem ) {
0 commit comments