import { useState } from 'react'; import type { ExecutionSummary } from '../../api/schema'; import { StatusPill } from '../../components/shared/StatusPill'; import { DurationBar } from '../../components/shared/DurationBar'; import { AppBadge } from '../../components/shared/AppBadge'; import { ProcessorTree } from './ProcessorTree'; import { ExchangeDetail } from './ExchangeDetail'; import styles from './ResultsTable.module.css'; interface ResultsTableProps { results: ExecutionSummary[]; loading: boolean; } function formatTime(iso: string) { return new Date(iso).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit', second: '2-digit', fractionalSecondDigits: 3, }); } export function ResultsTable({ results, loading }: ResultsTableProps) { const [expandedId, setExpandedId] = useState(null); if (loading && results.length === 0) { return (
Loading executions...
); } if (results.length === 0) { return (
No executions found matching your filters.
); } return (
{results.map((exec) => { const isExpanded = expandedId === exec.executionId; return ( setExpandedId(isExpanded ? null : exec.executionId)} /> ); })}
Timestamp Status Application Route Correlation ID Duration
); } function ResultRow({ exec, isExpanded, onToggle, }: { exec: ExecutionSummary; isExpanded: boolean; onToggle: () => void; }) { return ( <> › {formatTime(exec.startTime)} {exec.routeId} {exec.correlationId ?? '-'} {isExpanded && (
)} ); }