@@ -36,6 +36,7 @@ export const ViewerType= new Enum([
3636
3737let defaultViewerFile = '' ;
3838let defaultViewerType = ViewerType . TriView ;
39+ const activeViewers = { } ; // a map of active viewer windows keyed by channel
3940
4041/**
4142 * @returns {{getViewer: function, getExternalViewer: function} }
@@ -79,7 +80,7 @@ export function getViewer(channel, file=defaultViewerFile, scriptUrl) {
7980 return getViewer && getViewer ( channel , file ) ;
8081 } else {
8182 // return currently loaded app's Viewer
82- channel = makeViewerChannel ( channel || getWsChannel ( ) ) ;
83+ channel = makeViewerChannel ( channel || getWsChannel ( ) , file ) ;
8384 const dispatch = ( action ) => dispatchRemoteAction ( channel , action ) ;
8485 const reinitViewer = ( ) => dispatch ( { type : REINIT_APP , payload : { } } ) ;
8586
@@ -297,20 +298,21 @@ function buildChartPart(channel,file,dispatch) {
297298}
298299
299300const doViewerOperation = ( ( ) => {
300- let viewerWindow ;
301301 return ( channel , file , initMsg , f ) => {
302302 const cnt = getConnectionCount ( channel ) ;
303303 if ( cnt > 0 ) {
304- viewerWindow ? viewerWindow . focus ( ) : dispatchRemoteAction ( channel , { type :GRAB_WINDOW_FOCUS } ) ;
304+ activeViewers [ channel ] ? activeViewers [ channel ] ? .focus ( ) : dispatchRemoteAction ( channel , { type :GRAB_WINDOW_FOCUS } ) ;
305305 f ?. ( ) ;
306306 } else {
307307 dispatchAddActionWatcher ( {
308308 callback :windowReadyWatcher , actions :[ WS_CONN_UPDATED , NOTIFY_REMOTE_APP_READY ] , params :{ channel, f}
309309 } ) ;
310310 const url = `${ modifyURLToFull ( file , getRootURL ( ) ) } ?${ WSCH } =${ channel } ` ;
311- viewerWindow = window . open ( url , channel ) ;
312- set ( viewerWindow , 'firefly.options.RequireWebSocketUptime' , true ) ;
313- initMsg && set ( viewerWindow , 'firefly.options.initLoadingMessage' , initMsg ) ;
311+ const win = window . open ( url , channel ) ;
312+ activeViewers [ channel ] = win ;
313+ win . onclose = ( ) => Reflect . deleteProperty ( activeViewers , channel ) ;
314+ set ( win , 'firefly.options.RequireWebSocketUptime' , true ) ;
315+ initMsg && set ( win , 'firefly.options.initLoadingMessage' , initMsg ) ;
314316 }
315317 } ;
316318} ) ( ) ;
0 commit comments