import { useState, useEffect } from 'react'; // Importar useState y useEffect import { Clock, PauseCircle, Hourglass } from 'lucide-react'; import { format, formatDistanceToNow, isPast, addSeconds } from 'date-fns'; import { es } from 'date-fns/locale'; interface ExecutionCardProps { ultimaEjecucion: string | null | undefined; proximaEjecucion: string | null | undefined; enEjecucion: boolean; } export default function ExecutionCard({ ultimaEjecucion, proximaEjecucion, enEjecucion }: ExecutionCardProps) { // Estado para forzar la actualización de la UI cada X segundos const [, setTick] = useState(0); useEffect(() => { // Actualizar cada 5 segundos para que el "hace X tiempo" y el estado "En cola" // se sientan en tiempo real sin esperar al refetch del backend. const interval = setInterval(() => { setTick(t => t + 1); }, 5000); return () => clearInterval(interval); }, []); const formatDate = (dateString: string) => { return format(new Date(dateString), "dd/MM, HH:mm", { locale: es }); }; const formatRelative = (dateString: string) => { return formatDistanceToNow(new Date(dateString), { addSuffix: true, locale: es }); }; // Esta lógica se recalculará cada 5 segundos gracias al setTick const isOverdue = proximaEjecucion ? isPast(addSeconds(new Date(proximaEjecucion), -10)) : false; return (
{/* Barra de estado */}
{/* Encabezado Compacto */}
Sincronización
{enEjecucion ? 'AUTO' : 'MANUAL'}
{/* ÚLTIMA EJECUCIÓN */}

Última

{ultimaEjecucion ? (

{formatRelative(ultimaEjecucion)}

{formatDate(ultimaEjecucion)}

) : (

--

)}
{/* PRÓXIMA EJECUCIÓN */}

Próxima

{enEjecucion && proximaEjecucion ? (
{isOverdue ? (

En cola...

) : (

{formatDate(proximaEjecucion)} hs

aprox. {formatRelative(proximaEjecucion)}

)}
) : (
Detenido
)}
); }