@@ -109,11 +109,10 @@ function VisualizeAppController(
109109 const { vis, searchSource } = savedVis ;
110110
111111 $scope . vis = vis ;
112- $scope . linked = ! ! savedVis . savedSearchId ;
113112
114- const $appStatus = ( this . appStatus = {
113+ const $appStatus = {
115114 dirty : ! savedVis . id ,
116- } ) ;
115+ } ;
117116
118117 vis . on ( 'dirtyStateChange' , ( { isDirty } ) => {
119118 vis . dirty = isDirty ;
@@ -281,6 +280,7 @@ function VisualizeAppController(
281280 query : searchSource . getOwnField ( 'query' ) || defaultQuery ,
282281 filters : searchSource . getOwnField ( 'filter' ) || [ ] ,
283282 vis : savedVisState ,
283+ linked : ! ! savedVis . savedSearchId ,
284284 } ;
285285
286286 const useHash = config . get ( 'state:storeInSessionStorage' ) ;
@@ -361,6 +361,7 @@ function VisualizeAppController(
361361 $scope . uiState = persistedState ;
362362 $scope . savedVis = savedVis ;
363363 $scope . query = initialState . query ;
364+ $scope . linked = initialState . linked ;
364365 $scope . searchSource = searchSource ;
365366 $scope . refreshInterval = timefilter . getRefreshInterval ( ) ;
366367
@@ -388,20 +389,21 @@ function VisualizeAppController(
388389 $scope . timeRange = timefilter . getTime ( ) ;
389390 $scope . opts = _ . pick ( $scope , 'savedVis' , 'isAddToDashMode' ) ;
390391
391- const stateContainerSubscription = stateContainer . subscribe ( state => {
392+ const unsubscribeStateUpdates = stateContainer . subscribe ( state => {
392393 const newQuery = migrateLegacyQuery ( state . query ) ;
393394 if ( ! _ . isEqual ( state . query , newQuery ) ) {
394395 stateContainer . transitions . set ( 'query' , newQuery ) ;
395396 }
396397 persistOnChange ( state ) ;
397398
398399 // if the browser history was changed manually we need to reflect changes in the editor
399- if ( ! _ . isEqual ( vis . getState ( ) , stateContainer . getState ( ) . vis ) ) {
400- vis . setState ( stateContainer . getState ( ) . vis ) ;
400+ if ( ! _ . isEqual ( vis . getState ( ) , state . vis ) ) {
401+ vis . setState ( state . vis ) ;
401402 vis . forceReload ( ) ;
402403 vis . emit ( 'updateEditor' ) ;
403404 }
404405
406+ $appStatus . dirty = true ;
405407 $scope . fetch ( ) ;
406408 } ) ;
407409
@@ -435,8 +437,9 @@ function VisualizeAppController(
435437
436438 // update the searchSource when query updates
437439 $scope . fetch = function ( ) {
438- const { query, filters } = stateContainer . getState ( ) ;
440+ const { query, filters, linked } = stateContainer . getState ( ) ;
439441 $scope . query = query ;
442+ $scope . linked = linked ;
440443 savedVis . searchSource . setField ( 'query' , query ) ;
441444 savedVis . searchSource . setField ( 'filter' , filters ) ;
442445 $scope . $broadcast ( 'render' ) ;
@@ -475,7 +478,7 @@ function VisualizeAppController(
475478 $scope . vis . off ( 'apply' , _applyVis ) ;
476479
477480 unsubscribePersisted ( ) ;
478- stateContainerSubscription . unsubscribe ( ) ;
481+ unsubscribeStateUpdates ( ) ;
479482 stopStateSync ( ) ;
480483 } ) ;
481484
@@ -515,8 +518,7 @@ function VisualizeAppController(
515518
516519 $scope . onClearSavedQuery = ( ) => {
517520 delete $scope . savedQuery ;
518- stateContainer . transitions . removeSavedQuery ( ) ;
519- stateContainer . transitions . set ( 'query' , defaultQuery ) ;
521+ stateContainer . transitions . removeSavedQuery ( defaultQuery ) ;
520522 filterManager . setFilters ( filterManager . getGlobalFilters ( ) ) ;
521523 $scope . fetch ( ) ;
522524 } ;
@@ -568,6 +570,7 @@ function VisualizeAppController(
568570 } ) ;
569571 savedVis . visState = stateContainer . getState ( ) . vis ;
570572 savedVis . uiStateJSON = angular . toJson ( $scope . uiState . getChanges ( ) ) ;
573+ $appStatus . dirty = false ;
571574
572575 return savedVis . save ( saveOptions ) . then (
573576 function ( id ) {
@@ -649,7 +652,6 @@ function VisualizeAppController(
649652 $scope . unlink = function ( ) {
650653 if ( ! $scope . linked ) return ;
651654
652- $scope . linked = false ;
653655 const searchSourceParent = searchSource . getParent ( ) ;
654656 const searchSourceGrandparent = searchSourceParent . getParent ( ) ;
655657
@@ -660,8 +662,10 @@ function VisualizeAppController(
660662 _ . union ( searchSource . getOwnField ( 'filter' ) , searchSourceParent . getOwnField ( 'filter' ) )
661663 ) ;
662664
663- stateContainer . transitions . set ( 'query' , searchSourceParent . getField ( 'query' ) ) ;
664- stateContainer . transitions . set ( 'filters' , searchSourceParent . getField ( 'filter' ) ) ;
665+ stateContainer . transitions . unlinkSavedSearch (
666+ searchSourceParent . getField ( 'query' ) ,
667+ searchSourceParent . getField ( 'filter' )
668+ ) ;
665669 searchSource . setField ( 'index' , searchSourceParent . getField ( 'index' ) ) ;
666670 searchSource . setParent ( searchSourceGrandparent ) ;
667671
0 commit comments