52 lines
1.5 KiB
CoffeeScript
52 lines
1.5 KiB
CoffeeScript
`import Ember from 'ember'`
|
|
|
|
ExpandableRecordArray = Ember.ArrayProxy.extend
|
|
isLoaded: false
|
|
isLoading: false
|
|
|
|
promise: (->
|
|
self = this
|
|
new Ember.RSVP.Promise (resolve, reject) ->
|
|
observer = ->
|
|
if self.get('isLoaded')
|
|
resolve(self)
|
|
self.removeObserver('isLoaded', observer)
|
|
true
|
|
|
|
unless observer()
|
|
self.addObserver 'isLoaded', observer
|
|
).property()
|
|
|
|
load: (array) ->
|
|
@set 'isLoading', true
|
|
array.then =>
|
|
array.forEach (record) =>
|
|
@pushObject(record) unless @contains(record)
|
|
|
|
@set 'isLoading', false
|
|
@set 'isLoaded', true
|
|
|
|
observe: (collection) ->
|
|
collection.addArrayObserver this,
|
|
willChange: 'observedArrayWillChange'
|
|
didChange: 'observedArraydidChange'
|
|
|
|
observedArrayWillChange: (array, index, removedCount, addedCount) ->
|
|
removedObjects = array.slice index, index + removedCount
|
|
for object in removedObjects
|
|
@removeObject(object)
|
|
|
|
observedArraydidChange: (array, index, removedCount, addedCount) ->
|
|
addedObjects = array.slice index, index + addedCount
|
|
for object in addedObjects
|
|
# TODO: I'm not sure why deleted objects get here, but I'll just filter them
|
|
# for now
|
|
if !object.get('isDeleted')
|
|
@pushObject(object) unless @contains(object)
|
|
|
|
pushObject: (record) ->
|
|
if content = @get('content')
|
|
content.pushObject(record) unless content.contains(record)
|
|
|
|
`export default ExpandableRecordArray`
|