Descripción
CorreoWidget es un widget compacto React que muestra un resumen visual del último informe de correo en el dashboard (página de inicio). Despliega contadores Actúa/Entérate, aviso de urgencias y hora de la última pasada. Funciona como entrada rápida a /correo.
Responsabilidades
- Fetch GET
/api/correo/digestal montar - Renderizar contadores visuales (actúa/entérate) en tamaños distintos (hero + secundario)
- Mostrar indicador de urgencias (rojo si hay, naranja si no)
- Mostrar hora de última pasada + contador de ruido
- Ser clickeable → navega a
/correo(todo el widget es un<a href="/correo">)
Interfaz
Props
Ninguna — datos autogenerados con fetch interno.
Estado
const [digest, setDigest] = useState<Digest | null>(null);
const [loading, setLoading] = useState(true);
interface Digest {
generated_at: string;
ruido_count: number;
items: DigestItem[];
}
interface DigestItem {
nivel: 'actua' | 'enterate';
urgente?: boolean;
}
Comportamiento
Ciclo de vida
-
Setup:
- Si localhost → skip fetch, set loading=false
- Si no → fetch
GET /api/correo/digest
-
Fetch:
- Response 200 OK → deserializa y setea
digest - Response no-ok →
setDigest(null) - Catch silencioso →
setDigest(null) - Finalmente →
setLoading(false)
- Response 200 OK → deserializa y setea
Render
Estados
Loading (loading=true):
Cargando…
(div con color muted)
Sin informe (!digest):
Sin informe aún — lo publica tu pasada de /correo
(empty-state)
Con informe:
<a href="/correo"> <!-- todo el widget es clickeable -->
[2 contadores KPI]
- Izquierda: ACTÚA (número hero, 2rem)
- Derecha: ENTÉRATA (número 1.25rem)
[Línea de urgencias] (si las hay)
- Color rojo, fontWeight 700, text-sm
- Texto: "N urgente(s) esperándote"
[Pie]
- Hora de última pasada (12:34 formato ES)
- Ruido filtrado: N mensajes
</a>
Diseño
Colores y tipografía
KPI Actúa:
- Font size: 2rem (design-exception: hero counter)
- Font weight: 700
- Font family: ‘Oswald’ (sans-serif)
- Color:
--dangersi hay urgentes,--color-warningsi no
KPI Entérata:
- Font size: 1.25rem
- Font weight: 700
- Font family: ‘Oswald’
- Color: inherit (color-foreground)
Urgencias (si existen):
- Font size: text-sm
- Color:
--danger - Font weight: 700
- Margin-top: 0.25rem
- Texto: “N urgente(s) esperándote”
Pie (hora + ruido):
- Font size: text-xs
- Color: fg-dim
- Margin-top: 0.375rem
Layout
- Contenedor externo:
<a>sin decoración (textDecoration: none) - Sección KPIs: flex, gap 1rem, align-items baseline
- Cada contador: flex column, gap 0.375rem (número + label)
- Urgencias: nueva div si existen
- Pie: nueva div
Integración en dashboard
En src/components/variants/desktop/DesktopA.tsx:
<div className="bento glow-blue animate-in d-5" style={{ '--bento-grad': 'var(--grad-blue)' }}>
<div className="card-head">
<span className="card-title">Correo</span>
<a href="/correo" className="btn xs action">Ver informe</a>
</div>
<CorreoWidget />
</div>
- Clase bento con glow-blue
- Header con título “Correo” + botón “Ver informe”
- CorreoWidget renderizado dentro
Véase también
- [[feature—workspace—correo-menu-f0]]
- [[entity—functions—endpoint—correo-digest]]
- [[entity—src—component—correo-page]]