From 9117ca13cf1e13f50f2f1cc89840d19bef840a54 Mon Sep 17 00:00:00 2001 From: SaelixCode Date: Fri, 3 Jul 2026 23:16:17 -0400 Subject: [PATCH] feat: add copy button to execution history details column Replaced the plain truncated Details cell with a flex layout containing a copy button. Users can now copy the full error/output text instead of relying on the native title tooltip to read long messages. --- .../components/ScheduledOperationsView.tsx | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/ScheduledOperationsView.tsx b/frontend/src/components/ScheduledOperationsView.tsx index aecde342..6ec599b2 100644 --- a/frontend/src/components/ScheduledOperationsView.tsx +++ b/frontend/src/components/ScheduledOperationsView.tsx @@ -9,8 +9,9 @@ import { SystemSheet, SheetSection } from '@/components/ui/system-sheet'; import { TogglePill } from '@/components/ui/toggle-pill'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; -import { Clock, Plus, Pencil, Trash2, History, RefreshCw, Play, ChevronLeft, ChevronRight, Download, CalendarClock, Table2 } from 'lucide-react'; +import { Clock, Plus, Pencil, Trash2, History, RefreshCw, Play, ChevronLeft, ChevronRight, Download, CalendarClock, Table2, Copy } from 'lucide-react'; import { toast } from '@/components/ui/toast-store'; +import { copyToClipboard } from '@/lib/clipboard'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { apiFetch, fetchForNode } from '@/lib/api'; import { Combobox } from '@/components/ui/combobox'; @@ -1058,8 +1059,32 @@ export default function ScheduledOperationsView({ filterNodeId, onClearFilter, p )} {duration} - - {run.error || run.output || '-'} + +
+ + {run.error || run.output || '-'} + + {(run.output || run.error) ? ( + + + + + + Copy details + + + ) : null} +
);