2018-03-09 15:18:59 -05:00
|
|
|
import $ from 'jquery';
|
2018-02-01 05:53:36 -05:00
|
|
|
import { __ } from './locale';
|
|
|
|
import axios from './lib/utils/axios_utils';
|
|
|
|
import flash from './flash';
|
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
export default class NotificationsForm {
|
|
|
|
constructor() {
|
|
|
|
this.toggleCheckbox = this.toggleCheckbox.bind(this);
|
|
|
|
this.initEventListeners();
|
|
|
|
}
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
initEventListeners() {
|
|
|
|
$(document).on('change', '.js-custom-notification-event', this.toggleCheckbox);
|
|
|
|
}
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
toggleCheckbox(e) {
|
|
|
|
const $checkbox = $(e.currentTarget);
|
2018-04-11 14:05:57 -04:00
|
|
|
const $parent = $checkbox.closest('.form-check');
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
this.saveEvent($checkbox, $parent);
|
|
|
|
}
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
// eslint-disable-next-line class-methods-use-this
|
|
|
|
showCheckboxLoadingSpinner($parent) {
|
2018-10-10 03:13:34 -04:00
|
|
|
$parent
|
|
|
|
.addClass('is-loading')
|
2017-12-15 04:31:58 -05:00
|
|
|
.find('.custom-notification-event-loading')
|
|
|
|
.removeClass('fa-check')
|
2020-02-14 07:09:03 -05:00
|
|
|
.addClass('spinner align-middle')
|
2017-12-15 04:31:58 -05:00
|
|
|
.removeClass('is-done');
|
|
|
|
}
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2017-12-15 04:31:58 -05:00
|
|
|
saveEvent($checkbox, $parent) {
|
2019-12-18 10:08:03 -05:00
|
|
|
const form = $parent.parents('form').first();
|
2016-07-24 16:45:11 -04:00
|
|
|
|
2018-02-01 05:53:36 -05:00
|
|
|
this.showCheckboxLoadingSpinner($parent);
|
|
|
|
|
|
|
|
axios[form.attr('method')](form.attr('action'), form.serialize())
|
|
|
|
.then(({ data }) => {
|
|
|
|
$checkbox.enable();
|
|
|
|
if (data.saved) {
|
2018-10-10 03:13:34 -04:00
|
|
|
$parent
|
|
|
|
.find('.custom-notification-event-loading')
|
2020-02-14 07:09:03 -05:00
|
|
|
.toggleClass('spinner fa-check is-done align-middle');
|
2018-02-01 05:53:36 -05:00
|
|
|
setTimeout(() => {
|
2018-10-10 03:13:34 -04:00
|
|
|
$parent
|
|
|
|
.removeClass('is-loading')
|
2018-02-01 05:53:36 -05:00
|
|
|
.find('.custom-notification-event-loading')
|
2020-02-14 07:09:03 -05:00
|
|
|
.toggleClass('spinner fa-check is-done align-middle');
|
2018-02-01 05:53:36 -05:00
|
|
|
}, 2000);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(() => flash(__('There was an error saving your notification settings.')));
|
2017-12-15 04:31:58 -05:00
|
|
|
}
|
|
|
|
}
|