Avoid org tree retrieval race condition on patron app
authorBill Erickson <berickxx@gmail.com>
Wed, 3 Dec 2014 17:48:12 +0000 (12:48 -0500)
committerBill Erickson <berickxx@gmail.com>
Wed, 3 Dec 2014 17:58:51 +0000 (12:58 -0500)
Avoid calling egOrg.ancestors() during startup, because the org unit
tree is not guarantee to be available until startup has completed.  This
was causing an occasional JS excpetion in the patron app pages, which
prevented the pages from loading.

The error in question:

 TypeError: Cannot read property 'map' of undefined
    at Object.service.get (https://host/js/ui/default/staff/services/org.js:21:25)
    at Object.service.ancestors (https://host/js/ui/default/staff/services/org.js:34:28)
    at Object.egCore.env.classLoaders.actsc (https://host/js/ui/default/staff/circ/patron/app.js:41:37)
    at https://host/js/ui/default/staff/services/env.js:77:55
    at Object.r [as forEach] (https://host/js/ui/default/staff/build/js/angular.min.js:7:290)
    at Object.service.load (https://host/js/ui/default/staff/services/env.js:76:17)
    at https://host/js/ui/default/staff/services/startup.js:64:23
    at J (https://host/js/ui/default/staff/build/js/angular.min.js:101:96)
    at https://host/js/ui/default/staff/build/js/angular.min.js:102:259
    at h.$eval (https://host/js/ui/default/staff/build/js/angular.min.js:113:32)

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/web/js/ui/default/staff/circ/patron/app.js

index c607e29..c95ad9e 100644 (file)
@@ -35,19 +35,7 @@ angular.module('egPatronApp', ['ngRoute', 'ui.bootstrap',
             });
         }
 
-        // local stat cats are displayed in the summary bar on each page.
-        egCore.env.classLoaders.actsc = function() {
-            return egCore.pcrud.search('actsc', 
-                {owner : egCore.org.ancestors(
-                    egCore.auth.user().ws_ou(), true)},
-                {}, {atomic : true}
-            ).then(function(cats) {
-                egCore.env.absorbList(cats, 'actsc');
-            });
-        }
-
         egCore.env.loadClasses.push('aous');
-        egCore.env.loadClasses.push('actsc');
 
         // app-globally modify the default flesh fields for 
         // fleshed user retrieval.
@@ -61,7 +49,18 @@ angular.module('egPatronApp', ['ngRoute', 'ui.bootstrap',
             ]);
         }
 
-        return egCore.startup.go()
+        return egCore.startup.go().then(function() {
+
+            // This call requires orgs to be loaded, because it
+            // calls egCore.org.ancestors(), so call it after startup
+            return egCore.pcrud.search('actsc', 
+                {owner : egCore.org.ancestors(
+                    egCore.auth.user().ws_ou(), true)},
+                {}, {atomic : true}
+            ).then(function(cats) {
+                egCore.env.absorbList(cats, 'actsc');
+            });
+        });
     }]};
 
     $routeProvider.when('/circ/patron/search', {