Implement experimental loading state functionality to prevent double action triggering for saving records

This commit is contained in:
2018-02-09 15:17:58 -03:00
parent 7d2ee437c3
commit 20d1d31041
+11
View File
@@ -4,6 +4,7 @@ export default Ember.Component.extend
modal_options: {}
layoutName: 'modals/layout'
willOpenModal: -> # can be implemented, is fired after loading attributes, before rendering
is_saving: false # temporary state to prevent double triggering
title: (->
# return title if directly set by options
return @get('modal_options.title') if @get('modal_options.title')
@@ -37,14 +38,18 @@ export default Ember.Component.extend
body: (->
@get('modal_options.body')
).property('modal_options.body')
save_error: (error)->
@set 'is_saving', false
if typeof error is 'string'
@set 'alert_message', error
else if error?.status is 403 or error?.status is 401
@set 'alert_message', 'Unauthorized action'
else
@set 'alert_message', 'Something went wrong'
save_success: ->
@set 'is_saving', false
@set 'alert_message', ''
pre_hook_modals_count = @get('globals.modals_counter')
if save_callback = @get('modal_options.save')
@@ -74,6 +79,8 @@ export default Ember.Component.extend
@send 'closeModal' unless @preventClose
confirm: -> @send('ok')
saveRecord: ->
return if @get('is_saving')
@set 'is_saving', true # prevent click enthusiasts from creating to many instances or things like that
model = @get("model")
if typeof model.validate is 'function'
model.validate() # validate if method exists
@@ -81,13 +88,17 @@ export default Ember.Component.extend
changeset.validate()
if changeset.get('isValid')
changeset.save().then @save_success.bind(@), @save_error.bind(@)
else
@set 'is_saving', false
else
if model.get('isValid')
model.save().then @save_success.bind(@), @save_error.bind(@)
#@send 'closeModal' unless @preventClose
else
console.log "[VALIDATION ERRORS]"
@set 'is_saving', false
console.log model.get("errors")
rollback_and_close: ->
if model = @get("model")
if model.__changeset__