import React from 'react'; import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip'; import { Clock } from 'lucide-react'; import { RunStatusBadge } from './ScheduleStatusBadge'; import type { ScheduleRun } from '@shared/types'; // ============================================================================= // Props // ============================================================================= interface ScheduleRunRowProps { run: ScheduleRun; onClick?: (run: ScheduleRun) => void; } // ============================================================================= // Helpers // ============================================================================= function formatDuration(ms: number): string { if (ms < 1000) return `${ms}ms`; const seconds = Math.floor(ms / 1000); if (seconds < 60) return `${seconds}s`; const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; if (minutes < 60) return `${minutes}m ${remainingSeconds}s`; const hours = Math.floor(minutes / 60); const remainingMinutes = minutes % 60; return `${hours}h ${remainingMinutes}m`; } function formatTime(isoString: string): string { try { return new Date(isoString).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', hour12: false, }); } catch { return isoString; } } // ============================================================================= // Component // ============================================================================= export const ScheduleRunRow = ({ run, onClick }: ScheduleRunRowProps): React.JSX.Element => (
onClick(run) : undefined} role={onClick ? 'button' : undefined} tabIndex={onClick ? 0 : undefined} onKeyDown={ onClick ? (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onClick(run); } } : undefined } > {formatTime(run.startedAt)} {run.durationMs != null ? ( {formatDuration(run.durationMs)} ) : null} {run.summary ? ( {run.summary.slice(0, 80)}

{run.summary.slice(0, 500)}

) : null} {run.error ? ( {run.error.slice(0, 60)}

{run.error.slice(0, 500)}

) : null}
);