diff --git a/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/components/EventTimeline.tsx b/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/components/EventTimeline.tsx index 696ed9b8..751a1d5e 100644 --- a/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/components/EventTimeline.tsx +++ b/src/Web/autopilot-monitor-web/app/sessions/[sessionId]/components/EventTimeline.tsx @@ -255,6 +255,7 @@ function EventRow({ event, isGalacticAdmin }: { event: EnrollmentEvent; isGalact const [showDetails, setShowDetails] = useState(false); const [showRaw, setShowRaw] = useState(false); const [copied, setCopied] = useState(false); + const [copiedDetail, setCopiedDetail] = useState(false); const detailData = useMemo(() => normalizeEventDataForDisplay(event.data), [event.data]); // Detect truncated data: backend sets _rawDataJson when DataJson could not be parsed @@ -278,6 +279,16 @@ function EventRow({ event, isGalacticAdmin }: { event: EnrollmentEvent; isGalact ? gatherOutput.replace(/\r\n/g, "\n").replace(/\r/g, "\n") : null; + const copyDetailContent = async (text: string) => { + try { + await navigator.clipboard.writeText(text); + setCopiedDetail(true); + setTimeout(() => setCopiedDetail(false), 1400); + } catch (err) { + console.error('Failed to copy detail content:', err); + } + }; + const copyEventId = async () => { try { await navigator.clipboard.writeText(event.eventId); @@ -335,7 +346,24 @@ function EventRow({ event, isGalacticAdmin }: { event: EnrollmentEvent; isGalact {gatherCommand} )} -
{formattedOutput}
{rawDataJson}
{JSON.stringify(detailData, null, 2)}