API mission

This commit is contained in:
2026-06-13 13:35:00 +07:00
parent 6f6d925fdd
commit 1a8bddb037
23 changed files with 1930 additions and 23 deletions

View File

@@ -173,7 +173,7 @@
};
}
function loadStore() {
function loadStoreLocal() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return;
@@ -186,11 +186,49 @@
ensureDefaultGroups();
}
async function loadStoreFromBackend() {
try {
const res = await fetch("/api/missions");
if (!res.ok) return false;
const data = await res.json();
if (Array.isArray(data.missions)) store.missions = data.missions;
if (Array.isArray(data.groups)) store.groups = data.groups;
ensureDefaultGroups();
localStorage.setItem(
STORAGE_KEY,
JSON.stringify({ missions: store.missions, groups: store.groups })
);
return true;
} catch {
return false;
}
}
let persistTimer = null;
async function syncStoreToBackend() {
try {
await fetch("/api/missions", {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ missions: store.missions, groups: store.groups }),
});
} catch {
/* ignore */
}
}
function loadStore() {
loadStoreLocal();
}
function persistStore() {
localStorage.setItem(
STORAGE_KEY,
JSON.stringify({ missions: store.missions, groups: store.groups })
);
clearTimeout(persistTimer);
persistTimer = setTimeout(syncStoreToBackend, 400);
}
function ensureDefaultGroups() {
@@ -1253,8 +1291,9 @@
el("missionQueueForm")?.addEventListener("submit", submitQueueDialog);
}
function init() {
async function init() {
loadStore();
await loadStoreFromBackend();
bindEvents();
renderMissionList();
}