// helpers shared across all intelligence sub-pages: // stats-row loader, company dropdown, detail modal opener. // depends on: app.js async function loadIntelStatsRow() { const row = document.getElementById("intel-stats-row"); if (!row) return true; const data = await api("/admin/api/intelligence/stats"); const notice = document.getElementById("intel-unavailable"); const content = document.getElementById("intel-content"); if (!data.available) { if (notice) notice.style.display = ""; if (content) content.style.display = "none"; row.style.display = "none"; // hide the full-width stats strip too return false; } if (notice) notice.style.display = "none"; if (content) content.style.display = ""; row.style.display = ""; const queueMap = {}; (data.queue || []).forEach(r => queueMap[r.status] = r.n); row.innerHTML = [ ["Queue pending", (queueMap.pending || 0).toLocaleString()], ["Processed", (queueMap.processed || 0).toLocaleString()], ["Skipped", (queueMap.skipped || 0).toLocaleString()], ["Knowledge rows", data.knowledge.toLocaleString()], ["Predictions", data.predictions.toLocaleString()], ["Companies", `${data.embeddings}/${data.companies} embedded`], ].map(([label, value]) => `
${label} ${value}
`).join(""); return true; } async function loadIntelCompanies() { const sel = document.getElementById("i-company"); if (!sel) return; const companies = await api("/admin/api/intelligence/companies"); const current = queryGet("company_id"); // preserve selection if url set it sel.innerHTML = ''; companies.forEach(c => { const opt = document.createElement("option"); opt.value = c.id; opt.textContent = `${c.name} (${c.ticker})`; sel.appendChild(opt); }); if (current) sel.value = current; } let intelRows = []; function openIntelDetail(id, view) { const row = intelRows.find(r => r.id === id); if (!row) return; document.getElementById("intel-modal-title").textContent = `${row.company_name} — Event ${row.event_id}`; const meta = [`type: ${row.type || view}`, `created: ${row.created_at ? row.created_at.slice(0,16) : "—"}`]; document.getElementById("intel-modal-meta").innerHTML = meta.map(m => `${escapeHtml(m)}`).join(""); let body = ""; if (view === "knowledge") { try { const parsed = JSON.parse(row.data); body = Object.entries(parsed).map(([k, v]) => `${k}: ${v}`).join("\n"); } catch (_) { body = row.data; } } else { body = [ row.rationale, "", `direction: ${row.direction || "—"}`, `magnitude: ${row.magnitude || "—"}`, `timeframe: ${row.timeframe || "—"}`, ].join("\n"); } document.getElementById("intel-modal-body").textContent = body; document.getElementById("intelOverlay").classList.add("open"); } document.addEventListener("DOMContentLoaded", () => { const closeBtn = document.getElementById("intelCloseBtn"); if (closeBtn) { closeBtn.onclick = () => document.getElementById("intelOverlay").classList.remove("open"); } });