start AngularJS curbside page app
authorGalen Charlton <gmc@equinoxinitiative.org>
Tue, 26 May 2020 21:17:48 +0000 (17:17 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Tue, 26 May 2020 21:17:48 +0000 (17:17 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/templates/staff/circ/curbside/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/circ/curbside/t_main.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/web/js/ui/default/staff/circ/curbside/app.js [new file with mode: 0644]
Open-ILS/web/js/ui/default/staff/services/navbar.js

diff --git a/Open-ILS/src/templates/staff/circ/curbside/index.tt2 b/Open-ILS/src/templates/staff/circ/curbside/index.tt2
new file mode 100644 (file)
index 0000000..2eae7ae
--- /dev/null
@@ -0,0 +1,19 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Curbside Pickup"); 
+  ctx.page_app = "egCurbsideApp";
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/grid.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/curbside/app.js"></script>
+<script>
+angular.module('egCoreMod').run(['egStrings', function(s) {
+}]);
+</script>
+[% END %]
+
+<div ng-view></div>
+
+[% END %]
+
diff --git a/Open-ILS/src/templates/staff/circ/curbside/t_main.tt2 b/Open-ILS/src/templates/staff/circ/curbside/t_main.tt2
new file mode 100644 (file)
index 0000000..768e532
--- /dev/null
@@ -0,0 +1,39 @@
+<div class="container-fluid" style="text-align:center">
+  <div class="alert alert-info alert-less-pad strong-text-2">
+    <span>[% l('Curbside Pickup') %]</span>
+  </div>
+</div>
+
+<div class="row col-md-12 pad-vert">
+  <div class="col-md-12">
+    <uib-tabset active="active_tab"> 
+      <!-- note that non-numeric index values must be enclosed in single-quotes,
+           otherwise selecting the active table won't work cleanly -->
+      <uib-tab index="'to-be-staged'" heading="[% l('To Be Staged') %]">
+        <div class="container-fluid">
+           XXX
+        </div>
+      </uib-tab>
+      <uib-tab index="'staged'" heading="[% l('Staged And Ready') %]">
+        <div class="container-fluid">
+           XXX
+        </div>
+      </uib-tab>
+      <uib-tab index="'arrived'" heading="[% l('Patron Is Outside') %]">
+        <div class="container-fluid">
+           XXX
+        </div>
+      </uib-tab>
+      <uib-tab index="'delivered'" heading="[% l('Delivered Today') %]">
+        <div class="container-fluid">
+           XXX
+        </div>
+      </uib-tab>
+      <uib-tab index="'schedule'" heading="[% l('Schedule Pickup') %]">
+        <div class="container-fluid">
+           XXX
+        </div>
+      </uib-tab>
+    </uib-tabset>
+  </div>
+</div>
index 220c3d1..b483c88 100644 (file)
               <span>[% l('Offline Circulation') %]</span>
             </a>
           </li>
+          <li ng-if="enableCurbside" class="divider"></li>
+          <li ng-if="enableCurbside">
+            <a href="./circ/curbside/index" target="_self" ng-class="{disabled : curbsideDisabled()}">
+              <span class="glyphicon glyphicon-road"></span>
+              <span>[% l('Curbside Pickup') %]</span>
+            </a>
+          </li>
         </ul>
       </li><!-- circ -->
 
diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/app.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/app.js
new file mode 100644 (file)
index 0000000..df25ee9
--- /dev/null
@@ -0,0 +1,45 @@
+angular.module('egCurbsideApp', ['ui.bootstrap','ngRoute','egCoreMod','egGridMod','ngToast','egCurbsideAppDep']);
+angular.module('egCurbsideAppDep', []);
+
+angular.module('egCurbsideApp')
+.config(['ngToastProvider', function(ngToastProvider) {
+  ngToastProvider.configure({
+    verticalPosition: 'bottom',
+    animation: 'fade'
+  });
+}])
+
+.config(function($routeProvider, $locationProvider, $compileProvider) {
+    $locationProvider.html5Mode(true);
+    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|mailto|blob):/); // grid export
+
+    var resolver = {delay : function(egStartup) {return egStartup.go()}};
+
+    $routeProvider.when('/circ/curbside/index', {
+        templateUrl: './circ/curbside/t_main',
+        controller: 'CurbsideCtrl',
+        resolve : resolver
+    });
+
+    $routeProvider.when('/circ/curbside/:active_tab', {
+        templateUrl: './circ/curbside/t_main',
+        controller: 'CurbsideCtrl',
+        resolve : resolver
+    });
+
+    // default page
+    $routeProvider.otherwise({redirectTo : '/circ/curbside/index'});
+})
+    
+.controller('CurbsideCtrl',
+       ['$scope','$routeParams','$location',
+function($scope , $routeParams , $location ) {
+    $scope.active_tab = $routeParams.active_tab ?  $routeParams.active_tab : 'to-be-staged';
+
+    $scope.$watch('active_tab', function(newVal, oldVal) {
+        if (oldVal != newVal) {
+            var new_path = '/circ/curbside/' + $scope.active_tab;
+            $location.path(new_path);
+        }
+    });
+}])
index b6ff1d3..2cca5dd 100644 (file)
@@ -112,7 +112,8 @@ angular.module('egCoreMod')
 
                             egCore.org.settings([
                                 'ui.staff.max_recent_patrons',
-                                'ui.staff.angular_catalog.enabled'
+                                'ui.staff.angular_catalog.enabled',
+                                'circ.curbside'
                             ]).then(function(s) {
                                 var val = s['ui.staff.max_recent_patrons'];
                                 $scope.showRecentPatron = val > 0;
@@ -120,6 +121,8 @@ angular.module('egCoreMod')
 
                                 $scope.showAngularCatalog = 
                                     s['ui.staff.angular_catalog.enabled'];
+                                $scope.enableCurbside = 
+                                    s['circ.curbside'];
                             });
                         }
                         // need to defer initialization of hotkeys to this point