CRM-15855 - crmMailing - Fix autosave for attachments
[civicrm-core.git] / js / angular-crm-util.js
index b889346dcfd0e4cbee68d33be71a29c03965b5b0..f122c9c8e48735d8d09756e0d1302fb2e031a473 100644 (file)
     };
   });
 
+  // usage:
+  // var block = $scope.block = crmBlocker();
+  // $scope.save = function() { return block(crmApi('MyEntity','create',...)); };
+  // <button ng-click="save()" ng-disabled="block.check()">Do something</button>
+  angular.module('crmUtil').factory('crmBlocker', function() {
+    return function() {
+      var blocks = 0;
+      var result = function(promise) {
+        blocks++;
+        promise.finally(function() {
+          blocks--;
+        });
+      };
+      result.check = function() {
+        return blocks > 0;
+      };
+      return result;
+    };
+  });
+
   angular.module('crmUtil').factory('crmLegacy', function() {
     return CRM;
   });
   // example: crmStatus('Saving', crmApi(...)).then(function(result){...})
   angular.module('crmUtil').factory('crmStatus', function($q){
     return function(options, aPromise){
-      return CRM.toAPromise($q, CRM.status(options, CRM.toJqPromise(aPromise)));
+      if (aPromise) {
+        return CRM.toAPromise($q, CRM.status(options, CRM.toJqPromise(aPromise)));
+      } else {
+        return CRM.toAPromise($q, CRM.status(options));
+      }
     };
   });