Przeglądaj źródła

HUE-9124 [frontend] Have the assist stay in the db list if it was visible prior to a refresh

Johan Ahlen 5 lat temu
rodzic
commit
93fa7f8499

+ 6 - 1
desktop/core/src/desktop/js/apps/notebook/notebook.js

@@ -907,10 +907,15 @@ class Notebook {
       () => {
         if (self.type().indexOf('query') === 0) {
           const whenDatabaseAvailable = function(snippet) {
+            const lastSelectedDb = apiHelper.getFromTotalStorage(
+              'assist_' + snippet.type() + '_' + snippet.namespace().id,
+              'lastSelectedDb'
+            );
+
             huePubSub.publish('assist.set.database', {
               source: snippet.type(),
               namespace: snippet.namespace(),
-              name: snippet.database()
+              name: lastSelectedDb === '' ? '' : snippet.database()
             });
           };
 

+ 5 - 3
desktop/core/src/desktop/js/apps/table_browser/metastoreSource.js

@@ -55,11 +55,13 @@ class MetastoreSource {
 
     huePubSub.subscribe('assist.db.panel.ready', () => {
       this.lastLoadNamespacesDeferred.done(() => {
-        const lastSelectedDb = apiHelper.getFromTotalStorage(
+        let lastSelectedDb = apiHelper.getFromTotalStorage(
           'assist_' + this.sourceType + '_' + this.namespace.id,
-          'lastSelectedDb',
-          'default'
+          'lastSelectedDb'
         );
+        if (!lastSelectedDb && lastSelectedDb !== '') {
+          lastSelectedDb = 'default';
+        }
         huePubSub.publish('assist.set.database', {
           source: this.type,
           namespace: this.namespace().namespace,

+ 15 - 5
desktop/core/src/desktop/js/ko/components/assist/assistDbNamespace.js

@@ -156,6 +156,12 @@ class AssistDbNamespace {
             name: self.selectedDatabase().catalogEntry.name
           });
         }
+      } else {
+        apiHelper.setInTotalStorage(
+          'assist_' + self.sourceType + '_' + self.namespace.id,
+          'lastSelectedDb',
+          ''
+        );
       }
     };
 
@@ -176,15 +182,18 @@ class AssistDbNamespace {
         self.selectedDatabaseChanged();
         return;
       }
-      const lastSelectedDb = apiHelper.getFromTotalStorage(
+      let lastSelectedDb = apiHelper.getFromTotalStorage(
         'assist_' + self.sourceType + '_' + self.namespace.id,
-        'lastSelectedDb',
-        'default'
+        'lastSelectedDb'
       );
+
+      if (!lastSelectedDb && lastSelectedDb !== '') {
+        lastSelectedDb = 'default';
+      }
       if (lastSelectedDb && self.dbIndex[lastSelectedDb]) {
         self.selectedDatabase(self.dbIndex[lastSelectedDb]);
         self.selectedDatabaseChanged();
-      } else if (self.databases().length > 0) {
+      } else if (lastSelectedDb && self.databases().length > 0) {
         self.selectedDatabase(self.databases()[0]);
         self.selectedDatabaseChanged();
       }
@@ -273,9 +282,10 @@ class AssistDbNamespace {
         if (self.catalogEntry === details.entry) {
           self.initDatabases();
         } else {
+          const targetPath = details.entry.path.join('.');
           const findAndReloadInside = entries => {
             return entries.some(entry => {
-              if (entry.catalogEntry.path.join('.') === details.entry.path.join('.')) {
+              if (entry.catalogEntry.path.join('.') === targetPath) {
                 entry.catalogEntry = details.entry;
                 entry.loadEntries();
                 return true;

+ 8 - 3
desktop/core/src/desktop/js/ko/components/assist/ko.assistDbPanel.js

@@ -695,11 +695,13 @@ class AssistDbPanel {
                     name: assistDbSource.selectedNamespace().selectedDatabase().name
                   });
                 } else {
-                  const lastSelectedDb = apiHelper.getFromTotalStorage(
+                  let lastSelectedDb = apiHelper.getFromTotalStorage(
                     'assist_' + source + '_' + assistDbSource.selectedNamespace().namespace.id,
-                    'lastSelectedDb',
-                    'default'
+                    'lastSelectedDb'
                   );
+                  if (!lastSelectedDb && lastSelectedDb !== '') {
+                    lastSelectedDb = 'default';
+                  }
                   deferred.resolve({
                     sourceType: source,
                     namespace: assistDbSource.selectedNamespace().namespace,
@@ -857,6 +859,9 @@ class AssistDbPanel {
           this.selectedSource()
             .selectedNamespace()
             .selectedDatabase(null);
+          this.selectedSource()
+            .selectedNamespace()
+            .selectedDatabaseChanged();
         } else if (window.HAS_MULTI_CLUSTER) {
           this.selectedSource().selectedNamespace(null);
         } else {

+ 21 - 13
desktop/core/src/desktop/js/ko/components/ko.contextSelector.js

@@ -434,18 +434,24 @@ HueContextSelector.prototype.reloadDatabases = function() {
                   self.availableDatabases([]);
                 })
                 .always(() => {
+                  let lastSelectedDb = apiHelper.getFromTotalStorage(
+                    'assist_' +
+                      ko.unwrap(self.sourceType) +
+                      '_' +
+                      self[TYPES_INDEX.namespace.name]().id,
+                    'lastSelectedDb'
+                  );
+
+                  const updateAssist = lastSelectedDb !== '';
+
                   if (
                     !self.database() ||
                     self.availableDatabases().indexOf(self.database()) === -1
                   ) {
-                    const lastSelectedDb = apiHelper.getFromTotalStorage(
-                      'assist_' +
-                        ko.unwrap(self.sourceType) +
-                        '_' +
-                        self[TYPES_INDEX.namespace.name]().id,
-                      'lastSelectedDb',
-                      'default'
-                    );
+                    if (!lastSelectedDb) {
+                      lastSelectedDb = 'default';
+                    }
+
                     if (
                       self.availableDatabases().length === 0 ||
                       self.availableDatabases().indexOf(lastSelectedDb) !== -1
@@ -457,11 +463,13 @@ HueContextSelector.prototype.reloadDatabases = function() {
                   }
                   self.loadingDatabases(false);
 
-                  huePubSub.publish('assist.set.database', {
-                    source: ko.unwrap(self.sourceType),
-                    namespace: self[TYPES_INDEX.namespace.name](),
-                    name: self.database()
-                  });
+                  if (updateAssist) {
+                    huePubSub.publish('assist.set.database', {
+                      source: ko.unwrap(self.sourceType),
+                      namespace: self[TYPES_INDEX.namespace.name](),
+                      name: self.database()
+                    });
+                  }
                 });
             });
         }, 10);