From 65e34eef4bcd4478db84bc6ac50d7e4fe57eb866 Mon Sep 17 00:00:00 2001 From: Richie Date: Thu, 23 Apr 2026 14:11:48 +1000 Subject: [PATCH] ComparisonTable: unverified providers show 'Unknown', not em-dash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Absence of data means different things for verified vs unverified: - Verified providers itemise everything; a missing Optional/Extra is an explicit "Not Included" and a missing Essential is an (unlikely) gap. - Unverified providers have scraped/estimated data; a missing cell just means "we don't know." Route the two via `pkg.provider.verified` in lookupValue — unverified packages now render missing cells as the existing "Unknown" + info-icon treatment (already used by explicit `type: 'unknown'` cells). Verified paths unchanged. Drop the "Some providers have not provided an itemised pricing breakdown" footer — the "Unknown" treatment is self-explanatory, and the disclaimer was tied to the em-dash convention that no longer applies. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../ComparisonTable.stories.tsx | 2 +- .../ComparisonTable/ComparisonTable.tsx | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/components/organisms/ComparisonTable/ComparisonTable.stories.tsx b/src/components/organisms/ComparisonTable/ComparisonTable.stories.tsx index b78ba6b..9576c75 100644 --- a/src/components/organisms/ComparisonTable/ComparisonTable.stories.tsx +++ b/src/components/organisms/ComparisonTable/ComparisonTable.stories.tsx @@ -346,7 +346,7 @@ export const MixedVerified: Story = { // --- Missing Itemised Data --------------------------------------------------- -/** One provider has no itemised breakdown — cells show "—" */ +/** One provider has no itemised breakdown — unverified cells show "Unknown" */ export const MissingData: Story = { args: { packages: [pkgWollongong, pkgNoItemised, pkgMackay], diff --git a/src/components/organisms/ComparisonTable/ComparisonTable.tsx b/src/components/organisms/ComparisonTable/ComparisonTable.tsx index 658022d..bb629b0 100644 --- a/src/components/organisms/ComparisonTable/ComparisonTable.tsx +++ b/src/components/organisms/ComparisonTable/ComparisonTable.tsx @@ -226,11 +226,20 @@ function lookupValue( sectionHeading: string, itemName: string, ): ComparisonCellValue { - if (pkg.itemizedAvailable === false) return { type: 'unavailable' }; + // For unverified providers, absence means "we don't know" — data is + // scraped/estimated. For verified providers, absence means the package + // explicitly doesn't include this item (→ "Not Included" in Optionals/ + // Extras; em-dash in Essentials as a safety net — canonical-essentials + // rule says every verified package has all 9, so this path shouldn't + // fire in practice). + const missing: ComparisonCellValue = pkg.provider.verified + ? { type: 'unavailable' } + : { type: 'unknown' }; + if (pkg.itemizedAvailable === false) return missing; const section = pkg.sections.find((s) => s.heading === sectionHeading); - if (!section) return { type: 'unavailable' }; + if (!section) return missing; const item = section.items.find((i) => i.name === itemName); - if (!item) return { type: 'unavailable' }; + if (!item) return missing; return item.value; } @@ -493,13 +502,6 @@ export const ComparisonTable = React.forwardRef ))} - - {packages.some((p) => p.itemizedAvailable === false) && mergedSections.length > 0 && ( - - * Some providers have not provided an itemised pricing breakdown. Their items are shown - as "—" above. - - )} ); },