@@ -64,7 +64,7 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
6464 if ( panel ) {
6565 panel . _panel . reveal ( activeColumn , true ) ;
6666 } else {
67- const title = `Issue #${ identity . number . toString ( ) } ` ;
67+ const title = `#${ identity . number . toString ( ) } ` ;
6868 panel = new IssueOverviewPanel (
6969 telemetry ,
7070 extensionUri ,
@@ -108,6 +108,21 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
108108 return this . _panels . get ( panelKey ( owner , repo , number ) ) ;
109109 }
110110
111+ /**
112+ * Build a short panel title: `#<number> <truncated title>`.
113+ * The item title is truncated to approximately `maxLength` characters on a
114+ * word boundary and suffixed with "..." when it doesn't fit in full.
115+ */
116+ protected buildPanelTitle ( itemNumber : number , itemTitle : string , maxLength : number = 20 ) : string {
117+ let truncated = itemTitle ;
118+ if ( itemTitle . length > maxLength ) {
119+ const lastSpace = itemTitle . lastIndexOf ( ' ' , maxLength ) ;
120+ const cutOff = lastSpace > 0 ? lastSpace : maxLength ;
121+ truncated = itemTitle . substring ( 0 , cutOff ) + '...' ;
122+ }
123+ return `#${ itemNumber } ${ truncated } ` ;
124+ }
125+
111126 protected setPanelTitle ( title : string ) : void {
112127 try {
113128 this . _panel . title = title ;
@@ -125,10 +140,13 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
125140 folderRepositoryManager : FolderRepositoryManager ,
126141 private readonly type : string = IssueOverviewPanel . viewType ,
127142 existingPanel ?: vscode . WebviewPanel ,
128- iconSubpath ? : {
143+ iconSubpath : {
129144 light : string ,
130145 dark : string ,
131- }
146+ } = {
147+ light : 'resources/icons/issue_webview.svg' ,
148+ dark : 'resources/icons/dark/issue_webview.svg' ,
149+ }
132150 ) {
133151 super ( ) ;
134152 this . _folderRepositoryManager = folderRepositoryManager ;
@@ -144,12 +162,10 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
144162 enableFindWidget : true
145163 } ) ) ;
146164
147- if ( iconSubpath ) {
148- this . _panel . iconPath = {
149- dark : vscode . Uri . joinPath ( _extensionUri , iconSubpath . dark ) ,
150- light : vscode . Uri . joinPath ( _extensionUri , iconSubpath . light )
151- } ;
152- }
165+ this . _panel . iconPath = {
166+ dark : vscode . Uri . joinPath ( _extensionUri , iconSubpath . dark ) ,
167+ light : vscode . Uri . joinPath ( _extensionUri , iconSubpath . light )
168+ } ;
153169
154170 this . _webview = this . _panel . webview ;
155171 super . initialize ( ) ;
@@ -298,7 +314,7 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
298314 }
299315
300316 this . _item = issue as TItem ;
301- this . setPanelTitle ( `Issue # ${ issueModel . number . toString ( ) } ` ) ;
317+ this . setPanelTitle ( this . buildPanelTitle ( issueModel . number , issueModel . title ) ) ;
302318
303319 Logger . debug ( 'pr.initialize' , IssueOverviewPanel . ID ) ;
304320 this . _postMessage ( {
0 commit comments