import Ember from 'ember'; export default Ember.ArrayProxy.extend({ isLoaded: false, isLoading: false, promise: function() { var self; self = this; return new Ember.RSVP.Promise(function(resolve, reject) { var observer; observer = function() { if (self.get('isLoaded')) { resolve(self); self.removeObserver('isLoaded', observer); return true; } }; if (!observer()) { return self.addObserver('isLoaded', observer); } }); }.property(), load(array) { this.set('isLoading', true); return array.then((function(_this) { return function() { array.forEach(function(record) { if (!_this.contains(record)) { return _this.pushObject(record); } }); _this.set('isLoading', false); return _this.set('isLoaded', true); }; })(this)); }, observe(collection) { return collection.addArrayObserver(this, { willChange: 'observedArrayWillChange', didChange: 'observedArraydidChange' }); }, observedArrayWillChange(array, index, removedCount, addedCount) { var i, len, object, removedObjects, results; removedObjects = array.slice(index, index + removedCount); results = []; for (i = 0, len = removedObjects.length; i < len; i++) { object = removedObjects[i]; results.push(this.removeObject(object)); } return results; }, observedArraydidChange(array, index, removedCount, addedCount) { var addedObjects, i, len, object, results; addedObjects = array.slice(index, index + addedCount); results = []; for (i = 0, len = addedObjects.length; i < len; i++) { object = addedObjects[i]; // TODO: I'm not sure why deleted objects get here, but I'll just filter them // for now if (!object.get('isDeleted')) { if (!this.contains(object)) { results.push(this.pushObject(object)); } else { results.push(void 0); } } else { results.push(void 0); } } return results; }, pushObject(record) { var content; if (content = this.get('content')) { if (!content.contains(record)) { return content.pushObject(record); } } } });