Spaces:
Sleeping
Sleeping
File size: 2,587 Bytes
197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a 463cf95 197ac2a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import SecaoHeader from "./SecaoHeader.jsx";
const COR = {
leads_criados: "#16a34a",
leads_sem_tarefa: "#f59e0b",
oportunidades_criadas: "#0018FF",
oportunidades_travadas: "#e11d48",
oportunidades_ganhas: "#2563eb",
oportunidades_perdidas: "#e11d48",
cancelamentos: "#be123c",
satisfacoes_do_dia: "#16C79A",
satisfacoes_piores: "#0d9488",
contratos_modificados: "#0004DD",
};
const ROTULO = {
leads_criados: "🆕 Leads criados",
leads_sem_tarefa: "⏳ Leads sem 1ª tarefa",
oportunidades_criadas: "✨ Oportunidades criadas",
oportunidades_travadas: "🚧 Oportunidades travadas",
oportunidades_ganhas: "🏆 Oportunidades ganhas",
oportunidades_perdidas: "📉 Oportunidades perdidas",
cancelamentos: "❌ Cancelamentos",
satisfacoes_do_dia: "😊 Satisfações do dia",
satisfacoes_piores: "😟 Piores satisfações",
contratos_modificados: "📄 Contratos modificados",
};
// Renderiza os "Registros do dia" — links diretos para os registros no
// Salesforce, agrupados por categoria. Recebe o objeto `highlights` já
// calculado pelo backend e a lista de chaves a exibir nesta tela.
export default function HighlightsCards({ highlights, chaves }) {
const h = highlights || {};
const ks = chaves.filter((k) => (h[k] || []).length);
if (!ks.length) return null;
return (
<div className="card">
<SecaoHeader icone="🔗" titulo="Registros (links Salesforce)" cor="#6366f1" />
<div className="dgrid">
{ks.map((k) => {
const itens = (h[k] || []).slice(0, 15);
const cor = COR[k] || "#6366f1";
return (
<div className="dcard" key={k}>
<div className="dh" style={{ background: `linear-gradient(100deg,${cor},${cor}cc)` }}>
{ROTULO[k] || k}
<span className="ct">{(h[k] || []).length}</span>
</div>
<ul>
{itens.map((r, i) => {
const nome = r.name || r.id || "registro";
const info = r.info ? <span className="info"> ({r.info})</span> : null;
return (
<li key={i}>
{r.url ? (
<a href={r.url} target="_blank" rel="noreferrer">
{nome}
</a>
) : (
nome
)}
{info}
</li>
);
})}
</ul>
</div>
);
})}
</div>
</div>
);
}
|