50 lines
1.3 KiB
CoffeeScript
50 lines
1.3 KiB
CoffeeScript
|
class @NotificationsForm
|
||
|
constructor: ->
|
||
|
@removeEventListeners()
|
||
|
@initEventListeners()
|
||
|
|
||
|
removeEventListeners: ->
|
||
|
$(document).off 'change', '.js-custom-notification-event'
|
||
|
|
||
|
initEventListeners: ->
|
||
|
$(document).on 'change', '.js-custom-notification-event', @toggleCheckbox
|
||
|
|
||
|
toggleCheckbox: (e) =>
|
||
|
$checkbox = $(e.currentTarget)
|
||
|
$parent = $checkbox.closest('.checkbox')
|
||
|
@saveEvent($checkbox, $parent)
|
||
|
|
||
|
showCheckboxLoadingSpinner: ($parent) ->
|
||
|
$parent
|
||
|
.addClass 'is-loading'
|
||
|
.find '.custom-notification-event-loading'
|
||
|
.removeClass 'fa-check'
|
||
|
.addClass 'fa-spin fa-spinner'
|
||
|
.removeClass 'is-done'
|
||
|
|
||
|
saveEvent: ($checkbox, $parent) ->
|
||
|
form = $parent.parents('form:first')
|
||
|
|
||
|
$.ajax(
|
||
|
url: form.attr('action')
|
||
|
method: form.attr('method')
|
||
|
dataType: 'json'
|
||
|
data: form.serialize()
|
||
|
|
||
|
beforeSend: =>
|
||
|
@showCheckboxLoadingSpinner($parent)
|
||
|
).done (data) ->
|
||
|
$checkbox.enable()
|
||
|
|
||
|
if data.saved
|
||
|
$parent
|
||
|
.find '.custom-notification-event-loading'
|
||
|
.toggleClass 'fa-spin fa-spinner fa-check is-done'
|
||
|
|
||
|
setTimeout(->
|
||
|
$parent
|
||
|
.removeClass 'is-loading'
|
||
|
.find '.custom-notification-event-loading'
|
||
|
.toggleClass 'fa-spin fa-spinner fa-check is-done'
|
||
|
, 2000)
|