diff --git a/src/demo/apps/arrangement/routes/Comparison.tsx b/src/demo/apps/arrangement/routes/Comparison.tsx index ae49ed7..f943aef 100644 --- a/src/demo/apps/arrangement/routes/Comparison.tsx +++ b/src/demo/apps/arrangement/routes/Comparison.tsx @@ -4,7 +4,7 @@ import { ComparisonPage } from '../../../../components/pages/ComparisonPage'; import { Typography } from '../../../../components/atoms/Typography'; import { Button } from '../../../../components/atoms/Button'; import { useComparisonBasket } from '../../../shared/state/useComparisonBasket'; -import { resolveComparisonPackage } from '../../../shared/fixtures/packages'; +import { resolveComparisonPackage, DEMO_RECOMMENDED_KEY } from '../../../shared/fixtures/packages'; import { demoNav } from '../DemoNav'; export function ComparisonRoute() { @@ -12,7 +12,12 @@ export function ComparisonRoute() { const packageKeys = useComparisonBasket((s) => s.packageKeys); const remove = useComparisonBasket((s) => s.remove); + // The system-recommended package is shown as an extra column on top of + // the user's basket. Dedupe against the basket so it never renders twice. + const recommendedPackage = resolveComparisonPackage(DEMO_RECOMMENDED_KEY) ?? undefined; + const packages = packageKeys + .filter((key) => key !== DEMO_RECOMMENDED_KEY) .map((key) => { const resolved = resolveComparisonPackage(key); return resolved ? { key, pkg: resolved } : null; @@ -22,7 +27,9 @@ export function ComparisonRoute() { x !== null, ); - if (packages.length === 0) { + // Empty state only when there's genuinely nothing to show — normally the + // recommended package will always resolve, so this branch is defensive. + if (packages.length === 0 && !recommendedPackage) { return ( {demoNav} @@ -51,6 +58,7 @@ export function ComparisonRoute() { return ( p.pkg)} + recommendedPackage={recommendedPackage} onArrange={(id) => alert(`Arrange "${id}" — would route to next wizard step.`)} onRemove={(id) => { // ComparisonPackage.id is the bare package id; we need the basket's diff --git a/src/demo/shared/fixtures/packages.ts b/src/demo/shared/fixtures/packages.ts index ddb2fd6..2abfae3 100644 --- a/src/demo/shared/fixtures/packages.ts +++ b/src/demo/shared/fixtures/packages.ts @@ -1245,6 +1245,16 @@ export function resolveComparisonPackage(key: BasketKey): ComparisonPackage | nu return bundle.forComparison.find((p) => p.id === parsed.packageId) ?? null; } +/** + * Demo recommendation: the package ComparisonPage always surfaces as the + * system-recommended option. Not part of the user's basket and doesn't + * count against the 3-package basket cap — it's an editorial suggestion + * layered on top of whatever the user has selected. If the same package + * is already in the basket, the Comparison route dedupes so it appears + * once (as the recommended column). + */ +export const DEMO_RECOMMENDED_KEY: BasketKey = 'parsons:deluxe'; + /** * Verified providers surfaced under the "Similar packages from verified * providers" grid on unverified tier-2 / tier-3 pages. Derived from the