Ver Fonte

HUE-9449 [tb] Use the last active editor or assist database as default when opening the table browser from the left nav

Johan Ahlen há 5 anos atrás
pai
commit
f569327cfa

+ 9 - 0
desktop/core/src/desktop/js/ko/components/assist/assistDbNamespace.js

@@ -21,6 +21,7 @@ import apiHelper from 'api/apiHelper';
 import AssistDbEntry from 'ko/components/assist/assistDbEntry';
 import dataCatalog from 'catalog/dataCatalog';
 import huePubSub from 'utils/huePubSub';
+import { ASSIST_ACTIVE_DB_CHANGED_EVENT } from './events';
 
 class AssistDbNamespace {
   /**
@@ -108,6 +109,14 @@ class AssistDbNamespace {
 
     self.selectedDatabase.subscribe(() => {
       const db = self.selectedDatabase();
+      if (db) {
+        huePubSub.publish(ASSIST_ACTIVE_DB_CHANGED_EVENT, {
+          connector: this.connector,
+          namespace: this.namespace,
+          database: db.name
+        });
+      }
+
       if (window.HAS_OPTIMIZER && db && !db.popularityIndexSet && !self.nonSqlType) {
         db.catalogEntry.loadOptimizerPopularityForChildren({ silenceErrors: true }).done(() => {
           const applyPopularity = () => {

+ 1 - 0
desktop/core/src/desktop/js/ko/components/assist/events.js

@@ -25,6 +25,7 @@ export const ASSIST_GET_DATABASE_EVENT = 'assist.get.database';
 export const ASSIST_SET_DATABASE_EVENT = 'assist.set.database';
 export const ASSIST_DB_HIGHLIGHT_EVENT = 'assist.db.highlight';
 export const ASSIST_DOC_HIGHLIGHT_EVENT = 'assist.doc.highlight';
+export const ASSIST_ACTIVE_DB_CHANGED_EVENT = 'assist.active.db.changed.event';
 
 export const ASSIST_SHOW_DOC_EVENT = 'assist.show.documents';
 export const ASSIST_SHOW_SQL_EVENT = 'assist.show.sql';

+ 36 - 8
desktop/core/src/desktop/js/ko/components/ko.sidebar.js

@@ -22,6 +22,7 @@ import componentUtils from 'ko/components/componentUtils';
 import huePubSub from 'utils/huePubSub';
 import I18n from 'utils/i18n';
 import { GET_KNOWN_CONFIG_EVENT, CONFIG_REFRESHED_EVENT } from 'utils/hueConfig';
+import { ASSIST_ACTIVE_DB_CHANGED_EVENT, ASSIST_SET_DATABASE_EVENT } from './assist/events';
 
 export const NAME = 'hue-sidebar';
 
@@ -350,6 +351,12 @@ class Sidebar {
       this.footerItems.forEach(testActive);
     };
 
+    const lastAssistDatabase = ko.observable();
+    const lastEditorDatabase = ko.observable();
+
+    huePubSub.subscribe(ASSIST_ACTIVE_DB_CHANGED_EVENT, lastAssistDatabase);
+    huePubSub.subscribe(ASSIST_SET_DATABASE_EVENT, lastEditorDatabase);
+
     const configUpdated = clusterConfig => {
       const items = [];
 
@@ -459,14 +466,35 @@ class Sidebar {
         }
         if (appConfig.browser && appConfig.browser.interpreters) {
           appConfig.browser.interpreters.forEach(browser => {
-            browserItems.push(
-              new SidebarItem({
-                displayName: browser.displayName,
-                url: browser.page,
-                icon: browser.type,
-                type: browser.type
-              })
-            );
+            if (browser.type === 'tables') {
+              browserItems.push(
+                new SidebarItem({
+                  displayName: browser.displayName,
+                  url: ko.pureComputed(() => {
+                    const dbDetails = lastEditorDatabase() || lastAssistDatabase();
+                    let url = browser.page;
+                    if (dbDetails) {
+                      if (dbDetails.name) {
+                        url += '/' + dbDetails.name;
+                      }
+                      url += '?connector_id=' + dbDetails.connector.id;
+                    }
+                    return url;
+                  }),
+                  icon: browser.type,
+                  type: browser.type
+                })
+              );
+            } else {
+              browserItems.push(
+                new SidebarItem({
+                  displayName: browser.displayName,
+                  url: browser.page,
+                  icon: browser.type,
+                  type: browser.type
+                })
+              );
+            }
           });
         }
         if (browserItems.length > 0) {