From ebd985990c1a38e4b020949d4e51a0856c4955f3 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 26 May 2026 07:53:14 -0400 Subject: [PATCH] =?UTF-8?q?feat(ui):=20ErrorDetailModal=20=E2=80=94=20clic?= =?UTF-8?q?k=20error=20=E2=86=92=20flat-text=20modal=20with=20copy=20butto?= =?UTF-8?q?n=20(replaces=20unusable=20:title=20tooltip=20for=20multi-line?= =?UTF-8?q?=20SQLAlchemy=20tracebacks)=20=E2=80=94=20Co-Authored-By:=20Cla?= =?UTF-8?q?ude=20Opus=204.7=20(1M=20context)=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/common/ErrorDetailModal.vue | 87 +++++++++++++++++++ .../components/settings/ImportTaskList.vue | 45 +++++++++- .../components/settings/SystemActivityTab.vue | 42 ++++++++- 3 files changed, 169 insertions(+), 5 deletions(-) create mode 100644 frontend/src/components/common/ErrorDetailModal.vue diff --git a/frontend/src/components/common/ErrorDetailModal.vue b/frontend/src/components/common/ErrorDetailModal.vue new file mode 100644 index 0000000..d8281a5 --- /dev/null +++ b/frontend/src/components/common/ErrorDetailModal.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/frontend/src/components/settings/ImportTaskList.vue b/frontend/src/components/settings/ImportTaskList.vue index c3edbd1..97bbebf 100644 --- a/frontend/src/components/settings/ImportTaskList.vue +++ b/frontend/src/components/settings/ImportTaskList.vue @@ -45,9 +45,11 @@
@@ -100,16 +102,35 @@ + + + + diff --git a/frontend/src/components/settings/SystemActivityTab.vue b/frontend/src/components/settings/SystemActivityTab.vue index 1db2724..f623bb0 100644 --- a/frontend/src/components/settings/SystemActivityTab.vue +++ b/frontend/src/components/settings/SystemActivityTab.vue @@ -59,8 +59,12 @@ {{ r.queue }} {{ shortTaskName(r.task_name) }} {{ r.target_id ?? '—' }} - - {{ r.error_type }} + + @@ -138,6 +142,12 @@
+ + @@ -145,8 +155,23 @@ import { computed, onMounted, onUnmounted, ref } from 'vue' import { useSystemActivityStore } from '../../stores/systemActivity.js' +import ErrorDetailModal from '../common/ErrorDetailModal.vue' import QueuesTable from './QueuesTable.vue' +// Click-to-open modal for full error text. Replaces the unusable +// :title="..." tooltip (operator-flagged 2026-05-26: SQLAlchemy +// rollback + traceback content rendered as a cramped browser tooltip +// you couldn't copy from or scroll within). +const showErrorModal = ref(false) +const errorModalTitle = ref('') +const errorModalMessage = ref('') + +function openError(title, message) { + errorModalTitle.value = title || 'Error details' + errorModalMessage.value = message || '' + showErrorModal.value = true +} + const store = useSystemActivityStore() const filterQueue = ref(null) @@ -276,5 +301,18 @@ function formatRelative(iso) { font-feature-settings: 'tnum'; } .fc-err { color: rgb(var(--v-theme-error, 220 80 80)); } +.fc-err-link { + /* Styled as a text-only button so the error_type cell stays + visually identical to the prior tooltip-bearing row, but is + now a real clickable target with hover affordance. */ + color: rgb(var(--v-theme-error, 220 80 80)); + background: transparent; + border: 0; + padding: 0; + font: inherit; + text-decoration: underline dotted; + cursor: pointer; +} +.fc-err-link:hover { text-decoration: underline; } .fc-muted { color: rgb(var(--v-theme-on-surface-variant)); }