42 lines
1.8 KiB
JavaScript
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]?.();
|
|
}
|