From 3c8dd2bf0e365b8790637ed0fc1169cb136b21b4 Mon Sep 17 00:00:00 2001 From: Peter Haight Date: Tue, 30 Dec 2014 14:56:59 -0800 Subject: [PATCH] Updated crmApi to be latest from Angular.tpl When I did the last bit of merging, I missed the changes to this function in Angular.tpl which I've moved here. --- js/angular-crmApp.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/js/angular-crmApp.js b/js/angular-crmApp.js index ed7d1c2922..95b896a512 100644 --- a/js/angular-crmApp.js +++ b/js/angular-crmApp.js @@ -7,14 +7,31 @@ }); } ]); - crmApp.factory('crmApi', function() { + crmApp.factory('crmApi', function($q) { return function(entity, action, params, message) { - // JSON serialization in CRM.api3 is not aware of Angular metadata like $$hash - if (CRM._.isObject(entity)) { - return CRM.api3(eval('('+angular.toJson(entity)+')'), message); + // JSON serialization in CRM.api3 is not aware of Angular metadata like $$hash, so use angular.toJson() + var deferred = $q.defer(); + var p; + if (_.isObject(entity)) { + p = CRM.api3(eval('('+angular.toJson(entity)+')'), message); } else { - return CRM.api3(entity, action, eval('('+angular.toJson(params)+')'), message); + p = CRM.api3(entity, action, eval('('+angular.toJson(params)+')'), message); } + // CRM.api3 returns a promise, but the promise doesn't really represent errors as errors, so we + // convert them + p.then( + function(result) { + if (result.is_error) { + deferred.reject(result); + } else { + deferred.resolve(result); + } + }, + function(error) { + deferred.reject(error); + } + ); + return deferred.promise; }; }); crmApp.factory('crmLegacy', function() { -- 2.25.1