filestash/public/assets/pages/adminpage/model_config.js
2024-06-21 21:05:44 +10:00

45 lines
1.1 KiB
JavaScript

import rxjs from "../../lib/rx.js";
import ajax from "../../lib/ajax.js";
const isSaving$ = new rxjs.BehaviorSubject(false);
const config$ = isSaving$.pipe(
rxjs.filter((loading) => !loading),
rxjs.switchMapTo(ajax({
url: "admin/api/config",
method: "GET",
responseType: "json"
})),
rxjs.map((res) => res.responseJSON.result),
rxjs.shareReplay(1),
);
export async function initConfig() {
if (isSaving$.value === true) isSaving$.next(false);
}
export function isSaving() {
return isSaving$.asObservable();
}
export function get() {
return config$;
}
export function save() {
return rxjs.pipe(
rxjs.tap(() => isSaving$.next(true)),
rxjs.debounceTime(800),
rxjs.mergeMap((formData) => ajax({
url: "admin/api/config",
method: "POST",
responseType: "json",
body: formData,
})),
rxjs.tap(() => isSaving$.next(false)),
rxjs.catchError((err) => {
isSaving$.next(false);
return rxjs.throwError(err);
}),
);
}