import { useState, useEffect, useMemo, Fragment } from "react"; import { api } from "../lib/api"; import { Loader, ErrorBox, Filters, Select } from "../components/UI"; const MESES = ["ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE"]; export default function Roas() { const hoy = new Date(); const [ano, setAno] = useState(String(hoy.getFullYear())); const [mes, setMes] = useState(String(hoy.getMonth() + 1)); const [filtros, setFiltros] = useState({ anos: [2026] }); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [expand, setExpand] = useState({}); // sede -> abierto/cerrado const [expandP, setExpandP] = useState({}); // "sede|prog" -> abierto/cerrado const [reload, setReload] = useState(0); useEffect(() => { api.leadsFiltros().then(setFiltros).catch(() => {}); }, []); useEffect(() => { const id = setInterval(() => setReload((n) => n + 1), 15 * 60 * 1000); const onActualizar = () => setReload((n) => n + 1); // recarga al guardar en Config window.addEventListener("roas-actualizar", onActualizar); window.addEventListener("datos-actualizar", onActualizar); return () => { clearInterval(id); window.removeEventListener("roas-actualizar", onActualizar); window.removeEventListener("datos-actualizar", onActualizar); }; }, []); useEffect(() => { let activo = true; if (!data) setLoading(true); setError(null); api.roas(ano, mes, "TODOS") .then((res) => { if (activo) { setData(res); setLoading(false); } }) .catch((e) => { if (activo) { setError(e.message); setLoading(false); } }); return () => { activo = false; }; }, [ano, mes, reload]); const optAnos = useMemo(() => (filtros.anos || []).map(String), [filtros]); const optMes = useMemo(() => [{ value: "TODOS", label: "TODOS" }, ...MESES.map((m,i)=>({ value: String(i+1), label: m }))], []); const soles = (v) => "$" + Number(v || 0).toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }); const num = (v) => Number(v || 0).toLocaleString("es-PE"); return (
| Sede | Importe Gastado | Resultados |
|---|---|---|
| {subs.length > 0 && ( )} {f.sede} | {soles(f.importe)} | {num(f.resultados)} |
| {conjs.length > 0 && ( )} {p.programa} | {soles(p.importe)} | {num(p.resultados)} |
| {c.conjunto} | {soles(c.importe)} | {num(c.resultados)} |
| Total | {soles(data.total.importe)} | {num(data.total.resultados)} |