55
66import './media/scm.css' ;
77import { IDisposable , DisposableStore , combinedDisposable } from '../../../../base/common/lifecycle.js' ;
8- import { autorun } from '../../../../base/common/observable.js' ;
8+ import { autorun , IObservable , observableSignalFromEvent } from '../../../../base/common/observable.js' ;
99import { append , $ } from '../../../../base/browser/dom.js' ;
1010import { ISCMProvider , ISCMRepository , ISCMViewService } from '../common/scm.js' ;
1111import { CountBadge } from '../../../../base/browser/ui/countBadge/countBadge.js' ;
@@ -30,6 +30,7 @@ import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uri
3030import { shorten } from '../../../../base/common/labels.js' ;
3131import { dirname } from '../../../../base/common/resources.js' ;
3232import { ILabelService } from '../../../../platform/label/common/label.js' ;
33+ import { Codicon } from '../../../../base/common/codicons.js' ;
3334
3435export class RepositoryActionRunner extends ActionRunner {
3536 constructor ( private readonly getSelectedRepositories : ( ) => ISCMRepository [ ] ) {
@@ -69,6 +70,8 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
6970 static readonly TEMPLATE_ID = 'repository' ;
7071 get templateId ( ) : string { return RepositoryRenderer . TEMPLATE_ID ; }
7172
73+ private readonly onDidChangeVisibleRepositoriesSignal : IObservable < void > ;
74+
7275 constructor (
7376 private readonly toolbarMenuId : MenuId ,
7477 private readonly actionViewItemProvider : IActionViewItemProvider ,
@@ -81,7 +84,9 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
8184 @ISCMViewService private scmViewService : ISCMViewService ,
8285 @ITelemetryService private telemetryService : ITelemetryService ,
8386 @IUriIdentityService private uriIdentityService : IUriIdentityService
84- ) { }
87+ ) {
88+ this . onDidChangeVisibleRepositoriesSignal = observableSignalFromEvent ( this , this . scmViewService . onDidChangeVisibleRepositories ) ;
89+ }
8590
8691 renderTemplate ( container : HTMLElement ) : RepositoryTemplate {
8792 // hack
@@ -107,9 +112,22 @@ export class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMReposit
107112 renderElement ( arg : ISCMRepository | ITreeNode < ISCMRepository , FuzzyScore > , index : number , templateData : RepositoryTemplate ) : void {
108113 const repository = isSCMRepository ( arg ) ? arg : arg . element ;
109114
110- if ( ThemeIcon . isThemeIcon ( repository . provider . iconPath ) ) {
111- templateData . icon . classList . add ( ...ThemeIcon . asClassNameArray ( repository . provider . iconPath ) ) ;
112- }
115+ templateData . elementDisposables . add ( autorun ( reader => {
116+ this . onDidChangeVisibleRepositoriesSignal . read ( reader ) ;
117+
118+ const isVisible = this . scmViewService . isVisible ( repository ) ;
119+ templateData . label . element . classList . toggle ( 'visible' , isVisible ) ;
120+
121+ if ( ThemeIcon . isThemeIcon ( repository . provider . iconPath ) ) {
122+ if ( isVisible && repository . provider . iconPath . id === Codicon . repo . id ) {
123+ templateData . icon . className = ThemeIcon . asClassName ( Codicon . repoSelected ) ;
124+ } else {
125+ templateData . icon . className = ThemeIcon . asClassName ( repository . provider . iconPath ) ;
126+ }
127+ } else {
128+ templateData . icon . className = ThemeIcon . asClassName ( Codicon . repo ) ;
129+ }
130+ } ) ) ;
113131
114132 // Use the description to disambiguate repositories with the same name and have
115133 // a `rootUri`. Use the `provider.rootUri` for disambiguation. If they have the
0 commit comments