From 68634edc0d1583eeeb33d7602c5e4bb0eeab64ee Mon Sep 17 00:00:00 2001 From: yuri Date: Wed, 30 Jan 2019 11:18:59 +0200 Subject: [PATCH] model collection factory promise support --- client/src/collection-factory.js | 38 +++++++++++++++++--------------- client/src/model-factory.js | 13 +++++++---- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/client/src/collection-factory.js b/client/src/collection-factory.js index 0bc89dde24..b48302ab49 100644 --- a/client/src/collection-factory.js +++ b/client/src/collection-factory.js @@ -40,24 +40,26 @@ modelFactory: null, create: function (name, callback, context) { - context = context || this; - - this.modelFactory.getSeed(name, function (seed) { - var orderBy = this.modelFactory.metadata.get(['entityDefs', name, 'collection', 'orderBy']); - var order = this.modelFactory.metadata.get(['entityDefs', name, 'collection', 'order']); - - var className = this.modelFactory.metadata.get(['clientDefs', name, 'collection']) || 'collection'; - - Espo.loader.require(className, function (collectionClass) { - var collection = new collectionClass(null, { - name: name, - orderBy: orderBy, - order: order - }); - collection.model = seed; - collection._user = this.modelFactory.user; - collection.entityType = name; - callback.call(context, collection); + return new Promise(function (resolve) { + context = context || this; + this.modelFactory.getSeed(name, function (seed) { + var orderBy = this.modelFactory.metadata.get(['entityDefs', name, 'collection', 'orderBy']); + var order = this.modelFactory.metadata.get(['entityDefs', name, 'collection', 'order']); + var className = this.modelFactory.metadata.get(['clientDefs', name, 'collection']) || 'collection'; + Espo.loader.require(className, function (collectionClass) { + var collection = new collectionClass(null, { + name: name, + orderBy: orderBy, + order: order + }); + collection.model = seed; + collection._user = this.modelFactory.user; + collection.entityType = name; + if (callback) { + callback.call(context, collection); + } + resolve(collection); + }.bind(this)); }.bind(this)); }.bind(this)); } diff --git a/client/src/model-factory.js b/client/src/model-factory.js index f1af4750b7..d7ba4c5d16 100644 --- a/client/src/model-factory.js +++ b/client/src/model-factory.js @@ -49,10 +49,15 @@ Espo.define('model-factory', [], function () { user: null, create: function (name, callback, context) { - context = context || this; - this.getSeed(name, function (seed) { - var model = new seed(); - callback.call(context, model); + return new Promise(function (resolve) { + context = context || this; + this.getSeed(name, function (seed) { + var model = new seed(); + if (callback) { + callback.call(context, model); + } + resolve(model); + }.bind(this)); }.bind(this)); },