Files
openfoodnetwork/app/assets/javascripts/admin/resources/services/orders.js.coffee
Maikel Linke d129665d43 Wait for orders being loaded in bulk order manage
The bulk order management page tried to wait for orders being loaded.
But instead of receiving a request object with an a promise to wait for
the page received a simple array without promise. As a result, the page
didn't wait for orders being loaded.

When loading of orders took longer than loading of line items they or at
least not all of them were enriched with distributors and order cycles
and the line items were missing some orders. That lead to random spec
failures.
2019-03-13 10:37:24 +11:00

49 lines
1.3 KiB
CoffeeScript

angular.module("admin.resources").factory 'Orders', ($q, OrderResource, RequestMonitor) ->
new class Orders
all: []
byID: {}
pristineByID: {}
pagination: {}
index: (params={}, callback=null) ->
request = OrderResource.index params, (data) =>
@load(data)
(callback || angular.noop)(data)
@all.$promise = request.$promise
@all
load: (data) ->
angular.extend(@pagination, data.pagination)
@clearData()
for order in data.orders
@all.push order
@byID[order.id] = order
@pristineByID[order.id] = angular.copy(order)
clearData: ->
@all.length = 0
@byID = {}
@pristineByID = {}
save: (order) ->
deferred = $q.defer()
order.$update({id: order.number})
.then( (data) =>
@pristineByID[order.id] = angular.copy(order)
deferred.resolve(data)
).catch (response) ->
deferred.reject(response)
deferred.promise
saved: (order) ->
@diff(order).length == 0
diff: (order) ->
changed = []
for attr, value of order when not angular.equals(value, @pristineByID[order.id][attr])
changed.push attr unless attr is "$$hashKey"
changed
resetAttribute: (order, attribute) ->
order[attribute] = @pristineByID[order.id][attribute]