summaryrefslogtreecommitdiff
path: root/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js')
-rw-r--r--www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js
new file mode 100644
index 00000000..7306168a
--- /dev/null
+++ b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/js/api4.js
@@ -0,0 +1,43 @@
+(function($, _) {
+
+ // result is an array, but in js, an array is also an object
+ // Assign all the metadata properties to it, mirroring the results arrayObject in php
+ function arrayObject(data) {
+ var result = data.values || [];
+ if (_.isArray(result)) {
+ delete(data.values);
+ _.assign(result, data);
+ }
+ return result;
+ }
+
+ CRM.api4 = function(entity, action, params, index) {
+ return new Promise(function(resolve, reject) {
+ if (typeof entity === 'string') {
+ $.post(CRM.url('civicrm/ajax/api4/' + entity + '/' + action), {
+ params: JSON.stringify(params),
+ index: index
+ })
+ .done(function (data) {
+ resolve(arrayObject(data));
+ })
+ .fail(function (data) {
+ reject(data.responseJSON);
+ });
+ } else {
+ $.post(CRM.url('civicrm/ajax/api4'), {
+ calls: JSON.stringify(entity)
+ })
+ .done(function(data) {
+ _.each(data, function(item, key) {
+ data[key] = arrayObject(item);
+ });
+ resolve(data);
+ })
+ .fail(function (data) {
+ reject(data.responseJSON);
+ });
+ }
+ });
+ };
+})(CRM.$, CRM._); \ No newline at end of file