Browse Source

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

Johan Ahlen 8 years ago
parent
commit
596f286502
1 changed files with 32 additions and 9 deletions
  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',
                 type: 'sql',
                 icon: 'fa-database',
                 icon: 'fa-database',
                 minHeight: 75
                 minHeight: 75
-              })
+              });
               panels.push(sqlPanel);
               panels.push(sqlPanel);
 
 
               huePubSub.subscribe('assist.show.sql', function () {
               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.activeType.subscribe(function (newType) {
           self.selectedFunction(selectedFunctionPerType[newType]);
           self.selectedFunction(selectedFunctionPerType[newType]);
           self.activeCategories(self.categories[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) {
         var updateType = function (type) {
           self.availableTypes().every(function (availableType) {
           self.availableTypes().every(function (availableType) {
@@ -2059,39 +2063,58 @@ from notebook.conf import get_ordered_interpreters
 
 
         self.schedulesAvailable = ko.observable(false);
         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) {
         if ('${ ENABLE_QUERY_SCHEDULING.get() }' === 'True' && IS_HUE_4) {
           var currentAppSub = huePubSub.subscribe('set.current.app.view.model', function (viewModel) {
           var currentAppSub = huePubSub.subscribe('set.current.app.view.model', function (viewModel) {
             self.schedulesAvailable(!!viewModel.selectedNotebook);
             self.schedulesAvailable(!!viewModel.selectedNotebook);
+            if (lastActiveTab === 'schedules') {
+              self.activeTab(self.schedulesAvailable() ? 'schedules' : (self.assistantAvailable() ? 'assistant' : 'functions'));
+            }
           });
           });
           self.disposals.push(currentAppSub.remove.bind(currentAppSub));
           self.disposals.push(currentAppSub.remove.bind(currentAppSub));
           huePubSub.publish('get.current.app.view.model');
           huePubSub.publish('get.current.app.view.model');
         } else {
         } else {
           // Right assist is only available in the Hue 3 editor and notebook.
           // Right assist is only available in the Hue 3 editor and notebook.
           self.schedulesAvailable('${ ENABLE_QUERY_SCHEDULING.get() }' === 'True');
           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) {
         var snippetTypeSub = huePubSub.subscribe('active.snippet.type.changed', function (type) {
           if (type === 'hive' || type === 'impala') {
           if (type === 'hive' || type === 'impala') {
-            if (!self.assistantAvailable() && self.activeTab() !== 'assistant') {
+            self.assistantAvailable(true);
+            if (lastActiveTab === 'assistant') {
               self.activeTab('assistant');
               self.activeTab('assistant');
             }
             }
-            self.assistantAvailable(true);
           } else {
           } else {
             if (self.activeTab() === 'assistant') {
             if (self.activeTab() === 'assistant') {
-              self.activeTab('functions');
+              var newTab = lastActiveTab === 'assistant' ? 'functions' : lastActiveTab;
+              if (self.activeTab() !== newTab) {
+                self.activeTab(newTab);
+              }
             }
             }
             self.assistantAvailable(false);
             self.assistantAvailable(false);
           }
           }
         });
         });
         self.disposals.push(snippetTypeSub.remove.bind(snippetTypeSub));
         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');
           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 () {
       RightAssistPanel.prototype.dispose = function () {