UNPKG

breeze-client

Version:

Breeze data management for JavaScript clients

85 lines 10.7 kB
import { core } from './core'; import { observableArray } from './observable-array'; import { BreezeEvent } from './event'; // TODO: mixin impl is not very typesafe // Not needed // interface IPrimitiveArray extends IObservableArray { // [index: number]: any; // parent?: IStructuralObject; // parentProperty?: DataProperty; // } let primitiveArrayMixin = { // complexArray will have the following props // parent // propertyPath // parentProperty // addedItems - only if modified // removedItems - only if modified // each complexAspect of any entity within a complexArray // will have its own _complexState = "A/M"; /** Primitive arrays are not actually classes, they are objects that mimic arrays. A primitive array is collection of primitive types associated with a data property on a single entity or complex object. i.e. customer.invoiceNumbers. This collection looks like an array in that the basic methods on arrays such as 'push', 'pop', 'shift', 'unshift', 'splice' are all provided as well as several special purpose methods. @class {primitiveArray} **/ /** An [[Event]] that fires whenever the contents of this array changed. This event is fired any time a new entity is attached or added to the EntityManager and happens to belong to this collection. Adds that occur as a result of query or import operations are batched so that all of the adds or removes to any individual collections are collected into a single notification event for each relation array. @example // assume order is an order entity attached to an EntityManager. orders.arrayChanged.subscribe( function (arrayChangedArgs) { let addedEntities = arrayChangedArgs.added; let removedEntities = arrayChanged.removed; }); @event arrayChanged @param added {Array of Primitives} An array of all of the items added to this collection. @param removed {Array of Primitives} An array of all of the items removed from this collection. @readOnly **/ // virtual impls _getGoodAdds: function (adds) { return adds; }, _beforeChange: function () { let entityAspect = this.getEntityAspect(); if (entityAspect.entityState.isUnchanged()) { entityAspect.setModified(); } if (entityAspect.entityState.isModified() && !this._origValues) { this._origValues = this.slice(0); } }, _processAdds: function (adds) { // nothing needed }, _processRemoves: function (removes) { // nothing needed; }, _rejectChanges: function () { if (!this._origValues) return; this.length = 0; Array.prototype.push.apply(this, this._origValues); }, _acceptChanges: function () { this._origValues = null; } }; // local functions /** For use by breeze plugin authors only. The class is for use in building a [[IModelLibraryAdapter]] implementation. @adapter (see [[IModelLibraryAdapter]]) @hidden */ export function makePrimitiveArray(arr, parent, parentProperty) { let arrX = arr; observableArray.initializeParent(arrX, parent, parentProperty); arrX.arrayChanged = new BreezeEvent("arrayChanged", arrX); core.extend(arrX, observableArray.mixin); return core.extend(arrX, primitiveArrayMixin); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaW1pdGl2ZS1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFHLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXRDLHdDQUF3QztBQUV4QyxhQUFhO0FBQ2IsdURBQXVEO0FBQ3ZELDBCQUEwQjtBQUMxQixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLElBQUk7QUFFSixJQUFJLG1CQUFtQixHQUFHO0lBRXhCLDZDQUE2QztJQUM3QyxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixvQ0FBb0M7SUFDcEMsc0NBQXNDO0lBQ3RDLDBEQUEwRDtJQUMxRCw0Q0FBNEM7SUFFNUM7Ozs7OztPQU1HO0lBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFFRCxnQkFBZ0I7SUFDbEIsWUFBWSxFQUFHLFVBQVMsSUFBVztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLEVBQUU7UUFDYixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFlBQVksRUFBRSxVQUFTLElBQVc7UUFDaEMsaUJBQWlCO0lBQ25CLENBQUM7SUFFRCxlQUFlLEVBQUUsVUFBUyxPQUFjO1FBQ3RDLGtCQUFrQjtJQUNwQixDQUFDO0lBR0QsY0FBYyxFQUFFO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsY0FBYyxFQUFFO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNGLENBQUM7QUFDQSxrQkFBa0I7QUFFcEI7OztFQUdFO0FBQ0YsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVUsRUFBRSxNQUF3QixFQUFFLGNBQTRCO0lBQ25HLElBQUksSUFBSSxHQUFHLEdBQVUsQ0FBQztJQUN0QixlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlICB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IG9ic2VydmFibGVBcnJheSB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBEYXRhUHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vLyBUT0RPOiBtaXhpbiBpbXBsIGlzIG5vdCB2ZXJ5IHR5cGVzYWZlXHJcblxyXG4vLyBOb3QgbmVlZGVkXHJcbi8vIGludGVyZmFjZSBJUHJpbWl0aXZlQXJyYXkgZXh0ZW5kcyBJT2JzZXJ2YWJsZUFycmF5IHtcclxuLy8gICBbaW5kZXg6IG51bWJlcl06IGFueTtcclxuLy8gICBwYXJlbnQ/OiBJU3RydWN0dXJhbE9iamVjdDtcclxuLy8gICBwYXJlbnRQcm9wZXJ0eT86IERhdGFQcm9wZXJ0eTtcclxuLy8gfVxyXG5cclxubGV0IHByaW1pdGl2ZUFycmF5TWl4aW4gPSB7XHJcblxyXG4gIC8vIGNvbXBsZXhBcnJheSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wc1xyXG4gIC8vICAgIHBhcmVudFxyXG4gIC8vICAgIHByb3BlcnR5UGF0aFxyXG4gIC8vICAgIHBhcmVudFByb3BlcnR5XHJcbiAgLy8gICAgYWRkZWRJdGVtcyAgLSBvbmx5IGlmIG1vZGlmaWVkXHJcbiAgLy8gICAgcmVtb3ZlZEl0ZW1zICAtIG9ubHkgaWYgbW9kaWZpZWRcclxuICAvLyAgZWFjaCBjb21wbGV4QXNwZWN0IG9mIGFueSBlbnRpdHkgd2l0aGluIGEgY29tcGxleEFycmF5XHJcbiAgLy8gIHdpbGwgaGF2ZSBpdHMgb3duIF9jb21wbGV4U3RhdGUgPSBcIkEvTVwiO1xyXG5cclxuICAvKipcclxuICBQcmltaXRpdmUgYXJyYXlzIGFyZSBub3QgYWN0dWFsbHkgY2xhc3NlcywgdGhleSBhcmUgb2JqZWN0cyB0aGF0IG1pbWljIGFycmF5cy4gQSBwcmltaXRpdmUgYXJyYXkgaXMgY29sbGVjdGlvbiBvZlxyXG4gIHByaW1pdGl2ZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggYSBkYXRhIHByb3BlcnR5IG9uIGEgc2luZ2xlIGVudGl0eSBvciBjb21wbGV4IG9iamVjdC4gaS5lLiBjdXN0b21lci5pbnZvaWNlTnVtYmVycy5cclxuICBUaGlzIGNvbGxlY3Rpb24gbG9va3MgbGlrZSBhbiBhcnJheSBpbiB0aGF0IHRoZSBiYXNpYyBtZXRob2RzIG9uIGFycmF5cyBzdWNoIGFzICdwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSdcclxuICBhcmUgYWxsIHByb3ZpZGVkIGFzIHdlbGwgYXMgc2V2ZXJhbCBzcGVjaWFsIHB1cnBvc2UgbWV0aG9kcy5cclxuICBAY2xhc3Mge3ByaW1pdGl2ZUFycmF5fVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBBbiBbW0V2ZW50XV0gdGhhdCBmaXJlcyB3aGVuZXZlciB0aGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBjaGFuZ2VkLiAgVGhpcyBldmVudFxyXG4gIGlzIGZpcmVkIGFueSB0aW1lIGEgbmV3IGVudGl0eSBpcyBhdHRhY2hlZCBvciBhZGRlZCB0byB0aGUgRW50aXR5TWFuYWdlciBhbmQgaGFwcGVucyB0byBiZWxvbmcgdG8gdGhpcyBjb2xsZWN0aW9uLlxyXG4gIEFkZHMgdGhhdCBvY2N1ciBhcyBhIHJlc3VsdCBvZiBxdWVyeSBvciBpbXBvcnQgb3BlcmF0aW9ucyBhcmUgYmF0Y2hlZCBzbyB0aGF0IGFsbCBvZiB0aGUgYWRkcyBvciByZW1vdmVzIHRvIGFueSBpbmRpdmlkdWFsXHJcbiAgY29sbGVjdGlvbnMgYXJlIGNvbGxlY3RlZCBpbnRvIGEgc2luZ2xlIG5vdGlmaWNhdGlvbiBldmVudCBmb3IgZWFjaCByZWxhdGlvbiBhcnJheS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIG9yZGVycy5hcnJheUNoYW5nZWQuc3Vic2NyaWJlKFxyXG4gICAgICBmdW5jdGlvbiAoYXJyYXlDaGFuZ2VkQXJncykge1xyXG4gICAgICAgICAgbGV0IGFkZGVkRW50aXRpZXMgPSBhcnJheUNoYW5nZWRBcmdzLmFkZGVkO1xyXG4gICAgICAgICAgbGV0IHJlbW92ZWRFbnRpdGllcyA9IGFycmF5Q2hhbmdlZC5yZW1vdmVkO1xyXG4gICAgICB9KTtcclxuICBAZXZlbnQgYXJyYXlDaGFuZ2VkXHJcbiAgQHBhcmFtIGFkZGVkIHtBcnJheSBvZiBQcmltaXRpdmVzfSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIGl0ZW1zIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBAcGFyYW0gcmVtb3ZlZCB7QXJyYXkgb2YgUHJpbWl0aXZlc30gQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBpdGVtcyByZW1vdmVkIGZyb20gdGhpcyBjb2xsZWN0aW9uLlxyXG4gIEByZWFkT25seVxyXG4gICoqL1xyXG5cclxuICAgIC8vIHZpcnR1YWwgaW1wbHNcclxuICBfZ2V0R29vZEFkZHM6ICBmdW5jdGlvbihhZGRzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFkZHM7XHJcbiAgfSxcclxuXHJcbiAgX2JlZm9yZUNoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgZW50aXR5QXNwZWN0ID0gdGhpcy5nZXRFbnRpdHlBc3BlY3QoKTtcclxuICAgIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICBlbnRpdHlBc3BlY3Quc2V0TW9kaWZpZWQoKTtcclxuICAgIH1cclxuICAgIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNNb2RpZmllZCgpICYmICF0aGlzLl9vcmlnVmFsdWVzKSB7XHJcbiAgICAgIHRoaXMuX29yaWdWYWx1ZXMgPSB0aGlzLnNsaWNlKDApO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIF9wcm9jZXNzQWRkczogZnVuY3Rpb24oYWRkczogYW55W10pIHtcclxuICAgIC8vIG5vdGhpbmcgbmVlZGVkXHJcbiAgfSxcclxuXHJcbiAgX3Byb2Nlc3NSZW1vdmVzOiBmdW5jdGlvbihyZW1vdmVzOiBhbnlbXSkge1xyXG4gICAgLy8gbm90aGluZyBuZWVkZWQ7XHJcbiAgfSxcclxuXHJcblxyXG4gIF9yZWplY3RDaGFuZ2VzOiBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5fb3JpZ1ZhbHVlcykgcmV0dXJuO1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcywgdGhpcy5fb3JpZ1ZhbHVlcyk7XHJcbiAgfSxcclxuXHJcbiAgX2FjY2VwdENoYW5nZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fb3JpZ1ZhbHVlcyA9IG51bGw7XHJcbiAgfVxyXG59O1xyXG4gIC8vIGxvY2FsIGZ1bmN0aW9uc1xyXG5cclxuLyoqIEZvciB1c2UgYnkgYnJlZXplIHBsdWdpbiBhdXRob3JzIG9ubHkuIFRoZSBjbGFzcyBpcyBmb3IgdXNlIGluIGJ1aWxkaW5nIGEgW1tJTW9kZWxMaWJyYXJ5QWRhcHRlcl1dIGltcGxlbWVudGF0aW9uLiBcclxuQGFkYXB0ZXIgKHNlZSBbW0lNb2RlbExpYnJhcnlBZGFwdGVyXV0pICAgIFxyXG5AaGlkZGVuIFxyXG4qL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFrZVByaW1pdGl2ZUFycmF5KGFycjogYW55W10sIHBhcmVudDogU3RydWN0dXJhbE9iamVjdCwgcGFyZW50UHJvcGVydHk6IERhdGFQcm9wZXJ0eSkge1xyXG4gIGxldCBhcnJYID0gYXJyIGFzIGFueTtcclxuICBvYnNlcnZhYmxlQXJyYXkuaW5pdGlhbGl6ZVBhcmVudChhcnJYLCBwYXJlbnQsIHBhcmVudFByb3BlcnR5KTtcclxuICBhcnJYLmFycmF5Q2hhbmdlZCA9IG5ldyBCcmVlemVFdmVudChcImFycmF5Q2hhbmdlZFwiLCBhcnJYKTtcclxuICBjb3JlLmV4dGVuZChhcnJYLCBvYnNlcnZhYmxlQXJyYXkubWl4aW4pO1xyXG4gIHJldHVybiBjb3JlLmV4dGVuZChhcnJYLCBwcmltaXRpdmVBcnJheU1peGluKTtcclxufVxyXG5cclxuXHJcbiJdfQ==