diff --git a/platform/commonUI/browse/src/creation/CreationService.js b/platform/commonUI/browse/src/creation/CreationService.js index 984a3dbe85..baac8488c3 100644 --- a/platform/commonUI/browse/src/creation/CreationService.js +++ b/platform/commonUI/browse/src/creation/CreationService.js @@ -97,17 +97,7 @@ define( } return parentPersistence.persist().then(function () { - // Locate and return new Object in context of parent. - return parent - .useCapability('composition') - .then(function (children) { - var i; - for (i = 0; i < children.length; i += 1) { - if (children[i].getId() === id) { - return children[i]; - } - } - }); + return result; }); }); } diff --git a/platform/core/src/capabilities/CompositionCapability.js b/platform/core/src/capabilities/CompositionCapability.js index 1bf7f790f1..8fcca62174 100644 --- a/platform/core/src/capabilities/CompositionCapability.js +++ b/platform/core/src/capabilities/CompositionCapability.js @@ -59,11 +59,27 @@ define( * @param {DomainObject|string} domainObject the domain object to add, * or simply its identifier * @param {number} [index] the index at which to add the object - * @returns {Promise.} the mutation result + * @returns {Promise.} a promise for the added object + * in its new context */ CompositionCapability.prototype.add = function (domainObject, index) { - var id = typeof domainObject === 'string' ? - domainObject : domainObject.getId(); + var self = this, + id = typeof domainObject === 'string' ? + domainObject : domainObject.getId(); + + // Find the object with the above id, used to contextualize + function findObject(objects) { + var i; + for (i = 0; i < objects.length; i += 1) { + if (objects[i].getId() === id) { + return objects[i]; + } + } + } + + function contextualize(mutationResult) { + return mutationResult && self.invoke().then(findObject); + } function addIdToModel(model) { var composition = model.composition, @@ -90,7 +106,8 @@ define( model.composition.splice(index, 0, id); } - return this.domainObject.useCapability('mutation', addIdToModel); + return this.domainObject.useCapability('mutation', addIdToModel) + .then(contextualize); }; /** diff --git a/platform/entanglement/src/services/LinkService.js b/platform/entanglement/src/services/LinkService.js index ab648611e1..bfebddcbd9 100644 --- a/platform/entanglement/src/services/LinkService.js +++ b/platform/entanglement/src/services/LinkService.js @@ -68,10 +68,10 @@ define( } } - return composition.add(object).then(function () { - return parentObject.getCapability('persistence').persist(); - }).then(function getObjectWithNewContext() { - return composition.invoke().then(findChild); + return composition.add(object).then(function (result) { + return parentObject.getCapability('persistence') + .persist() + .then(function () { return result; }); }); };