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 (
Última
{ultimaEjecucion ? ({formatRelative(ultimaEjecucion)}
{formatDate(ultimaEjecucion)}
--
)}Próxima
{enEjecucion && proximaEjecucion ? (
En cola...
{formatDate(proximaEjecucion)} hs
aprox. {formatRelative(proximaEjecucion)}