diff --git a/src/javascripts/ng-admin/Crud/CrudModule.js b/src/javascripts/ng-admin/Crud/CrudModule.js index e8e7384c..ab123829 100644 --- a/src/javascripts/ng-admin/Crud/CrudModule.js +++ b/src/javascripts/ng-admin/Crud/CrudModule.js @@ -27,7 +27,6 @@ define(function (require) { CrudModule.controller('BatchDeleteController', require('ng-admin/Crud/delete/BatchDeleteController')); CrudModule.service('EntryFormatter', require('ng-admin/Crud/misc/EntryFormatter')); - CrudModule.service('PromisesResolver', require('ng-admin/Crud/misc/PromisesResolver')); CrudModule.service('RetrieveQueries', require('ng-admin/Crud/repository/RetrieveQueries')); CrudModule.service('CreateQueries', require('ng-admin/Crud/repository/CreateQueries')); CrudModule.service('UpdateQueries', require('ng-admin/Crud/repository/UpdateQueries')); diff --git a/src/javascripts/ng-admin/Crud/misc/PromisesResolver.js b/src/javascripts/ng-admin/Crud/misc/PromisesResolver.js deleted file mode 100644 index 7aa426d7..00000000 --- a/src/javascripts/ng-admin/Crud/misc/PromisesResolver.js +++ /dev/null @@ -1,56 +0,0 @@ -/*global define*/ -define(function () { - 'use strict'; - - function PromisesResolver($q) { - - function allEvenFailed(promises) { - if (!Array.isArray(promises)) { - throw 'allEvenFailed can only handle an array of promises'; - } - var deferred = $q.defer(); - if (promises.length === 0) { - deferred.resolve([]); - return deferred.promise; - } - - var states = []; - var results = []; - - promises.forEach(function (promise, key) { - states[key] = false; // promises are not resolved by default - }); - - promises.forEach(function (promise, key) { - function resolve(result) { - states[key] = true; - results[key] = result; // result may be an error - for (var i in states) { - if (!states[i]) { - return; - } - } - deferred.resolve(results); - } - function resolveSuccess(result) { - return resolve({ status: 'success', result: result }); - } - function resolveError(result) { - return resolve({ status: 'error', error: result }) - } - // whether the promise ends with success or error, consider it done - $q.when(promise).then(resolveSuccess, resolveError); - }); - - return deferred.promise; - }; - - return { - allEvenFailed: allEvenFailed - }; - } - - PromisesResolver.$inject = ['$q']; - - return PromisesResolver; -}); diff --git a/src/javascripts/ng-admin/Crud/repository/CreateQueries.js b/src/javascripts/ng-admin/Crud/repository/CreateQueries.js index fbab2a39..b020426a 100644 --- a/src/javascripts/ng-admin/Crud/repository/CreateQueries.js +++ b/src/javascripts/ng-admin/Crud/repository/CreateQueries.js @@ -32,7 +32,7 @@ define(function (require) { }); }; - CreateQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'PromisesResolver']; + CreateQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'AdminDescription']; return CreateQueries; }); diff --git a/src/javascripts/ng-admin/Crud/repository/DeleteQueries.js b/src/javascripts/ng-admin/Crud/repository/DeleteQueries.js index dd816ea7..4aad3289 100644 --- a/src/javascripts/ng-admin/Crud/repository/DeleteQueries.js +++ b/src/javascripts/ng-admin/Crud/repository/DeleteQueries.js @@ -47,7 +47,7 @@ define(function (require) { return this.$q.all(promises); }; - DeleteQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'PromisesResolver']; + DeleteQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'AdminDescription']; return DeleteQueries; }); diff --git a/src/javascripts/ng-admin/Crud/repository/Queries.js b/src/javascripts/ng-admin/Crud/repository/Queries.js index 786b0bbf..04e786f4 100644 --- a/src/javascripts/ng-admin/Crud/repository/Queries.js +++ b/src/javascripts/ng-admin/Crud/repository/Queries.js @@ -10,16 +10,16 @@ define(function () { * @param {Application} Configuration * @constructor */ - function Queries($q, Restangular, Configuration, PromisesResolver) { + function Queries($q, Restangular, Configuration, AdminDescription) { this.$q = $q; this.Restangular = Restangular; this.config = Configuration(); - this.PromisesResolver = PromisesResolver; + this.PromisesResolver = AdminDescription.getPromisesResolver(); this.Restangular.setFullResponse(true); // To get also the headers } - Queries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'PromisesResolver']; + Queries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'AdminDescription']; return Queries; }); diff --git a/src/javascripts/ng-admin/Crud/repository/RetrieveQueries.js b/src/javascripts/ng-admin/Crud/repository/RetrieveQueries.js index c5314c30..9b4be02d 100644 --- a/src/javascripts/ng-admin/Crud/repository/RetrieveQueries.js +++ b/src/javascripts/ng-admin/Crud/repository/RetrieveQueries.js @@ -245,7 +245,7 @@ define(function (require) { }); }; - RetrieveQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'PromisesResolver']; + RetrieveQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'AdminDescription']; return RetrieveQueries; }); diff --git a/src/javascripts/ng-admin/Crud/repository/UpdateQueries.js b/src/javascripts/ng-admin/Crud/repository/UpdateQueries.js index 1e455d6f..cdf61495 100644 --- a/src/javascripts/ng-admin/Crud/repository/UpdateQueries.js +++ b/src/javascripts/ng-admin/Crud/repository/UpdateQueries.js @@ -36,7 +36,7 @@ define(function (require) { }); }; - UpdateQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'PromisesResolver']; + UpdateQueries.$inject = ['$q', 'Restangular', 'NgAdminConfiguration', 'AdminDescription']; return UpdateQueries; }); diff --git a/src/javascripts/ng-admin/es6/lib/Factory.js b/src/javascripts/ng-admin/es6/lib/Factory.js index 2295fd97..c9868a2b 100644 --- a/src/javascripts/ng-admin/es6/lib/Factory.js +++ b/src/javascripts/ng-admin/es6/lib/Factory.js @@ -1,6 +1,7 @@ import Application from "./Application"; import Entity from "./Entity/Entity"; import DataStore from "./DataStore/DataStore"; +import PromisesResolver from "./Utils/PromisesResolver"; import Field from "./Field/Field"; import BooleanField from "./Field/BooleanField"; @@ -66,6 +67,10 @@ class Factory { return new DataStore(); } + getPromisesResolver() { + return PromisesResolver; + } + _init() { this.registerFieldType('boolean', BooleanField); this.registerFieldType('choice', ChoiceField); diff --git a/src/javascripts/ng-admin/es6/lib/Utils/PromisesResolver.js b/src/javascripts/ng-admin/es6/lib/Utils/PromisesResolver.js new file mode 100644 index 00000000..fa496a92 --- /dev/null +++ b/src/javascripts/ng-admin/es6/lib/Utils/PromisesResolver.js @@ -0,0 +1,48 @@ + +class PromisesResolver { + static allEvenFailed(promises) { + if (!Array.isArray(promises)) { + throw 'allEvenFailed can only handle an array of promises'; + } + + return new Promise(function (resolve, reject) { + if (promises.length === 0) { + return resolve([]); + } + + let states = [], + results = []; + + promises.forEach((promise, key) => { + states[key] = false; // promises are not resolved by default + }); + + promises.forEach((promise, key) => { + function resolveState(result) { + states[key] = true; + results[key] = result; // result may be an error + for (let i in states) { + if (!states[i]) { + return; + } + } + + resolve(results); + } + + function resolveSuccess(result) { + return resolveState({status: 'success', result: result}); + } + + function resolveError(result) { + return resolveState({status: 'error', error: result}) + } + + // whether the promise ends with success or error, consider it done + promise.then(resolveSuccess, resolveError); + }); + }); + } +} + +export default PromisesResolver;