/* 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(); } })();