Implement experimental loading state functionality to prevent double action triggering for saving records
This commit is contained in:
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user