Move form-saving logic into dedicated StandingOrderForm service

This commit is contained in:
Rob Harrington
2017-11-10 15:51:33 +11:00
parent c94badbf36
commit 404913dcfa
2 changed files with 43 additions and 31 deletions

View File

@@ -0,0 +1,35 @@
angular.module("admin.standingOrders").factory 'StandingOrderForm', ($window, StatusMessage) ->
class StandingOrderForm
form: null
standingOrder: null
errors: {}
constructor: (form, standingOrder) ->
@form = form
@standingOrder = standingOrder
save: =>
return @formInvalid() unless @form.$valid
delete @errors[k] for k, v of @errors
@form.$setPristine()
StatusMessage.display 'progress', 'Saving...'
if @standingOrder.id?
@standingOrder.update().then @successCallback, @errorCallback
else
@standingOrder.create().then @successCallback, @errorCallback
successCallback: (response) =>
StatusMessage.display 'success', 'Saved. Redirecting...'
$window.location.href = "/admin/standing_orders"
errorCallback: (response) =>
if response.data?.errors?
angular.extend(@errors, response.data.errors)
keys = Object.keys(response.data.errors)
StatusMessage.display 'failure', response.data.errors[keys[0]][0]
else
# Happens when there are sync issues between SO and initialised orders
# We save the SO, but open a dialog, so want to stay on the page
StatusMessage.display 'success', 'Saved'
formInvalid: -> StatusMessage.display 'failure', t('admin.standing_orders.details.invalid_error')