From 2abb55f63f6316f8718f89d6b64e48bcd4bdfbb6 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Wed, 20 May 2026 17:57:03 +0100 Subject: [PATCH] Second consistency pass on Proxmox backup tabs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Smaller details that diverged from sibling pages: - Tone-colour the Recent tasks STATUS word per state (emerald / red / amber / muted), matching Replication's `text-emerald-600 dark: text-emerald-300` per-state tone. Was rendering everything in default base-content white. - Move the Snapshots row age dot from the GUEST column to the LATEST column so the timestamp-and-its-freshness-dot live together — same pattern Backup files already uses in its Created column. The leftmost GUEST cell is now just chevron + label. - Tighten counter wording. "189 entries" / "184 entries" → "189 archives" / "184 tasks", matching Replication's "8 jobs" and Ceph's "1 clusters" domain-noun convention. - Pill-style the Verified column in Backup files (emerald chip) so it reads as a sibling of the existing amber Protected chip rather than dot+text. Both columns now signal an explicit positive state with the same chip shape. - Tighten inner snapshot-drilldown table header padding to py-0.5 to match the outer table's getPlatformTableHeadClass (was py-1). --- .../features/proxmox/ProxmoxBackupsTable.tsx | 64 ++++++++++++------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/frontend-modern/src/features/proxmox/ProxmoxBackupsTable.tsx b/frontend-modern/src/features/proxmox/ProxmoxBackupsTable.tsx index 8a40edb3a7..c6ea19b577 100644 --- a/frontend-modern/src/features/proxmox/ProxmoxBackupsTable.tsx +++ b/frontend-modern/src/features/proxmox/ProxmoxBackupsTable.tsx @@ -109,22 +109,34 @@ const TABS: BackupTabSpec[] = [ }, ]; +// Replication colours the per-row status word to match its dot (emerald +// text for Healthy, red for Failed, etc.). Mirror that here so the +// Recent tasks STATUS column reads the same way — dot + same-tone word. function classifyTaskStatus(status: string): { variant: StatusIndicatorVariant; label: string; + toneClass: string; } { const normalized = (status ?? '').toLowerCase(); if (normalized === 'ok' || normalized === 'success' || normalized === 'completed') { - return { variant: 'success', label: 'OK' }; + return { + variant: 'success', + label: 'OK', + toneClass: 'text-emerald-600 dark:text-emerald-300', + }; } if (normalized === 'running') { - return { variant: 'warning', label: 'Running' }; + return { + variant: 'warning', + label: 'Running', + toneClass: 'text-amber-600 dark:text-amber-300', + }; } if (normalized === 'failed' || normalized === 'error') { - return { variant: 'danger', label: 'Failed' }; + return { variant: 'danger', label: 'Failed', toneClass: 'text-red-600 dark:text-red-300' }; } - if (!normalized) return { variant: 'muted', label: '—' }; - return { variant: 'muted', label: status }; + if (!normalized) return { variant: 'muted', label: '—', toneClass: 'text-muted' }; + return { variant: 'muted', label: status, toneClass: 'text-muted' }; } function guestLabel(type: string | undefined, vmid: number): string { @@ -831,9 +843,14 @@ export const ProxmoxBackupsTable: Component<{ fallback={ {totalForTab()} entries} + fallback={ + <> + {totalForTab()} {tab() === 'archives' ? 'archives' : 'tasks'} + + } > - {visibleForTab()} of {totalForTab()} entries + {visibleForTab()} of {totalForTab()}{' '} + {tab() === 'archives' ? 'archives' : 'tasks'} } > @@ -907,11 +924,6 @@ export const ProxmoxBackupsTable: Component<{ }`} aria-hidden="true" /> -