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

[assist] Store assist panel settings in total storage

Johan Ahlen 10 жил өмнө
parent
commit
121eedb184

+ 51 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -56,6 +56,57 @@
     return sourceType + "_" + self.user;
   };
 
+  /**
+   *
+   * @param {string} owner - 'assist', 'viewModelA' etc.
+   * @param {string} id
+   * @param {*} [value] - Optional, undefined and null will remove the value
+   */
+  AssistHelper.prototype.setInTotalStorage = function(owner, id, value) {
+    var self = this;
+    var cachedData = $.totalStorage("hue.user.settings." + self.getTotalStorageUserPrefix(owner)) || {};
+    if (typeof value !== 'undefined' && value !== null) {
+      cachedData[id] = value;
+      $.totalStorage("hue.user.settings." + self.getTotalStorageUserPrefix(owner), cachedData);
+    } else if (cachedData[id]) {
+      delete cachedData[id];
+      $.totalStorage("hue.user.settings." + self.getTotalStorageUserPrefix(owner), cachedData);
+    }
+  };
+
+  /**
+   *
+   * @param {string} owner - 'assist', 'viewModelA' etc.
+   * @param {string} id
+   * @param {*} [defaultValue]
+   * @returns {*}
+   */
+  AssistHelper.prototype.getFromTotalStorage = function(owner, id, defaultValue) {
+    var self = this;
+    var cachedData = $.totalStorage("hue.user.settings." + self.getTotalStorageUserPrefix(owner)) || {};
+    return typeof cachedData[id] !== 'undefined' ? cachedData[id] : defaultValue;
+  };
+
+  /**
+   * @param {string} owner - 'assist', 'viewModelA' etc.
+   * @param {string} id
+   * @param {Observable} observable
+   * @param {*} [defaultValue] - Optional default value to use if not in total storage initially
+   */
+  AssistHelper.prototype.withTotalStorage = function(owner, id, observable, defaultValue) {
+    var self = this;
+
+    var cachedValue = self.getFromTotalStorage(owner, id, defaultValue);
+
+    if (cachedValue !== 'undefined') {
+      observable(cachedValue);
+    }
+
+    observable.subscribe(function (newValue) {
+      self.setInTotalStorage(owner, id, newValue);
+    })
+  };
+
   /**
    * @param {string[]} pathParts
    * @param {function} successCallback

+ 6 - 1
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -872,13 +872,17 @@
 
   ko.bindingHandlers.assistVerticalResizer = {
     init: function (element, valueAccessor) {
+      var options = ko.unwrap(valueAccessor());
+
+      var assistHelper = options.assistHelper;
+
       var $resizer = $(element);
       var $above = $resizer.prev();
       var $below = $resizer.next();
 
       $resizer.parent().height();
 
-      var aboveRatio = 0.5;
+      var aboveRatio = assistHelper.getFromTotalStorage('assist', 'twoPanelAboveRatio', 0.5);
 
       var aboveInitialHeight = ($resizer.parent().height() - $resizer.height()) * aboveRatio;
       var belowInitialHeight = aboveInitialHeight;
@@ -899,6 +903,7 @@
         stop: function (event, ui) {
           ui.offset.top = 0;
           ui.position.top = 0;
+          assistHelper.setInTotalStorage('assist', 'twoPanelAboveRatio', aboveRatio);
         }
       });
 

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

@@ -284,7 +284,7 @@ from desktop.views import _ko
       <div style="overflow: auto;">
         <!-- ko template: 'assist-db-panel' --><!-- /ko -->
       </div>
-      <div class="assist-resizer" data-bind="assistVerticalResizer">
+      <div class="assist-resizer" data-bind="assistVerticalResizer: { assistHelper: assistHelper } ">
         <i class="fa fa-ellipsis-h"></i>
       </div>
       <div style="overflow: auto;">
@@ -452,17 +452,24 @@ from desktop.views import _ko
           errorLoadingDatabases: "${ _('There was a problem loading the databases') }",
           errorLoadingTablePreview: "${ _('There was a problem loading the table preview.') }"
         };
+        self.assistHelper = new AssistHelper(i18n, params.user);
 
         self.onlySql = params.onlySql;
-        self.showingDb = ko.observable(true);
-        self.showingHdfs = ko.observable(! self.onlySql);
+        self.showingDb = ko.observable();
+        self.showingHdfs = ko.observable();
+
+        self.assistHelper.withTotalStorage('assist', 'showingDb', self.showingDb, true);
+        if (self.onlySql) {
+          self.showingHdfs(false);
+        } else {
+          self.assistHelper.withTotalStorage('assist', 'showingHdfs', self.showingHdfs, true);
+        }
 
-        var assistHelper = new AssistHelper(i18n, params.user);
         self.sources = ko.observableArray();
         var sourceIndex = {};
         $.each(params.sourceTypes, function (idx, sourceType) {
           sourceIndex[sourceType.type] = new AssistDbSource({
-            assistHelper: assistHelper,
+            assistHelper: self.assistHelper,
             i18n: i18n,
             type: sourceType.type,
             name: sourceType.name,
@@ -477,12 +484,16 @@ from desktop.views import _ko
             type: 'dir'
           },
           parent: null,
-          assistHelper: assistHelper
+          assistHelper: self.assistHelper
         }));
         self.selectedHdfsEntry().open(true);
 
+        // TODO: When we can tell the root entry to go to a path:
+        // self.assistHelper.getFromTotalStorage('assist', 'currentHdfsPath', '/');
+
         huePubSub.subscribe('assist.selectHdfsEntry', function (entry) {
           self.selectedHdfsEntry(entry);
+          self.assistHelper.setInTotalStorage('assist', 'currentHdfsPath', entry.path);
         });
 
         self.selectedSource = ko.observable(null);
@@ -530,13 +541,13 @@ from desktop.views import _ko
         self.selectedSource.subscribe(function (newSource) {
           if (newSource) {
             newSource.initDatabases();
-            $.totalStorage("hue.assist.lastSelectedSource." + self.user, newSource.type);
+            self.assistHelper.setInTotalStorage('assist', 'lastSelectedSource', newSource.type);
           } else {
-            $.totalStorage("hue.assist.lastSelectedSource." + self.user, null);
+            self.assistHelper.setInTotalStorage('assist', 'lastSelectedSource');
           }
         });
 
-        var storageSourceType =  $.totalStorage("hue.assist.lastSelectedSource." + self.user);
+        var storageSourceType = self.assistHelper.getFromTotalStorage('assist', 'lastSelectedSource');
 
         if (! self.selectedSource()) {
           if (params.activeSourceType) {