Forráskód Böngészése

HUE-9207 [editor] Use connector dialect_properties to determine if risks should be shown or not

Johan Ahlen 5 éve
szülő
commit
ede69d2b3a

+ 13 - 16
desktop/core/src/desktop/js/ko/components/assist/ko.assistEditorContextPanel.js

@@ -201,21 +201,18 @@ class AssistEditorContextPanel {
     this.isSolr = ko.observable(false);
     this.activeTab = params.activeTab;
 
-    this.sourceType = ko.observable(params.sourceType());
+    this.connector = params.connector;
 
-    this.showRisks = ko.pureComputed(
-      () =>
-        window.HAS_OPTIMIZER &&
-        !this.isSolr() &&
-        (this.sourceType() === 'impala' || this.sourceType() === 'hive')
-    );
-
-    const typeSub = huePubSub.subscribe(ACTIVE_SNIPPET_CONNECTOR_CHANGED_EVENT, connector => {
-      this.sourceType(connector.dialect);
-    });
-
-    this.disposals.push(() => {
-      typeSub.remove();
+    this.showRisks = ko.pureComputed(() => {
+      if (!window.HAS_OPTIMIZER || this.isSolr()) {
+        return false;
+      }
+      if (this.connector().dialect_properties) {
+        // TODO: dialect_properties only for when ENABLE_CONNECTORS is enabled
+        return this.connector().dialect_properties.has_optimizer_risks;
+      } else {
+        return this.connector().dialect === 'impala' || this.connector().dialect === 'hive';
+      }
     });
 
     this.uploadingTableStats = ko.observable(false);
@@ -424,7 +421,7 @@ class AssistEditorContextPanel {
                     sourceType: activeLocations.type,
                     namespace: activeLocations.namespace,
                     compute: activeLocations.compute,
-                    connector: {}, // TODO: User connectors in assist editor context panel
+                    connector: this.connector(),
                     path: [database],
                     definition: { type: 'database' }
                   })
@@ -505,7 +502,7 @@ class AssistEditorContextPanel {
                                   sourceType: activeLocations.type,
                                   namespace: activeLocations.namespace,
                                   compute: activeLocations.compute,
-                                  connector: {}, // TODO: Use connectors in assist editor context panel
+                                  connector: this.connector(),
                                   path: []
                                 })
                                 .done(sourceEntry => {

+ 25 - 19
desktop/core/src/desktop/js/ko/components/assist/ko.rightAssistPanel.js

@@ -56,7 +56,7 @@ const TEMPLATE = `
   <!-- ko if: visible -->
   <div class="right-assist-contents">
     <!-- ko if: editorAssistantTabAvailable-->
-    <div data-bind="component: { name: 'assist-editor-context-panel', params: { activeTab: activeTab, sourceType: dialect } }, visible: activeTab() === 'editorAssistant'"></div>
+    <div data-bind="component: { name: 'assist-editor-context-panel', params: { activeTab: activeTab, connector: connector } }, visible: activeTab() === 'editorAssistant'"></div>
     <!-- /ko -->
 
     <!-- ko if: functionsTabAvailable -->
@@ -82,12 +82,26 @@ class RightAssistPanel {
 
     this.activeTab = ko.observable();
     this.visible = params.visible;
-    this.dialect = ko.observable();
+    this.connector = ko.observable();
 
-    this.editorAssistantTabAvailable = ko.observable(false);
-    this.dashboardAssistantTabAvailable = ko.observable(false);
-    this.functionsTabAvailable = ko.observable(false);
-    this.langRefTabAvailable = ko.observable(false);
+    this.editorAssistantTabAvailable = ko.pureComputed(
+      () => this.connector() && this.connector().is_sql
+    );
+    this.dashboardAssistantTabAvailable = ko.pureComputed(
+      () => this.connector() && this.connector().type === 'dashboard'
+    );
+    this.functionsTabAvailable = ko.pureComputed(
+      () =>
+        this.connector() &&
+        (this.connector().dialect === 'hive' ||
+          this.connector().dialect === 'impala' ||
+          this.connector().dialect === 'pig')
+    );
+    this.langRefTabAvailable = ko.pureComputed(
+      () =>
+        this.connector() &&
+        (this.connector().dialect === 'hive' || this.connector().dialect === 'impala')
+    );
     this.schedulesTabAvailable = ko.observable(false);
 
     this.lastActiveTabEditor = apiHelper.withTotalStorage(
@@ -141,16 +155,10 @@ class RightAssistPanel {
       }
     };
 
-    const updateContentsForType = (type, isSqlDialect) => {
-      this.dialect(type);
-
-      // TODO: Get these dynamically from langref and functions modules when moved to webpack
-      this.functionsTabAvailable(type === 'hive' || type === 'impala' || type === 'pig');
-      this.langRefTabAvailable(type === 'hive' || type === 'impala');
-      this.editorAssistantTabAvailable(isSqlDialect);
-      this.dashboardAssistantTabAvailable(type === 'dashboard');
+    const updateContentsForConnector = connector => {
+      this.connector(connector);
       this.schedulesTabAvailable(false);
-      if (type !== 'dashboard') {
+      if (connector.type !== 'dashboard') {
         if (window.ENABLE_QUERY_SCHEDULING) {
           huePubSub.subscribeOnce('set.current.app.view.model', viewModel => {
             // Async
@@ -167,15 +175,13 @@ class RightAssistPanel {
 
     const snippetTypeSub = huePubSub.subscribe(
       ACTIVE_SNIPPET_CONNECTOR_CHANGED_EVENT,
-      connector => {
-        updateContentsForType(connector.dialect, connector.is_sql);
-      }
+      updateContentsForConnector
     );
     this.disposals.push(snippetTypeSub.remove.bind(snippetTypeSub));
 
     const onAppChange = appName => {
       if (appName === 'dashboard') {
-        updateContentsForType(appName, false);
+        updateContentsForConnector({ type: appName, is_sql: false });
       }
     };
     huePubSub.publish('get.current.app.name', onAppChange);