diff --git a/custom_components/bahmcloud_store/panel/app.js b/custom_components/bahmcloud_store/panel/app.js index 9054b81..b3fa062 100644 --- a/custom_components/bahmcloud_store/panel/app.js +++ b/custom_components/bahmcloud_store/panel/app.js @@ -1,14 +1,12 @@ async function apiGet() { - const r = await fetch("/api/bahmcloud_store", { credentials: "same-origin" }); + const r = await fetch("/api/bcs", { credentials: "same-origin" }); return await r.json(); } -async function apiPost(payload) { - const r = await fetch("/api/bahmcloud_store", { +async function apiRefresh() { + const r = await fetch("/api/bcs?action=refresh", { method: "POST", - headers: { "Content-Type": "application/json" }, credentials: "same-origin", - body: JSON.stringify(payload), }); return await r.json(); } @@ -26,45 +24,30 @@ function el(tag, attrs = {}, children = []) { return n; } -function card(pkg) { - const installedBadge = el("span", { class: "badge" }, [pkg.installed ? "Installed" : "Not installed"]); - +function card(repo) { const title = el("div", {}, [ - el("strong", {}, [pkg.name]), - el("div", { class: "muted" }, [pkg.repo]), + el("strong", {}, [repo.name]), + el("div", { class: "muted" }, [repo.url]), ]); - const ver = el("div", { class: "muted" }, [ - `Installed: ${pkg.installed_version || "-"} | Latest: ${pkg.latest_version || "-"}` + const provider = el("div", { class: "muted" }, [ + `Provider: ${repo.provider || "-"}` ]); - const btnInstall = el("button", { - onclick: async () => { - btnInstall.disabled = true; - btnInstall.textContent = "Working..."; - await apiPost({ op: "install", package_id: pkg.id }); - await load(); - } - }, [pkg.installed ? "Reinstall" : "Install"]); + const version = el("div", { class: "muted" }, [ + `Latest: ${repo.latest_version || "-"}` + ]); - const btnUpdate = el("button", { - onclick: async () => { - btnUpdate.disabled = true; - btnUpdate.textContent = "Working..."; - await apiPost({ op: "update", package_id: pkg.id }); - await load(); - } - }, ["Update"]); - - // Update-Button nur wenn installiert - btnUpdate.disabled = !pkg.installed; - - const actions = el("div", { class: "actions" }, [btnInstall, btnUpdate]); + const sourceBadge = el( + "span", + { class: "badge" }, + [repo.source === "custom" ? "Custom" : "Index"] + ); return el("div", { class: "card" }, [ - el("div", { class: "row" }, [title, installedBadge]), - ver, - actions + el("div", { class: "row" }, [title, sourceBadge]), + provider, + version ]); } @@ -75,13 +58,44 @@ async function load() { status.textContent = "Loading..."; list.innerHTML = ""; - const data = await apiGet(); - status.textContent = `Store: ${data.store_url}`; + try { + const data = await apiGet(); - for (const pkg of data.packages) { - list.appendChild(card(pkg)); + if (!data.ok) { + status.textContent = "Failed to load store data"; + return; + } + + status.textContent = `BCS ${data.version} – ${data.repos.length} repositories`; + + for (const repo of data.repos) { + list.appendChild(card(repo)); + } + } catch (e) { + console.error("BCS load failed:", e); + status.textContent = "Error loading store data"; } } -document.getElementById("refresh").onclick = load; +const refreshBtn = document.getElementById("refresh"); + +refreshBtn.onclick = async () => { + refreshBtn.disabled = true; + const oldText = refreshBtn.textContent; + refreshBtn.textContent = "Refreshing..."; + + try { + const r = await apiRefresh(); + if (!r.ok) { + console.error("BCS refresh failed:", r); + } + await load(); + } catch (e) { + console.error("BCS refresh error:", e); + } finally { + refreshBtn.disabled = false; + refreshBtn.textContent = oldText; + } +}; + load();