// ============================================================================
// public/screens/analytics.jsx — Analytics Dashboard (Phase 7A)
// ============================================================================
function AnalyticsScreen() {
const [overview, setOverview] = React.useState(null);
const [callData, setCallData] = React.useState([]);
const [agents, setAgents] = React.useState([]);
const [intents, setIntents] = React.useState([]);
const [quality, setQuality] = React.useState([]);
const [range, setRange] = React.useState("30d");
const load = React.useCallback(async () => {
const [ov, cd, ag, it, ql] = await Promise.all([
VoaisAPI.get("/api/analytics/overview"),
VoaisAPI.get("/api/analytics/calls?range=" + range),
VoaisAPI.get("/api/analytics/agents"),
VoaisAPI.get("/api/analytics/intents"),
VoaisAPI.get("/api/analytics/quality"),
]);
if (ov.ok) setOverview(ov.data.overview);
if (cd.ok) setCallData(cd.data.data);
if (ag.ok) setAgents(ag.data.agents);
if (it.ok) setIntents(it.data.intents);
if (ql.ok) setQuality(ql.data.quality);
}, [range]);
React.useEffect(() => { load(); }, [load]);
if (!overview) return
| Agent | Calls | Answered | Hot leads | Avg score | Minutes |
|---|---|---|---|---|---|
|
{a.avatar_gradient && }
{a.name} {a.code} |
{+a.total_calls} | {+a.answered} | 0 ? "var(--err)" : undefined }}>{+a.hot_leads} | {a.avg_score} | {Math.round(+a.total_seconds/60)}m |