@@ -35,6 +35,18 @@ import { isDarkTheme } from 'vs/platform/theme/common/themes';
3535import { SCMEditor } from './scmEditor' ;
3636import { IModelService } from 'vs/editor/common/services/modelService' ;
3737
38+ function isSCMResource ( element : ISCMResourceGroup | ISCMResource ) : element is ISCMResource {
39+ return ! ! ( element as ISCMResource ) . uri ;
40+ }
41+
42+ function getElementId ( element : ISCMResourceGroup | ISCMResource ) {
43+ if ( isSCMResource ( element ) ) {
44+ return `${ element . resourceGroupId } :${ element . uri . toString ( ) } ` ;
45+ } else {
46+ return `${ element . id } ` ;
47+ }
48+ }
49+
3850interface SearchInputEvent extends Event {
3951 target : HTMLInputElement ;
4052 immediate ?: boolean ;
@@ -135,7 +147,7 @@ class Delegate implements IDelegate<ISCMResourceGroup | ISCMResource> {
135147 getHeight ( ) { return 22 ; }
136148
137149 getTemplateId ( element : ISCMResourceGroup | ISCMResource ) {
138- return ( element as ISCMResource ) . uri ? ResourceRenderer . TEMPLATE_ID : ResourceGroupRenderer . TEMPLATE_ID ;
150+ return isSCMResource ( element ) ? ResourceRenderer . TEMPLATE_ID : ResourceGroupRenderer . TEMPLATE_ID ;
139151 }
140152}
141153
@@ -198,17 +210,21 @@ export class SCMViewlet extends Viewlet {
198210 const delegate = new Delegate ( ) ;
199211
200212 const actionItemProvider = action => this . getActionItem ( action ) ;
201-
202- this . list = new List ( this . listContainer , delegate , [
213+ const renderers = [
203214 new ResourceGroupRenderer ( this . menus , actionItemProvider ) ,
204215 this . instantiationService . createInstance ( ResourceRenderer , this . menus , actionItemProvider ) ,
205- ] , { keyboardSupport : false } ) ;
216+ ] ;
217+
218+ this . list = new List ( this . listContainer , delegate , renderers , {
219+ identityProvider : e => getElementId ( e ) ,
220+ keyboardSupport : false
221+ } ) ;
206222
207223 this . disposables . push ( this . listService . register ( this . list ) ) ;
208224
209225 chain ( this . list . onSelectionChange )
210226 . map ( e => e . elements [ 0 ] )
211- . filter ( e => ! ! e && ! ! ( e as ISCMResource ) . uri )
227+ . filter ( e => ! ! e && isSCMResource ( e ) )
212228 . on ( this . open , this , this . disposables ) ;
213229
214230 this . list . onContextMenu ( this . onListContextMenu , this , this . disposables ) ;
@@ -279,12 +295,10 @@ export class SCMViewlet extends Viewlet {
279295 const element = e . element ;
280296 let actions : IAction [ ] ;
281297
282- if ( ( element as ISCMResource ) . uri ) {
283- const resource = element as ISCMResource ;
284- actions = this . menus . getResourceContextActions ( resource ) ;
298+ if ( isSCMResource ( element ) ) {
299+ actions = this . menus . getResourceContextActions ( element ) ;
285300 } else {
286- const resourceGroup = element as ISCMResourceGroup ;
287- actions = this . menus . getResourceGroupContextActions ( resourceGroup ) ;
301+ actions = this . menus . getResourceGroupContextActions ( element ) ;
288302 }
289303
290304 this . contextMenuService . showContextMenu ( {
0 commit comments