diff --git a/apps/dashboard/assets/js/app.js b/apps/dashboard/assets/js/app.js index 3401ee7..16407ea 100644 --- a/apps/dashboard/assets/js/app.js +++ b/apps/dashboard/assets/js/app.js @@ -1,13 +1,15 @@ import { fetchDashboardData } from "./api.js"; -import { getState, setError, subscribe, updateData } from "./state.js"; +import { getState, subscribe, updateData } from "./state.js"; import { renderHeader } from "./renderers/header.js"; -import { renderNetworkHealth } from "./renderers/network-health.js"; -import { renderQuickAccess } from "./renderers/quick-access.js"; -import { renderServices } from "./renderers/services.js"; import { renderStats } from "./renderers/stats.js"; import { renderStorage } from "./renderers/storage.js"; - -let pollTimer = null; +import { renderServices } from "./renderers/services.js"; +import { renderNetworkHealth } from "./renderers/network-health.js"; +import { renderQuickAccess } from "./renderers/quick-access.js"; +import { renderHomeAssistant } from "./renderers/home-assistant.js"; +import { renderUptimeKuma } from "./renderers/uptime-kuma.js"; +import { renderImmich } from "./renderers/immich.js"; +import { renderBackrest } from "./renderers/backrest.js"; function render(state) { renderHeader(state); @@ -15,34 +17,24 @@ function render(state) { renderStorage(state); renderServices(state); renderNetworkHealth(state); + renderHomeAssistant(state); + renderUptimeKuma(state); + renderImmich(state); + renderBackrest(state); + renderQuickAccess(); } -async function refreshData() { +subscribe(render); + +async function refresh() { try { - const payload = await fetchDashboardData(); - updateData(payload); - } catch (error) { - console.error("Dashboard refresh failed", error); - setError(error instanceof Error ? error : new Error("Unknown dashboard refresh error")); - } finally { - restartPolling(); + const data = await fetchDashboardData(); + updateData(data); + } catch (err) { + console.error("Dashboard fetch error:", err); } } -function restartPolling() { - if (pollTimer) { - window.clearInterval(pollTimer); - } - const state = window.__dashboardState?.() ?? null; - const interval = state?.refreshIntervalMs ?? 20000; - pollTimer = window.setInterval(refreshData, interval); -} - -subscribe((state) => { - window.__dashboardState = () => state; - render(state); -}); - -renderQuickAccess(); -refreshData(); -window.setInterval(() => renderHeader(getState()), 1000); +render(getState()); +refresh(); +setInterval(refresh, (getState().overview?.refresh_hint_seconds ?? 20) * 1000); \ No newline at end of file