mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
56 lines
1.9 KiB
CoffeeScript
56 lines
1.9 KiB
CoffeeScript
angular.module("admin.resources").factory 'Enterprises', ($q, EnterpriseResource) ->
|
|
new class Enterprises
|
|
byID: {}
|
|
pristineByID: {}
|
|
|
|
index: (params={}, callback=null) ->
|
|
EnterpriseResource.index params, (data) =>
|
|
@load(data)
|
|
(callback || angular.noop)(data)
|
|
data
|
|
|
|
load: (enterprises) ->
|
|
for enterprise in enterprises
|
|
@byID[enterprise.id] = enterprise
|
|
@pristineByID[enterprise.id] = angular.copy(enterprise)
|
|
|
|
save: (enterprise) ->
|
|
deferred = $q.defer()
|
|
enterprise.$update({id: enterprise.permalink})
|
|
.then( (data) =>
|
|
@pristineByID[enterprise.id] = angular.copy(enterprise)
|
|
deferred.resolve(data)
|
|
).catch (response) ->
|
|
deferred.reject(response)
|
|
deferred.promise
|
|
|
|
saved: (enterprise) ->
|
|
@diff(enterprise).length == 0
|
|
|
|
diff: (enterprise) ->
|
|
changed = []
|
|
for attr, value of enterprise when not angular.equals(value, @pristineByID[enterprise.id][attr])
|
|
changed.push attr unless attr in @ignoredAttrs()
|
|
changed
|
|
|
|
ignoredAttrs: ->
|
|
["$$hashKey", "producer", "package", "producerError", "packageError", "status"]
|
|
|
|
resetAttribute: (enterprise, attribute) ->
|
|
enterprise[attribute] = @pristineByID[enterprise.id][attribute]
|
|
|
|
performActionOnEnterpriseResource = (resourceAction) ->
|
|
(enterprise) ->
|
|
deferred = $q.defer()
|
|
resourceAction({id: enterprise.permalink}, ((data) =>
|
|
@pristineByID[enterprise.id] = angular.copy(data)
|
|
deferred.resolve(data)
|
|
), ((response) ->
|
|
deferred.reject(response)
|
|
))
|
|
deferred.promise
|
|
|
|
removeLogo: performActionOnEnterpriseResource(EnterpriseResource.removeLogo)
|
|
removePromoImage: performActionOnEnterpriseResource(EnterpriseResource.removePromoImage)
|
|
removeTermsAndConditions: performActionOnEnterpriseResource(EnterpriseResource.removeTermsAndConditions)
|