Browse Source

HUE-8599 [frontend] Add pubSub to force clear the context catalog from the job browser

Johan Ahlen 7 years ago
parent
commit
6fee714

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

@@ -2866,6 +2866,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             console.log(ko.mapping.toJSON(data));
             $(document).trigger("info", ko.mapping.toJSON(data));
             self.updateJobs();
+            huePubSub.publish('context.catalog.refresh');
           });
         } else {
           $.post("/metadata/api/analytic_db/create_cluster/", {
@@ -2881,10 +2882,11 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
             console.log(ko.mapping.toJSON(data));
             $(document).trigger("info", ko.mapping.toJSON(data));
             self.updateJobs();
+            huePubSub.publish('context.catalog.refresh');
           });
         }
         self.createClusterShow(false);
-      }
+      };
 
       self.control = function (action) {
         if (action == 'rerun') {

+ 20 - 0
desktop/core/src/desktop/static/desktop/js/contextCatalog.js

@@ -47,6 +47,26 @@ var ContextCatalog = (function () {
 
       self.clusters = {};
       self.clusterPromises = {};
+
+      var addPubSubs = function () {
+        if (typeof huePubSub !== 'undefined') {
+          huePubSub.subscribe('context.catalog.refresh', function () {
+            self.namespaces = {};
+            self.namespacePromises = {};
+
+            self.computes = {};
+            self.computePromises = {};
+
+            self.clusters = {};
+            self.clusterPromises = {};
+            huePubSub.publish('context.catalog.refreshed');
+          })
+        } else {
+          window.setTimeout(addPubSubs, 100);
+        }
+      };
+
+      addPubSubs();
     }
 
     ContextCatalog.prototype.getStore = function () {

+ 9 - 4
desktop/core/src/desktop/templates/ko_components/ko_context_selector.mako

@@ -174,17 +174,22 @@ from desktop.views import _ko
         });
 
         var refreshThrottle = -1;
-        var namespaceRefreshSub = huePubSub.subscribe('context.catalog.namespaces.refreshed', function (sourceType) {
-          if (ko.unwrap(self.sourceType) === sourceType) {
+
+        var refresh = function (sourceType) {
+          if (!sourceType || ko.unwrap(self.sourceType) === sourceType) {
             window.clearTimeout(refreshThrottle);
             refreshThrottle = window.setTimeout(function () {
-              TYPES.forEach(self.reload);
+              TYPES.forEach(self.reload.bind(self));
             }, 100)
           }
-        });
+        };
+
+        var namespaceRefreshSub = huePubSub.subscribe('context.catalog.namespaces.refreshed', refresh);
+        var contextCatalogRefreshSub = huePubSub.subscribe('context.catalog.refreshed', refresh);
         self.disposals.push(function () {
           window.clearTimeout(refreshThrottle);
           namespaceRefreshSub.remove();
+          contextCatalogRefreshSub.remove();
         });
 
         self.loadingDatabases = ko.observable(false);