@@ -30,6 +30,7 @@ function run() {
3030 > = { } ;
3131 let uiNeedsRefresh = false ;
3232 let stackList : string [ ] | undefined ;
33+ let stackNameToTopicMappings : Record < string , string > | undefined ;
3334 const selectedStackLocalStorageKey = 'selectedStack' ;
3435 let ws : WebSocket ;
3536 let selectedStack : string | undefined ;
@@ -75,6 +76,7 @@ function run() {
7576 void ( async ( ) => {
7677 await fillStacks ( ) ;
7778 await connectToWebSocket ( ) ;
79+ await loadStackNameToTopicMappings ( ) ;
7880 } ) ( ) ;
7981 window . requestAnimationFrame ( render ) ;
8082 setupTooltip ( ) ;
@@ -120,6 +122,24 @@ function run() {
120122 stackList && stackList . length > 1 ? '' : 'none' ;
121123 }
122124
125+ function canFilterOnTopic ( ) {
126+ return (
127+ stackList &&
128+ stackList ?. length > 1 &&
129+ stackNameToTopicMappings &&
130+ Object . values ( stackNameToTopicMappings ) . length
131+ ) ;
132+ }
133+
134+ async function loadStackNameToTopicMappings ( ) {
135+ const response = await fetch ( '/stackTopicMappings' ) ;
136+ try {
137+ stackNameToTopicMappings = await response . json ( ) ;
138+ } catch {
139+ stackNameToTopicMappings = { } ;
140+ }
141+ }
142+
123143 async function connectToWebSocket ( ) {
124144 try {
125145 const response = await fetch ( `/wsUrl` ) ;
@@ -335,6 +355,11 @@ function run() {
335355 return step ;
336356 }
337357
358+ function resolveTopic ( selectedStack : string | undefined ) {
359+ if ( ! selectedStack || ! stackNameToTopicMappings ) return '#' ;
360+ return getTopic ( stackNameToTopicMappings [ selectedStack ] ) ;
361+ }
362+
338363 function renderSpyMessage ( spyMessage : SpyMessageExt | SpyMessageGroup ) {
339364 const serviceKey = serviceKeyFilterInputElement . value ?. toLocaleLowerCase ( ) ;
340365 const data = dataFilterInputElement . value ?. toLocaleLowerCase ( ) ;
@@ -346,7 +371,9 @@ function run() {
346371 messages = [ spyMessage as SpyMessageExt ] ;
347372 }
348373 const html = messages
349- . filter ( ( sm ) => sm . topic === getTopic ( selectedStack ! ) )
374+ . filter (
375+ ( sm ) => ! canFilterOnTopic ( ) || sm . topic === resolveTopic ( selectedStack )
376+ )
350377 . filter ( ( sm ) => matchFilter ( sm , { serviceKey, data } ) )
351378 . map ( ( sm , i ) => {
352379 const service = getServiceNameFromServiceKey ( sm . serviceKey ) ;
0 commit comments