@@ -21,6 +21,7 @@ import { ChangeTemplateReply, DisplayLabel, PreReviewState } from './views';
2121import { RemoteInfo } from '../../common/types' ;
2222import { ChooseBaseRemoteAndBranchResult , ChooseCompareRemoteAndBranchResult , ChooseRemoteAndBranchArgs , CreateParamsNew , CreatePullRequestNew , TitleAndDescriptionArgs } from '../../common/views' ;
2323import type { Branch } from '../api/api' ;
24+ import { debounce } from '../common/async' ;
2425import { GitHubServerType } from '../common/authentication' ;
2526import { emojify , ensureEmojis } from '../common/emoji' ;
2627import { commands , contexts } from '../common/executeCommands' ;
@@ -967,10 +968,35 @@ export class CreatePullRequestViewProvider extends BaseCreatePullRequestViewProv
967968 const branchPlaceholder = isBase ? vscode . l10n . t ( 'Choose a base branch' ) : vscode . l10n . t ( 'Choose a branch to merge' ) ;
968969 const repositoryPlaceholder = isBase ? vscode . l10n . t ( 'Choose a base repository' ) : vscode . l10n . t ( 'Choose a repository to merge from' ) ;
969970
971+ let updateCounter = 0 ;
972+ const updateItems = async ( githubRepository : GitHubRepository , prefix : string | undefined ) => {
973+ const currentUpdate = ++ updateCounter ;
974+ quickPick . busy = true ;
975+ const items = await branchPicks ( githubRepository , this . _folderRepositoryManager , chooseDifferentRemote , isBase , prefix ) ;
976+ if ( currentUpdate === updateCounter ) {
977+ quickPick . items = items ;
978+ quickPick . busy = false ;
979+ }
980+ } ;
981+ const debounced = debounce ( updateItems , 300 ) ;
982+ let onDidChangeValueDisposable : vscode . Disposable | undefined ;
983+ const addValueChangeListener = ( ) => {
984+ if ( githubRepository && ! onDidChangeValueDisposable ) {
985+ onDidChangeValueDisposable = quickPick . onDidChangeValue ( async value => {
986+ return debounced ( githubRepository ! , value ) ;
987+ } ) ;
988+ }
989+ } ;
990+ addValueChangeListener ( ) ;
991+
970992 quickPick . placeholder = githubRepository ? branchPlaceholder : remotePlaceholder ;
971993 quickPick . show ( ) ;
972994 quickPick . busy = true ;
973- quickPick . items = githubRepository ? await branchPicks ( githubRepository , this . _folderRepositoryManager , chooseDifferentRemote , isBase ) : await this . remotePicks ( isBase ) ;
995+ if ( githubRepository ) {
996+ await updateItems ( githubRepository , undefined ) ;
997+ } else {
998+ quickPick . items = await this . remotePicks ( isBase ) ;
999+ }
9741000 const activeItem = message . args . currentBranch ? quickPick . items . find ( item => item . branch === message . args . currentBranch ) : undefined ;
9751001 quickPick . activeItems = activeItem ? [ activeItem ] : [ ] ;
9761002 quickPick . busy = false ;
@@ -989,7 +1015,8 @@ export class CreatePullRequestViewProvider extends BaseCreatePullRequestViewProv
9891015 const selectedRemote = selectedPick as vscode . QuickPickItem & { remote : RemoteInfo } ;
9901016 quickPick . busy = true ;
9911017 githubRepository = this . _folderRepositoryManager . findRepo ( repo => repo . remote . owner === selectedRemote . remote . owner && repo . remote . repositoryName === selectedRemote . remote . repositoryName ) ! ;
992- quickPick . items = await branchPicks ( githubRepository , this . _folderRepositoryManager , chooseDifferentRemote , isBase ) ;
1018+ await updateItems ( githubRepository , undefined ) ;
1019+ addValueChangeListener ( ) ;
9931020 quickPick . placeholder = branchPlaceholder ;
9941021 quickPick . busy = false ;
9951022 } else if ( selectedPick . branch && selectedPick . remote ) {
@@ -1003,6 +1030,7 @@ export class CreatePullRequestViewProvider extends BaseCreatePullRequestViewProv
10031030 if ( ! result || ! githubRepository ) {
10041031 quickPick . hide ( ) ;
10051032 quickPick . dispose ( ) ;
1033+ onDidChangeValueDisposable ?. dispose ( ) ;
10061034 return ;
10071035 }
10081036
@@ -1011,6 +1039,7 @@ export class CreatePullRequestViewProvider extends BaseCreatePullRequestViewProv
10111039
10121040 quickPick . hide ( ) ;
10131041 quickPick . dispose ( ) ;
1042+ onDidChangeValueDisposable ?. dispose ( ) ;
10141043 return this . _replyMessage ( message , chooseResult ) ;
10151044 }
10161045
0 commit comments