webstaff: teach egOrgSelector how to be sticky
authorGalen Charlton <gmc@esilibrary.com>
Fri, 16 Oct 2015 22:21:14 +0000 (22:21 +0000)
committerKathy Lussier <klussier@masslnc.org>
Tue, 2 Feb 2016 19:58:51 +0000 (14:58 -0500)
In order to make the org unit selector in the holdings view
to be "sticky", the egOrgSelector directive now accepts an
optional stickySetting attribute specifying the name of a
preference key for storing the last selected org unit.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
Open-ILS/web/js/ui/default/staff/services/ui.js

index 5a79b1f..e1eaa08 100644 (file)
@@ -4,7 +4,7 @@
     <div class="col-md-3">
       <div class="input-group">
         <span class="input-group-addon">[% l('Show holdings at or below') %]</span>
-        <eg-org-selector selected="holdings_ou" onchange="holdings_ou_changed"></eg-org-selector>
+        <eg-org-selector selected="holdings_ou" onchange="holdings_ou_changed" sticky-setting="cat.holdings_view_ou"></eg-org-selector>
       </div>
     </div>
   </div>
index fefe0c4..d52382c 100644 (file)
@@ -290,7 +290,11 @@ function($modal, $interpolate) {
             onchange : '=',
 
             // optional primary drop-down button label
-            label : '@'
+            label : '@',
+
+            // optional name of settings key for persisting
+            // the last selected org unit
+            stickySetting : '@'
         },
 
         // any reason to move this into a TT2 template?
@@ -310,8 +314,8 @@ function($modal, $interpolate) {
            + '</ul>'
           + '</div>',
 
-        controller : ['$scope','$timeout','egOrg','egAuth',
-              function($scope , $timeout , egOrg , egAuth) {
+        controller : ['$scope','$timeout','egOrg','egAuth','egCore',
+              function($scope , $timeout , egOrg , egAuth , egCore) {
 
             if ($scope.alldisabled) {
                 $scope.disable_button = $scope.alldisabled == 'true' ? true : false;
@@ -321,6 +325,7 @@ function($modal, $interpolate) {
 
             $scope.egOrg = egOrg; // for use in the link function
             $scope.egAuth = egAuth; // for use in the link function
+            $scope.hatch = egCore.hatch // for use in the link function
 
             // avoid linking the full fleshed tree to the scope by 
             // tossing in a flattened list.
@@ -340,6 +345,9 @@ function($modal, $interpolate) {
 
             $scope.orgChanged = function(org) {
                 $scope.selected = egOrg.get(org.id);
+                if ($scope.stickySetting) {
+                    egCore.hatch.setLocalItem($scope.stickySetting, org.id);
+                }
                 if ($scope.onchange) $scope.onchange($scope.selected);
             }
 
@@ -357,6 +365,13 @@ function($modal, $interpolate) {
                 }
             );
 
+            if (scope.stickySetting) {
+                var orgId = scope.hatch.getLocalItem(scope.stickySetting);
+                if (orgId) {
+                    scope.selected = scope.egOrg.get(orgId);
+                }
+            }
+
             if (!scope.selected && !scope.nodefault)
                 scope.selected = scope.egOrg.get(scope.egAuth.user().ws_ou());
         }