@@ -1672,38 +1672,51 @@ ${contents}
16721672 quickPick . busy = false ;
16731673
16741674 // Handle selection
1675- const selected = await new Promise < ( vscode . QuickPickItem & { prNumber ?: number } ) | string | undefined > ( ( resolve ) => {
1675+
1676+ const selected = await new Promise < { selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined , selectedString : string | undefined } > ( ( resolve ) => {
16761677 acceptDisposable = quickPick . onDidAccept ( ( ) => {
1678+ let selectedString : string | undefined ;
1679+ let selectedItem : ( vscode . QuickPickItem & { prNumber ?: number } ) | undefined ;
1680+
1681+ if ( quickPick . value ) {
1682+ selectedString = quickPick . value ;
1683+ }
1684+
16771685 if ( quickPick . selectedItems . length > 0 ) {
1678- resolve ( quickPick . selectedItems [ 0 ] ) ;
1679- } else if ( quickPick . value ) {
1680- // User typed something but didn't select from list
1681- resolve ( quickPick . value ) ;
1682- } else {
1683- // User pressed Enter with no selection and no input
1684- resolve ( undefined ) ;
1686+ selectedItem = quickPick . selectedItems [ 0 ] ;
16851687 }
1688+
1689+ resolve ( { selectedItem, selectedString } ) ;
16861690 } ) ;
1687- hideDisposable = quickPick . onDidHide ( ( ) => resolve ( undefined ) ) ;
1691+ hideDisposable = quickPick . onDidHide ( ( ) => resolve ( { selectedItem : undefined , selectedString : undefined } ) ) ;
16881692 } ) ;
16891693
1690- if ( ! selected ) {
1694+ if ( ! selected . selectedItem && ! selected . selectedString ) {
16911695 return ;
16921696 }
16931697 quickPick . busy = true ;
16941698 let prModel : PullRequestModel | undefined ;
16951699
16961700 // Check if user selected from the list or typed a custom value
1697- if ( typeof selected === 'string' ) {
1701+ if ( selected . selectedString ) {
16981702 // User typed a PR number or URL
1699- const parseResult = validateAndParseInput ( selected , githubRepo . repo . remote . owner , githubRepo . repo . remote . repositoryName ) ;
1703+ const parseResult = validateAndParseInput ( selected . selectedString , githubRepo . repo . remote . owner , githubRepo . repo . remote . repositoryName ) ;
17001704 if ( ! parseResult . isValid ) {
17011705 return vscode . window . showErrorMessage ( parseResult . errorMessage || vscode . l10n . t ( 'Invalid pull request number or URL' ) ) ;
17021706 }
1707+ // The user may have just entered part of a number and meant to select it from the list
1708+ const selectedItemNumber = selected . selectedItem ?. prNumber ;
1709+ if ( selectedItemNumber !== undefined ) {
1710+ const parsedDigits = parseResult . prNumber . toString ( ) ;
1711+ const selectedDigits = selectedItemNumber . toString ( ) ;
1712+ if ( selectedDigits . length > parsedDigits . length && selectedDigits . startsWith ( parsedDigits ) ) {
1713+ parseResult . prNumber = selectedItemNumber ;
1714+ }
1715+ }
17031716 prModel = await githubRepo . manager . fetchById ( githubRepo . repo , parseResult . prNumber ) ;
1704- } else if ( selected . prNumber ) {
1717+ } else if ( selected . selectedItem ?. prNumber ) {
17051718 // User selected from the list
1706- prModel = await githubRepo . manager . fetchById ( githubRepo . repo , selected . prNumber ) ;
1719+ prModel = await githubRepo . manager . fetchById ( githubRepo . repo , selected . selectedItem . prNumber ) ;
17071720 }
17081721
17091722 if ( prModel ) {
0 commit comments