From a4e2f6f448d7befca91406c5fd2c613363433d45 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Thu, 26 Mar 2026 09:03:27 +0000 Subject: [PATCH] refactor(recovery): neutralize placement vocabulary --- .../internal/subsystems/storage-recovery.md | 8 +++ .../Recovery/RecoveryHistorySection.tsx | 30 ++++++++--- .../Recovery/RecoveryPointDetails.test.tsx | 16 ++++++ .../Recovery/RecoveryPointDetails.tsx | 4 ++ .../Recovery/__tests__/Recovery.test.tsx | 31 ++++++++++-- frontend-modern/src/types/recovery.ts | 1 + .../recoveryFilterChipPresentation.test.ts | 2 +- .../recoveryLocationPresentation.test.ts | 42 ++++++++++++++++ .../recoveryTablePresentation.test.ts | 6 +++ .../utils/recoveryFilterChipPresentation.ts | 8 +-- .../src/utils/recoveryLocationPresentation.ts | 50 +++++++++++++++++++ .../src/utils/recoveryTablePresentation.ts | 4 ++ 12 files changed, 186 insertions(+), 16 deletions(-) create mode 100644 frontend-modern/src/utils/__tests__/recoveryLocationPresentation.test.ts create mode 100644 frontend-modern/src/utils/recoveryLocationPresentation.ts diff --git a/docs/release-control/v6/internal/subsystems/storage-recovery.md b/docs/release-control/v6/internal/subsystems/storage-recovery.md index 58c7fa157..2432c8386 100644 --- a/docs/release-control/v6/internal/subsystems/storage-recovery.md +++ b/docs/release-control/v6/internal/subsystems/storage-recovery.md @@ -360,6 +360,14 @@ when a recovery point includes canonical item-class metadata, `RecoveryPointDetails.tsx` must surface it as `Item Type` in the summary grid instead of jumping directly from item identity to platform and point-method metadata. +That same shared presentation layer also owns recovery placement vocabulary. +Cluster, node, and namespace facets remain valid supporting filters for +Proxmox-heavy and Kubernetes-heavy operators, but the governed recovery +surface must present them through platform-neutral labels such as +`Cluster / Site`, `Host / Agent`, and `Namespace / Group` across advanced +filters, active chips, table headers, and point details so the page treats +placement as optional context inside a multi-platform recovery model rather +than a Proxmox-native spine. The recovery table presentation helper now owns the canonical subject-type label fallback for recovery rows and delegates its title-casing to the shared `frontend-modern/src/utils/textPresentation.ts` helper rather than keeping a diff --git a/frontend-modern/src/components/Recovery/RecoveryHistorySection.tsx b/frontend-modern/src/components/Recovery/RecoveryHistorySection.tsx index e5ef217d9..c42c26dc1 100644 --- a/frontend-modern/src/components/Recovery/RecoveryHistorySection.tsx +++ b/frontend-modern/src/components/Recovery/RecoveryHistorySection.tsx @@ -22,6 +22,10 @@ import { getRecoveryItemTypePresentation, normalizeRecoveryItemTypeQueryValue, } from '@/utils/recoveryItemTypePresentation'; +import { + getRecoveryLocationFacetAllLabel, + getRecoveryLocationFacetLabel, +} from '@/utils/recoveryLocationPresentation'; import { normalizeRecoveryModeQueryValue } from '@/utils/recoveryRecordPresentation'; import { getRecoveryHistorySearchPlaceholder, @@ -178,7 +182,7 @@ export const RecoveryHistorySection: Component = (p
Filter results
- Narrow by scope, method, verification, or location. + Narrow by scope, method, verification, or placement.
0}> @@ -261,7 +265,9 @@ export const RecoveryHistorySection: Component = (p