mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
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.
49 lines
1.3 KiB
CoffeeScript
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]
|