refactor(proxmox): flatten Restore-points and PBS identity cells
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run

Completes the backups-table flattening. Restore points stacked the workload
name over a redundant "type vmid" subtitle (already in the label); PBS
artifacts stacked the same on Workload plus repository over instance. Both now
render single-line rows (~29px, matching the overview): the recoverable
Workload cell drops the redundant subtitle, and the PBS Repository cell drops
the instance subtitle with the instance promoted to its own column.

Snapshots, Archives, and Job history already rendered single-line main rows,
so the whole backups page is now flat-column and scannable. Gates green;
verified live (zero multi-line rows, 29px rows on both tables).
This commit is contained in:
rcourtman 2026-05-29 10:58:57 +01:00
parent ae7f9fc86c
commit 5c08b250a2
2 changed files with 21 additions and 24 deletions

View file

@ -101,13 +101,14 @@ export function ProxmoxPbsTable(props: {
<TableCard class={PLATFORM_TABLE_CARD_CLASS}>
<Table class="min-w-[1050px] table-fixed text-xs">
<colgroup>
<col style={{ width: '16%' }} />
<col style={{ width: '20%' }} />
<col style={{ width: '12%' }} />
<col style={{ width: '16%' }} />
<col style={{ width: '11%' }} />
<col style={{ width: '12%' }} />
<col style={{ width: '15%' }} />
<col style={{ width: '17%' }} />
<col style={{ width: '13%' }} />
<col style={{ width: '11%' }} />
<col style={{ width: '15%' }} />
<col style={{ width: '10%' }} />
<col style={{ width: '11%' }} />
<col style={{ width: '8%' }} />
</colgroup>
<TableHeader>
<TableRow class={PLATFORM_TABLE_HEADER_ROW_CLASS}>
@ -129,6 +130,7 @@ export function ProxmoxPbsTable(props: {
align="left"
headClass={getPlatformTableHeadClassForKind('text')}
/>
<TableHead class={getPlatformTableHeadClassForKind('text')}>Instance</TableHead>
<SortableHead
label="Created"
sortKey="created"
@ -173,24 +175,21 @@ export function ProxmoxPbsTable(props: {
{(backup) => (
<TableRow class="hover:bg-surface-hover">
<TableCell
class={`${getPlatformTableCellClassForKind('name')} text-base-content`}
class={`${getPlatformTableCellClassForKind('name')} text-base-content truncate font-semibold`}
>
<div class="min-w-0">
<div class="font-semibold">{pbsWorkloadLabel(backup)}</div>
<div class="font-mono text-[10px] uppercase text-muted">
{backup.backupType || 'backup'}
</div>
</div>
{pbsWorkloadLabel(backup)}
</TableCell>
<TableCell
class={`${getPlatformTableCellClassForKind('text')} text-base-content`}
class={`${getPlatformTableCellClassForKind('text')} text-base-content truncate font-mono text-[11px]`}
title={pbsRepositoryLabel(backup)}
>
<div class="min-w-0">
<div class="font-mono text-[11px]">{pbsRepositoryLabel(backup)}</div>
<div class="truncate text-[10px] text-muted" title={backup.instance}>
{backup.instance || '—'}
</div>
</div>
{pbsRepositoryLabel(backup)}
</TableCell>
<TableCell
class={`${getPlatformTableCellClassForKind('text')} text-base-content truncate font-mono text-[11px]`}
title={backup.instance}
>
{backup.instance || '—'}
</TableCell>
<TableCell
class={`${getPlatformTableCellClassForKind('numeric-value')} text-base-content`}

View file

@ -33,6 +33,7 @@ import {
// "Restore points" table: every recoverable artifact (PBS / archive / snapshot)
// across sources in one flat, sortable list. Presentational only — the parent
// owns the filtered + sorted memo and the shared search / day / source filters.
// Single-line rows: the workload identity (type/vmid) is already in the label.
export function ProxmoxRecoverableTable(props: {
artifacts: RecoverableArtifact[];
hasAnyArtifacts: boolean;
@ -146,10 +147,7 @@ export function ProxmoxRecoverableTable(props: {
class={`${getPlatformTableCellClassForKind('name')} text-base-content`}
>
<div class="min-w-0">
<div class="font-semibold">{artifact.workload.label}</div>
<div class="font-mono text-[10px] uppercase text-muted">
{artifact.workload.typeLabel} {artifact.workload.vmid}
</div>
<div class="truncate font-semibold">{artifact.workload.label}</div>
</div>
</TableCell>
<TableCell