浏览代码

HUE-8550 [jb] Refresh job browser tabs on compute selection

Johan Ahlen 7 年之前
父节点
当前提交
0d63b5bb0f

+ 19 - 3
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -103,6 +103,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
               params: {
                 sourceType: 'jobs',
                 compute: compute,
+                onComputeSelect: onComputeSelect,
                 showDatabases: false,
                 showNamespaces: false
               }
@@ -2857,6 +2858,16 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         }
       };
 
+      self.onComputeSelect = function () {
+        var interfaceToSet = self.interface();
+        if (!self.availableInterfaces().some(function (availableInterface) {
+          return availableInterface.interface === interfaceToSet;
+        })) {
+          interfaceToSet = self.availableInterfaces()[0].interface;
+        }
+        self.selectInterface(interfaceToSet);
+      };
+
       self.jobs = new Jobs(self);
       self.job = ko.observable();
 
@@ -2899,7 +2910,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           return '/' + bits.join('/');
         }
         return path;
-      }
+      };
 
       self.formatProgress = function (progress) {
         if (typeof progress === 'function') {
@@ -2911,7 +2922,12 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         return progress;
       };
 
+      var loaded = false;
       self.load = function() {
+        if (loaded) {
+          return;
+        }
+        loaded = true;
         var h = window.location.hash;
         %if not is_mini:
         huePubSub.publish('graph.stop.refresh.view');
@@ -2941,7 +2957,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
               self.selectInterface('reset');
             }
         }
-      }
+      };
     };
 
 
@@ -2999,7 +3015,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
 
       window.onhashchange = function () {
         loadHash();
-      }
+      };
 
       huePubSub.subscribe('cluster.config.set.config', function (clusterConfig) {
         jobBrowserViewModel.appConfig(clusterConfig && clusterConfig['app_config']);

+ 15 - 0
desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako

@@ -92,12 +92,14 @@ from desktop.views import _ko
        *                                            observable is provided.
        * @param {boolean} [params.hideDatabases] - Can be used to force hide database selection even if a database
        *                                           observable is provided.
+       * @param {function} [params.onComputeSelect] - Callback when a new compute is selected (after initial set)
        * @constructor
        */
       var HueContextSelector = function (params) {
         var self = this;
 
         self.sourceType = params.sourceType;
+        self.disposals = [];
 
         self.loadingComputes = ko.observable(false);
         self.availableComputes = ko.observableArray();
@@ -116,6 +118,12 @@ from desktop.views import _ko
             })) {
               self.compute(computes[0]);
             }
+            if (params.onComputeSelect) {
+              var computeSub = self.compute.subscribe(params.onComputeSelect);
+              self.disposals.push(function () {
+                computeSub.dispose();
+              })
+            }
           }).always(function () {
             self.loadingComputes(false);
           });
@@ -270,6 +278,13 @@ from desktop.views import _ko
         });
       };
 
+      HueContextSelector.prototype.dispose = function () {
+        var self = this;
+        while (self.disposals.length) {
+          self.disposals.pop()();
+        }
+      };
+
       ko.components.register('hue-context-selector', {
         viewModel: HueContextSelector,
         template: { element: 'hue-context-selector-template' }