Эх сурвалжийг харах

HUE-6068 [assist] Let the contents of the right-click context menu be dependent on the active app

Johan Ahlen 8 жил өмнө
parent
commit
2f44bab

+ 9 - 0
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -825,6 +825,15 @@
     }
   };
 
+  ko.bindingHandlers.appAwareTemplateContextMenu = {
+    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+      viewModel.$currentApp = ko.observable('');
+      huePubSub.subscribe('set.current.app.name', viewModel.$currentApp);
+      huePubSub.publish('get.current.app.name');
+      ko.bindingHandlers.templateContextMenu.init(element, valueAccessor, allBindings, viewModel, bindingContext);
+    }
+  };
+
   ko.bindingHandlers.templateContextMenu = {
     init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
       var options = valueAccessor();

+ 5 - 5
desktop/core/src/desktop/templates/assist.mako

@@ -85,14 +85,14 @@ from notebook.conf import get_ordered_interpreters
   <script type="text/html" id="sql-context-items">
     <!-- ko if: typeof definition !== 'undefined' -->
     <li><a href="javascript:void(0);" data-bind="click: function (data) { showContextPopover(data, { target: $parentContext.$contextSourceElement }, { left: 4, top: 2 }); }"><i class="fa fa-fw fa-info"></i> ${ _('Show details') }</a></li>
-    <!-- ko if: !definition.isDatabase -->
+    <!-- ko if: !definition.isDatabase && $currentApp() === 'editor' -->
     <li><a href="javascript:void(0);" data-bind="click: dblClick"><i class="fa fa-fw fa-paste"></i> ${ _('Insert at cursor') }</a></li>
     <!-- /ko -->
     <!-- ko if: definition.isView || definition.isTable || definition.isDatabase -->
     <li><a href="javascript:void(0);" data-bind="click: openInMetastore"><i class="fa fa-fw fa-table"></i> ${ _('Open in Metastore') }</a></li>
     <!-- /ko -->
     %if ENABLE_QUERY_BUILDER.get():
-    <!-- ko if: definition.isColumn -->
+    <!-- ko if: definition.isColumn && $currentApp() === 'editor' -->
     <li class="divider"></li>
     <!-- ko template: { name: 'query-builder-context-items' } --><!-- /ko -->
     <!-- /ko -->
@@ -142,14 +142,14 @@ from notebook.conf import get_ordered_interpreters
   </script>
 
   <script type="text/html" id="assist-database-entry">
-    <li class="assist-table" data-bind="templateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visibleOnHover: { selector: '.database-actions' }">
+    <li class="assist-table" data-bind="appAwareTemplateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visibleOnHover: { selector: '.database-actions' }">
       <!-- ko template: { name: 'assist-database-actions' } --><!-- /ko -->
       <a class="assist-table-link" href="javascript: void(0);" data-bind="click: function () { $parent.selectedDatabase($data); $parent.selectedDatabaseChanged(); }"><i class="fa fa-fw fa-database muted valign-middle"></i> <span class="highlightable" data-bind="text: definition.name, css: { 'highlight': highlight() }"></span></a>
     </li>
   </script>
 
   <script type="text/html" id="assist-table-entry">
-    <li class="assist-table" data-bind="templateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visibleOnHover: { override: statsVisible, selector: '.table-actions' }">
+    <li class="assist-table" data-bind="appAwareTemplateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visibleOnHover: { override: statsVisible, selector: '.table-actions' }">
       <div class="assist-actions table-actions" style="opacity: 0">
         <a class="inactive-action" href="javascript:void(0)" data-bind="visible: navigationSettings.showStats, click: showContextPopover, css: { 'blue': statsVisible }"><i class="fa fa-fw fa-info" title="${_('Show details')}"></i></a>
         <a class="inactive-action" href="javascript:void(0)" data-bind="visible: navigationSettings.openItem, click: openItem"><i class="fa fa-long-arrow-right" title="${_('Open')}"></i></a>
@@ -164,7 +164,7 @@ from notebook.conf import get_ordered_interpreters
   </script>
 
   <script type="text/html" id="assist-column-entry">
-    <li data-bind="templateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visible: ! hasErrors(), visibleOnHover: { childrenOnly: true, override: statsVisible, selector: definition.isView ? '.table-actions' : '.column-actions' }, css: { 'assist-table': definition.isView, 'assist-column': definition.isColumn || definition.isComplex }">
+    <li data-bind="appAwareTemplateContextMenu: { template: 'sql-context-items', scrollContainer: '.assist-db-scrollable' }, visible: ! hasErrors(), visibleOnHover: { childrenOnly: true, override: statsVisible, selector: definition.isView ? '.table-actions' : '.column-actions' }, css: { 'assist-table': definition.isView, 'assist-column': definition.isColumn || definition.isComplex }">
       <div class="assist-actions column-actions" style="opacity: 0">
         <a class="inactive-action" href="javascript:void(0)" data-bind="visible: navigationSettings.showStats, click: showContextPopover, css: { 'blue': statsVisible }"><i class="fa fa-fw fa-info" title="${_('Show details')}"></i></a>
       </div>

+ 10 - 0
desktop/core/src/desktop/templates/common_header.mako

@@ -160,6 +160,16 @@ if USE_NEW_EDITOR.get():
 
   <script type="text/javascript">
     var IS_HUE_4 = false;
+
+    huePubSub.subscribe('get.current.app.name', function () {
+      var appName = '';
+      if ('${ 'metastore' in apps }' === 'True' && location.href.indexOf('${apps['metastore'].display_name}') !== -1) {
+        appName = 'metastore';
+      } else if (location.href.indexOf('${ url('notebook:editor') }') !== -1) {
+        appName = 'editor'
+      }
+      huePubSub.publish('set.current.app.name', appName);
+    });
   </script>
 
 </head>

+ 6 - 1
desktop/core/src/desktop/templates/responsive.mako

@@ -620,7 +620,8 @@ ${ assist.assistPanel() }
 
         self.currentApp = ko.observable();
 
-        self.currentApp.subscribe(function () {
+        self.currentApp.subscribe(function (newApp) {
+          huePubSub.publish('set.current.app.name', newApp);
           self.getActiveAppViewModel(function (viewModel) {
             huePubSub.publish('set.current.app.view.model', viewModel);
           })
@@ -632,6 +633,10 @@ ${ assist.assistPanel() }
           })
         })
 
+        huePubSub.subscribe('get.current.app.name', function () {
+          huePubSub.publish('set.current.app.name', self.currentApp());
+        });
+
         self.isLoadingEmbeddable = ko.observable(false);
 
         self.extraEmbeddableURLParams = ko.observable('');