import { Link, useNavigate } from 'react-router-dom'; import { extractApiError } from '@/api/client'; import { useAuth } from '@/hooks/useAuth'; import { useEngagementSimulations } from '@/hooks/useSimulations'; import { LoadingState } from './LoadingState'; import { ErrorState } from './ErrorState'; import { EmptyState } from './EmptyState'; import { SimulationStatusBadge } from './SimulationStatusBadge'; interface SimulationListProps { engagementId: number; } function formatDate(value: string | null): string { if (!value) return '—'; return value.replace('T', ' ').slice(0, 16); } export function SimulationList({ engagementId }: SimulationListProps): JSX.Element { const { data, isLoading, isError, error, refetch } = useEngagementSimulations(engagementId); const { canEditEngagements } = useAuth(); const navigate = useNavigate(); if (isLoading) return ; if (isError) { return ( refetch()} /> ); } if (!data || data.length === 0) { return ( New simulation ) : undefined } /> ); } return ( Simulations {canEditEngagements ? ( New simulation ) : null} Name MITRE Status Executed at {data.map((sim) => ( navigate(`/engagements/${engagementId}/simulations/${sim.id}/edit`) } > {sim.name} {sim.mitre_technique_id ?? '—'} {formatDate(sim.executed_at)} ))} ); }