/* global React, ReactDOM */
/* ============================================================================
coin-healthcare/wow/CoinHealthcareSummary.jsx — M2 live-data widget for HCC
Fetches GET /api/v1/public/coin-healthcare/summary · unauthenticated · 30s
Exports window.HCCLive = { HCCSummary }
============================================================================ */
(function () {
"use strict";
const { useState, useEffect } = React;
const API = "/api/v1";
const ACCENT = "#117A4D";
function fmtHCC(v) {
if (v == null) return "—";
if (v >= 1000000) return (v / 1000000).toFixed(2) + "M HCC";
if (v >= 1000) return (v / 1000).toFixed(1) + "K HCC";
return v.toFixed(2) + " HCC";
}
function Tile({ label, value, live }) {
return (
{label}
{live ? value : "—"}
);
}
function HCCSummaryWidget() {
const [data, setData] = useState(null);
const [live, setLive] = useState(false);
const [ts, setTs] = useState(null);
useEffect(() => {
let cancelled = false;
async function poll() {
try {
const r = await fetch(API + "/public/coin-healthcare/summary");
if (!r.ok) { if (!cancelled) { setLive(false); setData(null); } return; }
const d = await r.json();
if (!cancelled) { setData(d); setLive(true); setTs(new Date()); }
} catch (_) { if (!cancelled) { setLive(false); setData(null); } }
}
poll();
const id = setInterval(poll, 30000);
return () => { cancelled = true; clearInterval(id); };
}, []);
return (
{live ? "● LIVE" : "◌ DEMO"}
HCC TOKEN LIVE DATA
{ts && {ts.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit", second: "2-digit" })}}
);
}
window.HCCLive = { HCCSummary: HCCSummaryWidget };
/* ---- self-mount before #root ------------------------------------------- */
function mountWidget() {
const root = document.getElementById("root");
if (!root) return;
const el = document.createElement("div");
el.id = "coin-healthcare-live-root";
root.before(el);
ReactDOM.createRoot(el).render(React.createElement(HCCSummaryWidget));
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", mountWidget);
} else {
mountWidget();
}
})();