@@ -1647,31 +1647,12 @@ ${contents}
16471647 quickPick . matchOnDescription = true ;
16481648 quickPick . matchOnDetail = true ;
16491649 quickPick . show ( ) ;
1650- quickPick . busy = true ;
16511650
16521651 let acceptDisposable : vscode . Disposable | undefined ;
16531652 let hideDisposable : vscode . Disposable | undefined ;
16541653
1655- // Fetch all open PRs (lightweight query)
16561654 try {
1657- const prs = await githubRepo . repo . getPullRequestNumbers ( ) ;
1658- if ( ! prs ) {
1659- return vscode . window . showErrorMessage ( vscode . l10n . t ( 'Failed to fetch pull requests' ) ) ;
1660- }
1661- // Sort PRs by number in descending order (most recent first)
1662- const sortedPRs = prs . sort ( ( a , b ) => b . number - a . number ) ;
1663- const prItems : ( vscode . QuickPickItem & { prNumber : number } ) [ ] = sortedPRs . map ( pr => ( {
1664- label : `#${ pr . number } ${ pr . title } ` ,
1665- description : `by @${ pr . author . login } ` ,
1666- prNumber : pr . number
1667- } ) ) ;
1668-
1669- quickPick . items = prItems ;
1670- quickPick . busy = false ;
1671-
1672- // Handle selection
1673-
1674- const selected = await new Promise < { selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined , selectedString : string | undefined } > ( ( resolve ) => {
1655+ const selectedPromise = new Promise < { selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined , selectedString : string | undefined } > ( ( resolve ) => {
16751656 acceptDisposable = quickPick . onDidAccept ( ( ) => {
16761657 let selectedString : string | undefined ;
16771658 let selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined ;
@@ -1689,30 +1670,49 @@ ${contents}
16891670 hideDisposable = quickPick . onDidHide ( ( ) => resolve ( { selectedItem : undefined , selectedString : undefined } ) ) ;
16901671 } ) ;
16911672
1673+ const prs = await githubRepo . repo . getPullRequestNumbers ( ) ;
1674+ if ( ! prs ) {
1675+ return vscode . window . showErrorMessage ( vscode . l10n . t ( 'Failed to fetch pull requests' ) ) ;
1676+ }
1677+ // Sort PRs by number in descending order (most recent first)
1678+ const sortedPRs = prs . sort ( ( a , b ) => b . number - a . number ) ;
1679+ const prItems : ( vscode . QuickPickItem & { prNumber : number } ) [ ] = sortedPRs . map ( pr => ( {
1680+ label : `#${ pr . number } ${ pr . title } ` ,
1681+ description : `by @${ pr . author . login } ` ,
1682+ prNumber : pr . number
1683+ } ) ) ;
1684+
1685+ quickPick . items = prItems ;
1686+ const selected = await selectedPromise ;
1687+ quickPick . busy = true ;
1688+
16921689 if ( ! selected . selectedItem && ! selected . selectedString ) {
16931690 return ;
16941691 }
1695- quickPick . busy = true ;
16961692 let prModel : PullRequestModel | undefined ;
16971693
16981694 // Check if user selected from the list or typed a custom value
16991695 if ( selected . selectedString ) {
17001696 // User typed a PR number or URL
17011697 const parseResult = validateAndParseInput ( selected . selectedString , githubRepo . repo . remote . owner , githubRepo . repo . remote . repositoryName ) ;
1702- if ( ! parseResult . isValid ) {
1698+ if ( ! parseResult . isValid && ! selected . selectedItem ) {
17031699 return vscode . window . showErrorMessage ( parseResult . errorMessage || vscode . l10n . t ( 'Invalid pull request number or URL' ) ) ;
17041700 }
1705- // The user may have just entered part of a number and meant to select it from the list
1706- const selectedItemNumber = selected . selectedItem ?. prNumber ;
1707- if ( selectedItemNumber !== undefined ) {
1708- const parsedDigits = parseResult . prNumber . toString ( ) ;
1709- const selectedDigits = selectedItemNumber . toString ( ) ;
1710- if ( selectedDigits . length > parsedDigits . length && selectedDigits . startsWith ( parsedDigits ) ) {
1711- parseResult . prNumber = selectedItemNumber ;
1701+
1702+ if ( parseResult . prNumber !== undefined ) {
1703+ // The user may have just entered part of a number and meant to select it from the list
1704+ const selectedItemNumber = selected . selectedItem ?. prNumber ;
1705+ if ( selectedItemNumber !== undefined ) {
1706+ const parsedDigits = parseResult . prNumber . toString ( ) ;
1707+ const selectedDigits = selectedItemNumber . toString ( ) ;
1708+ if ( selectedDigits . length > parsedDigits . length && selectedDigits . startsWith ( parsedDigits ) ) {
1709+ parseResult . prNumber = selectedItemNumber ;
1710+ }
17121711 }
1712+ prModel = await githubRepo . manager . fetchById ( githubRepo . repo , parseResult . prNumber ) ;
17131713 }
1714- prModel = await githubRepo . manager . fetchById ( githubRepo . repo , parseResult . prNumber ) ;
1715- } else if ( selected . selectedItem ?. prNumber ) {
1714+ }
1715+ if ( selected . selectedItem ?. prNumber && ! prModel ) {
17161716 // User selected from the list
17171717 prModel = await githubRepo . manager . fetchById ( githubRepo . repo , selected . selectedItem . prNumber ) ;
17181718 }
0 commit comments