@@ -32,6 +32,10 @@ interface HeadAndMode {
3232 operatingMode ?: Mode ;
3333}
3434
35+ interface HeadSha {
36+ headSha ?: string ;
37+ }
38+
3539export const MODE_SERVICE = new InjectionToken < ModeService > ( 'ModeService' ) ;
3640
3741export class ModeService {
@@ -69,8 +73,18 @@ export class ModeService {
6973 return this . api . endpoints . changesSinceInitialEditState . useQuery ;
7074 }
7175
72- get mode ( ) {
73- return this . api . endpoints . mode . useQuery ;
76+ mode ( projectId : string ) {
77+ return this . api . endpoints . headAndMode . useQuery (
78+ { projectId } ,
79+ { transform : ( response ) => response . operatingMode }
80+ ) ;
81+ }
82+
83+ head ( projectId : string ) {
84+ return this . api . endpoints . headSha . useQuery (
85+ { projectId } ,
86+ { transform : ( response ) => response . headSha }
87+ ) ;
7488 }
7589}
7690
@@ -136,7 +150,7 @@ function injectEndpoints(api: ClientState['backendApi']) {
136150 unsubscribe ( ) ;
137151 }
138152 } ) ,
139- mode : build . query < Mode , { projectId : string } > ( {
153+ headAndMode : build . query < HeadAndMode , { projectId : string } > ( {
140154 extraOptions : { command : 'operating_mode' } ,
141155 query : ( args ) => args ,
142156 providesTags : [ providesList ( ReduxTag . HeadMetadata ) ] ,
@@ -148,7 +162,26 @@ function injectEndpoints(api: ClientState['backendApi']) {
148162 const unsubscribe = lifecycleApi . extra . backend . listen < HeadAndMode > (
149163 `project://${ arg . projectId } /git/head` ,
150164 ( event ) => {
151- lifecycleApi . updateCachedData ( ( ) => event . payload . operatingMode ) ;
165+ lifecycleApi . updateCachedData ( ( ) => event . payload ) ;
166+ }
167+ ) ;
168+ await lifecycleApi . cacheEntryRemoved ;
169+ unsubscribe ( ) ;
170+ }
171+ } ) ,
172+ headSha : build . query < HeadSha , { projectId : string } > ( {
173+ extraOptions : { command : 'head_sha' } ,
174+ query : ( args ) => args ,
175+ providesTags : [ providesList ( ReduxTag . HeadMetadata ) ] ,
176+ async onCacheEntryAdded ( arg , lifecycleApi ) {
177+ if ( ! hasBackendExtra ( lifecycleApi . extra ) ) {
178+ throw new Error ( 'Redux dependency Backend not found!' ) ;
179+ }
180+ await lifecycleApi . cacheDataLoaded ;
181+ const unsubscribe = lifecycleApi . extra . backend . listen < HeadSha > (
182+ `project://${ arg . projectId } /git/activity` ,
183+ ( event ) => {
184+ lifecycleApi . updateCachedData ( ( ) => event . payload ) ;
152185 }
153186 ) ;
154187 await lifecycleApi . cacheEntryRemoved ;
0 commit comments