@@ -1696,31 +1696,12 @@ ${contents}
16961696 quickPick . matchOnDescription = true ;
16971697 quickPick . matchOnDetail = true ;
16981698 quickPick . show ( ) ;
1699- quickPick . busy = true ;
17001699
17011700 let acceptDisposable : vscode . Disposable | undefined ;
17021701 let hideDisposable : vscode . Disposable | undefined ;
17031702
1704- // Fetch all open PRs (lightweight query)
17051703 try {
1706- const prs = await githubRepo . repo . getPullRequestNumbers ( ) ;
1707- if ( ! prs ) {
1708- return vscode . window . showErrorMessage ( vscode . l10n . t ( 'Failed to fetch pull requests' ) ) ;
1709- }
1710- // Sort PRs by number in descending order (most recent first)
1711- const sortedPRs = prs . sort ( ( a , b ) => b . number - a . number ) ;
1712- const prItems : ( vscode . QuickPickItem & { prNumber : number } ) [ ] = sortedPRs . map ( pr => ( {
1713- label : `#${ pr . number } ${ pr . title } ` ,
1714- description : `by @${ pr . author . login } ` ,
1715- prNumber : pr . number
1716- } ) ) ;
1717-
1718- quickPick . items = prItems ;
1719- quickPick . busy = false ;
1720-
1721- // Handle selection
1722-
1723- const selected = await new Promise < { selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined , selectedString : string | undefined } > ( ( resolve ) => {
1704+ const selectedPromise = new Promise < { selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined , selectedString : string | undefined } > ( ( resolve ) => {
17241705 acceptDisposable = quickPick . onDidAccept ( ( ) => {
17251706 let selectedString : string | undefined ;
17261707 let selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined ;
@@ -1738,30 +1719,49 @@ ${contents}
17381719 hideDisposable = quickPick . onDidHide ( ( ) => resolve ( { selectedItem : undefined , selectedString : undefined } ) ) ;
17391720 } ) ;
17401721
1722+ const prs = await githubRepo . repo . getPullRequestNumbers ( ) ;
1723+ if ( ! prs ) {
1724+ return vscode . window . showErrorMessage ( vscode . l10n . t ( 'Failed to fetch pull requests' ) ) ;
1725+ }
1726+ // Sort PRs by number in descending order (most recent first)
1727+ const sortedPRs = prs . sort ( ( a , b ) => b . number - a . number ) ;
1728+ const prItems : ( vscode . QuickPickItem & { prNumber : number } ) [ ] = sortedPRs . map ( pr => ( {
1729+ label : `#${ pr . number } ${ pr . title } ` ,
1730+ description : `by @${ pr . author . login } ` ,
1731+ prNumber : pr . number
1732+ } ) ) ;
1733+
1734+ quickPick . items = prItems ;
1735+ const selected = await selectedPromise ;
1736+ quickPick . busy = true ;
1737+
17411738 if ( ! selected . selectedItem && ! selected . selectedString ) {
17421739 return ;
17431740 }
1744- quickPick . busy = true ;
17451741 let prModel : PullRequestModel | undefined ;
17461742
17471743 // Check if user selected from the list or typed a custom value
17481744 if ( selected . selectedString ) {
17491745 // User typed a PR number or URL
17501746 const parseResult = validateAndParseInput ( selected . selectedString , githubRepo . repo . remote . owner , githubRepo . repo . remote . repositoryName ) ;
1751- if ( ! parseResult . isValid ) {
1747+ if ( ! parseResult . isValid && ! selected . selectedItem ) {
17521748 return vscode . window . showErrorMessage ( parseResult . errorMessage || vscode . l10n . t ( 'Invalid pull request number or URL' ) ) ;
17531749 }
1754- // The user may have just entered part of a number and meant to select it from the list
1755- const selectedItemNumber = selected . selectedItem ?. prNumber ;
1756- if ( selectedItemNumber !== undefined ) {
1757- const parsedDigits = parseResult . prNumber . toString ( ) ;
1758- const selectedDigits = selectedItemNumber . toString ( ) ;
1759- if ( selectedDigits . length > parsedDigits . length && selectedDigits . startsWith ( parsedDigits ) ) {
1760- parseResult . prNumber = selectedItemNumber ;
1750+
1751+ if ( parseResult . prNumber !== undefined ) {
1752+ // The user may have just entered part of a number and meant to select it from the list
1753+ const selectedItemNumber = selected . selectedItem ?. prNumber ;
1754+ if ( selectedItemNumber !== undefined ) {
1755+ const parsedDigits = parseResult . prNumber . toString ( ) ;
1756+ const selectedDigits = selectedItemNumber . toString ( ) ;
1757+ if ( selectedDigits . length > parsedDigits . length && selectedDigits . startsWith ( parsedDigits ) ) {
1758+ parseResult . prNumber = selectedItemNumber ;
1759+ }
17611760 }
1761+ prModel = await githubRepo . manager . fetchById ( githubRepo . repo , parseResult . prNumber ) ;
17621762 }
1763- prModel = await githubRepo . manager . fetchById ( githubRepo . repo , parseResult . prNumber ) ;
1764- } else if ( selected . selectedItem ?. prNumber ) {
1763+ }
1764+ if ( selected . selectedItem ?. prNumber && ! prModel ) {
17651765 // User selected from the list
17661766 prModel = await githubRepo . manager . fetchById ( githubRepo . repo , selected . selectedItem . prNumber ) ;
17671767 }
0 commit comments