summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/notifications_form.js.coffee
blob: 3432428702a868cc1f03aa4304cac98f01bf892b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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)