@@ -12,13 +12,17 @@ import { ReposManagerState, FolderRepositoryManager } from '../github/folderRepo
1212import { IssueModel } from '../github/issueModel' ;
1313import { issueBodyHasLink } from './issueLinkLookup' ;
1414
15- class UriTreeItem extends vscode . TreeItem2 {
15+ export class IssueUriTreeItem extends vscode . TreeItem2 {
1616 constructor ( public readonly uri : vscode . Uri | undefined , label : string , collapsibleState ?: vscode . TreeItemCollapsibleState ) {
17- super ( { label } , collapsibleState ) ;
17+ super ( label , collapsibleState ) ;
18+ }
19+
20+ get labelAsString ( ) : string | undefined {
21+ return typeof this . label === 'string' ? this . label : this . label ?. label ;
1822 }
1923}
2024
21- export class IssuesTreeData implements vscode . TreeDataProvider < FolderRepositoryManager | IssueItem | MilestoneItem | UriTreeItem > {
25+ export class IssuesTreeData implements vscode . TreeDataProvider < FolderRepositoryManager | IssueItem | MilestoneItem | IssueUriTreeItem > {
2226 private _onDidChangeTreeData : vscode . EventEmitter < FolderRepositoryManager | IssueItem | MilestoneItem | null | undefined | void > = new vscode . EventEmitter ( ) ;
2327 public onDidChangeTreeData : vscode . Event < FolderRepositoryManager | IssueItem | MilestoneItem | null | undefined | void > = this . _onDidChangeTreeData . event ;
2428
@@ -35,19 +39,19 @@ export class IssuesTreeData implements vscode.TreeDataProvider<FolderRepositoryM
3539 } ) ) ;
3640 }
3741
38- getTreeItem ( element : FolderRepositoryManager | IssueItem | MilestoneItem | UriTreeItem ) : UriTreeItem {
39- let treeItem : UriTreeItem ;
40- if ( element instanceof UriTreeItem ) {
42+ getTreeItem ( element : FolderRepositoryManager | IssueItem | MilestoneItem | IssueUriTreeItem ) : IssueUriTreeItem {
43+ let treeItem : IssueUriTreeItem ;
44+ if ( element instanceof IssueUriTreeItem ) {
4145 treeItem = element ;
4246 } else if ( element instanceof FolderRepositoryManager ) {
43- treeItem = new UriTreeItem ( element . repository . rootUri , path . basename ( element . repository . rootUri . fsPath ) , vscode . TreeItemCollapsibleState . Expanded ) ;
47+ treeItem = new IssueUriTreeItem ( element . repository . rootUri , path . basename ( element . repository . rootUri . fsPath ) , vscode . TreeItemCollapsibleState . Expanded ) ;
4448 } else if ( ! ( element instanceof IssueModel ) ) {
45- treeItem = new UriTreeItem ( element . uri , element . milestone . title , element . issues . length > 0 ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . None ) ;
49+ treeItem = new IssueUriTreeItem ( element . uri , element . milestone . title , element . issues . length > 0 ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . None ) ;
4650 } else {
47- treeItem = new UriTreeItem ( undefined , `${ element . number } : ${ element . title } ` , vscode . TreeItemCollapsibleState . None ) ;
51+ treeItem = new IssueUriTreeItem ( undefined , `${ element . number } : ${ element . title } ` , vscode . TreeItemCollapsibleState . None ) ;
4852 treeItem . iconPath = element . isOpen ? new vscode . ThemeIcon ( 'issues' ) : new vscode . ThemeIcon ( 'issue-closed' ) ;
4953 if ( this . stateManager . currentIssue ( element . uri ) ?. issue . number === element . number ) {
50- treeItem . label = `✓ ${ treeItem . label . label } ` ;
54+ treeItem . label = `✓ ${ treeItem . label ! } ` ;
5155 treeItem . contextValue = 'currentissue' ;
5256 } else {
5357 const savedState = this . stateManager . getSavedIssueState ( element . number ) ;
@@ -64,7 +68,7 @@ export class IssuesTreeData implements vscode.TreeDataProvider<FolderRepositoryM
6468 return treeItem ;
6569 }
6670
67- getChildren ( element : FolderRepositoryManager | IssueItem | MilestoneItem | UriTreeItem | undefined ) : FolderRepositoryManager [ ] | Promise < ( IssueItem | MilestoneItem ) [ ] > | IssueItem [ ] | UriTreeItem [ ] {
71+ getChildren ( element : FolderRepositoryManager | IssueItem | MilestoneItem | IssueUriTreeItem | undefined ) : FolderRepositoryManager [ ] | Promise < ( IssueItem | MilestoneItem ) [ ] > | IssueItem [ ] | IssueUriTreeItem [ ] {
6872 if ( ( element === undefined ) && ( this . manager . state !== ReposManagerState . RepositoriesLoaded ) ) {
6973 return this . getStateChildren ( ) ;
7074 } else {
@@ -79,30 +83,30 @@ export class IssuesTreeData implements vscode.TreeDataProvider<FolderRepositoryM
7983 return item ;
8084 }
8185
82- getStateChildren ( ) : UriTreeItem [ ] {
86+ getStateChildren ( ) : IssueUriTreeItem [ ] {
8387 if ( this . manager . state === ReposManagerState . NeedsAuthentication ) {
8488 return [ ] ;
8589 } else {
86- return [ new UriTreeItem ( undefined , 'Loading...' ) ] ;
90+ return [ new IssueUriTreeItem ( undefined , 'Loading...' ) ] ;
8791 }
8892 }
8993
90- getQueryItems ( folderManager : FolderRepositoryManager ) : Promise < ( IssueItem | MilestoneItem ) [ ] > | UriTreeItem [ ] {
94+ getQueryItems ( folderManager : FolderRepositoryManager ) : Promise < ( IssueItem | MilestoneItem ) [ ] > | IssueUriTreeItem [ ] {
9195 const issueCollection = this . stateManager . getIssueCollection ( folderManager . repository . rootUri ) ;
9296 if ( issueCollection . size === 1 ) {
9397 return Array . from ( issueCollection . values ( ) ) [ 0 ] ;
9498 }
9599 const queryLabels = Array . from ( issueCollection . keys ( ) ) ;
96100 const firstLabel = queryLabels [ 0 ] ;
97101 return queryLabels . map ( label => {
98- const item = new UriTreeItem ( folderManager . repository . rootUri , label ) ;
102+ const item = new IssueUriTreeItem ( folderManager . repository . rootUri , label ) ;
99103 item . contextValue = 'query' ;
100104 item . collapsibleState = label === firstLabel ? vscode . TreeItemCollapsibleState . Expanded : vscode . TreeItemCollapsibleState . Collapsed ;
101105 return item ;
102106 } ) ;
103107 }
104108
105- getIssuesChildren ( element : FolderRepositoryManager | IssueItem | MilestoneItem | UriTreeItem | undefined ) : FolderRepositoryManager [ ] | Promise < ( IssueItem | MilestoneItem ) [ ] > | IssueItem [ ] | UriTreeItem [ ] {
109+ getIssuesChildren ( element : FolderRepositoryManager | IssueItem | MilestoneItem | IssueUriTreeItem | undefined ) : FolderRepositoryManager [ ] | Promise < ( IssueItem | MilestoneItem ) [ ] > | IssueItem [ ] | IssueUriTreeItem [ ] {
106110 if ( element === undefined ) {
107111 // If there's only one query, don't display a title for it
108112 if ( this . manager . folderManagers . length === 1 ) {
@@ -114,8 +118,8 @@ export class IssuesTreeData implements vscode.TreeDataProvider<FolderRepositoryM
114118 }
115119 } else if ( element instanceof FolderRepositoryManager ) {
116120 return this . getQueryItems ( element ) ;
117- } else if ( element instanceof UriTreeItem ) {
118- return element . uri ? this . stateManager . getIssueCollection ( element . uri ) . get ( element . label . label ! ) ?? [ ] : [ ] ;
121+ } else if ( element instanceof IssueUriTreeItem ) {
122+ return element . uri ? this . stateManager . getIssueCollection ( element . uri ) . get ( element . labelAsString ! ) ?? [ ] : [ ] ;
119123 } else if ( ! ( element instanceof IssueModel ) ) {
120124 return element . issues . map ( item => {
121125 const issueItem : IssueItem = Object . assign ( item ) ;
0 commit comments