瀏覽代碼

HUE-6388 [assist] Remember the last open panel in the right assist

Johan Ahlen 8 年之前
父節點
當前提交
596f286
共有 1 個文件被更改,包括 32 次插入9 次删除
  1. 32 9
      desktop/core/src/desktop/templates/assist.mako

+ 32 - 9
desktop/core/src/desktop/templates/assist.mako

@@ -1477,7 +1477,7 @@ from notebook.conf import get_ordered_interpreters
                 type: 'sql',
                 icon: 'fa-database',
                 minHeight: 75
-              })
+              });
               panels.push(sqlPanel);
 
               huePubSub.subscribe('assist.show.sql', function () {
@@ -1702,12 +1702,16 @@ from notebook.conf import get_ordered_interpreters
           })
         });
 
+        var apiHelper = ApiHelper.getInstance();
+
         self.activeType.subscribe(function (newType) {
           self.selectedFunction(selectedFunctionPerType[newType]);
           self.activeCategories(self.categories[newType]);
+          apiHelper.setInTotalStorage('assist', 'function.panel.active.type', newType);
         });
 
-        self.activeType(self.availableTypes()[0]);
+        var lastActiveType = apiHelper.getFromTotalStorage('assist', 'function.panel.active.type', self.availableTypes()[0]);
+        self.activeType(lastActiveType);
 
         var updateType = function (type) {
           self.availableTypes().every(function (availableType) {
@@ -2059,39 +2063,58 @@ from notebook.conf import get_ordered_interpreters
 
         self.schedulesAvailable = ko.observable(false);
 
+        var apiHelper = ApiHelper.getInstance();
+        var lastActiveTab = apiHelper.getFromTotalStorage('assist', 'last.open.right.panel');
+
         if ('${ ENABLE_QUERY_SCHEDULING.get() }' === 'True' && IS_HUE_4) {
           var currentAppSub = huePubSub.subscribe('set.current.app.view.model', function (viewModel) {
             self.schedulesAvailable(!!viewModel.selectedNotebook);
+            if (lastActiveTab === 'schedules') {
+              self.activeTab(self.schedulesAvailable() ? 'schedules' : (self.assistantAvailable() ? 'assistant' : 'functions'));
+            }
           });
           self.disposals.push(currentAppSub.remove.bind(currentAppSub));
           huePubSub.publish('get.current.app.view.model');
         } else {
           // Right assist is only available in the Hue 3 editor and notebook.
           self.schedulesAvailable('${ ENABLE_QUERY_SCHEDULING.get() }' === 'True');
+          if (lastActiveTab === 'schedules') {
+            self.activeTab(self.schedulesAvailable() ? 'schedules' : (self.assistantAvailable() ? 'assistant' : 'functions'));
+          }
         }
 
+
         var snippetTypeSub = huePubSub.subscribe('active.snippet.type.changed', function (type) {
           if (type === 'hive' || type === 'impala') {
-            if (!self.assistantAvailable() && self.activeTab() !== 'assistant') {
+            self.assistantAvailable(true);
+            if (lastActiveTab === 'assistant') {
               self.activeTab('assistant');
             }
-            self.assistantAvailable(true);
           } else {
             if (self.activeTab() === 'assistant') {
-              self.activeTab('functions');
+              var newTab = lastActiveTab === 'assistant' ? 'functions' : lastActiveTab;
+              if (self.activeTab() !== newTab) {
+                self.activeTab(newTab);
+              }
             }
             self.assistantAvailable(false);
           }
         });
         self.disposals.push(snippetTypeSub.remove.bind(snippetTypeSub));
 
-        if (!self.activeTab()) {
+        if (lastActiveTab === 'assistant' && self.assistantAvailable()) {
+          self.activeTab(lastActiveTab);
+        } else if (lastActiveTab === 'schedules' && self.schedulesAvailable()) {
+          self.activeTab(lastActiveTab);
+        } else if (self.assistantAvailable()) {
+          self.activeTab('assistant');
+        } else {
           self.activeTab('functions');
         }
 
-        if (self.assistantAvailable()) {
-          self.activeTab('assistant');
-        }
+        self.activeTab.subscribe(function (newValue) {
+          apiHelper.setInTotalStorage('assist', 'last.open.right.panel', newValue);
+        })
       }
 
       RightAssistPanel.prototype.dispose = function () {