Files

42 lines
1.8 KiB
JavaScript

import { initializeRuntime, onAccessChange } from "./core/runtime.js";
import { closeKeyDrawer, initializeKeys, loadKeys } from "./features/keys.js";
import { initializePricing, loadPricing } from "./features/pricing.js";
import { activateUsage, initializeUsage, refreshVisibleUsage, resetUsage } from "./features/usage.js";
import { loadEvents } from "./features/logs.js";
const loaders = Object.freeze({ stats: loadKeys, usage: activateUsage, pricing: loadPricing, logs: loadEvents, users: loadKeys });
initializeKeys();
initializeUsage();
initializePricing();
initializeRuntime(reloadCurrentView);
onAccessChange(authorized => {
if (!authorized && document.querySelector(".nav-button.active")?.dataset.view === "users") setView("stats");
});
document.querySelectorAll(".nav-button").forEach(button => {
button.addEventListener("click", () => setView(button.dataset.view));
});
document.addEventListener("visibilitychange", refreshVisibleUsage);
setInterval(refreshVisibleUsage, 3000);
setView(sessionStorage.getItem("billing:active-view") || "stats");
function setView(view) {
if (view === "keys" || !loaders[view]) view = "stats";
if (view === "users" && document.body.classList.contains("read-only")) view = "stats";
document.querySelectorAll(".nav-button").forEach(button => button.classList.toggle("active", button.dataset.view === view));
document.querySelectorAll(".view").forEach(panel => panel.classList.toggle("active", panel.id === "view-" + view));
try {
sessionStorage.setItem("billing:active-view", view);
} catch (_) {}
loaders[view]?.();
}
function reloadCurrentView() {
closeKeyDrawer();
const active = document.querySelector(".nav-button.active")?.dataset.view || "stats";
if (active === "usage") resetUsage();
else loaders[active]?.();
}