-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathadmin-page-settings.ts
87 lines (68 loc) · 2.74 KB
/
admin-page-settings.ts
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import {mapDataToFormData} from "./helpers/global";
import {AcGeneralSettingsI18N, LocalizedAcGeneralSettings} from "./types/admin-columns";
import AjaxLoader from "./plugin/ajax-loader";
import AcConfirmation from "./plugin/ac-confirmation";
import {persistGeneralSetting} from "./ajax/settings";
declare const ajaxurl: string;
declare const AC: LocalizedAcGeneralSettings
declare const AC_I18N: AcGeneralSettingsI18N
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll<HTMLInputElement>('.ac-settings-box input[data-ajax-setting]').forEach(el => {
new GeneralAdminToggleSetting(el, el.dataset.ajaxSetting ?? '');
});
let restoreFormButton = document.querySelector<HTMLInputElement>('#frm-ac-restore [type=submit]');
if (restoreFormButton) {
restoreFormButton.addEventListener('click', (e) => {
e.preventDefault();
new AcConfirmation({
message: AC_I18N.restore_settings,
confirm: () => {
restoreFormButton?.closest('form')?.submit();
},
lastFocus: restoreFormButton
}).create();
});
}
const layoutStyle: HTMLInputElement | null = document.querySelector('input[name="layout_style"]');
if (layoutStyle) {
let loader = new AjaxLoader();
layoutStyle.addEventListener('input', () => {
loader?.getElement().remove();
loader = new AjaxLoader();
layoutStyle.closest('.ac-general-setting-row__layout')?.append(loader.getElement());
loader.setActive(true).setLoading(true);
persistGeneralSetting('layout_style', layoutStyle.value).then(() => {
loader.finish();
});
});
}
})
class GeneralAdminToggleSetting {
element: HTMLInputElement
name: string
loader: AjaxLoader | null
constructor(element: HTMLInputElement, name: string) {
this.element = element;
this.name = name;
this.loader = null;
this.init();
}
init() {
this.element.addEventListener('change', () => {
this.initNewLoader();
this.element.closest('.ac-toggle-v2')?.append(this.loader?.getElement() ?? document.createElement('div'));
this.loader?.setLoading(true);
this.persist().then(() => {
this.loader?.finish();
});
});
mapDataToFormData({});
}
private initNewLoader() {
this.loader?.getElement().remove();
this.loader = new AjaxLoader();
}
persist() {
return persistGeneralSetting(this.name, this.element.checked ? '1' : '0');
}
}