feat: F010 unified result feed

Replace monolithic Results.tsx with decomposed component architecture:
- 8 new components in src/components/results/ (ResultTypeBadge, ResultConfidenceSummary, FeedEmptyState, FeedSkeleton, ResultFeedHeader, ResultFilterBar, UnifiedResultCard, UnifiedResultFeed)
- Reuses existing useUnifiedResults hook and compareStore
- FUTURE_AVAILABILITY cards always display non-dismissable disclaimer
- Filter by result type + sort by score/area/rent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-16 13:18:58 +02:00
parent 3152de004c
commit 307b450807
10 changed files with 427 additions and 369 deletions
@@ -0,0 +1,29 @@
import type { UnifiedMatchResult } from '../../domain/unifiedResult'
import { UnifiedResultCard } from './UnifiedResultCard'
interface Props {
results: UnifiedMatchResult[]
isInCompare: (id: string) => boolean
onCompare: (propertyId: string) => void
}
export function UnifiedResultFeed({ results, isInCompare, onCompare }: Props) {
return (
<>
{results.map(result => {
const compareId =
result.resultType !== 'FUTURE_AVAILABILITY'
? (result as { property: { id: string } }).property.id
: ''
return (
<UnifiedResultCard
key={result.matchId}
result={result}
isInCompare={compareId ? isInCompare(compareId) : false}
onCompare={onCompare}
/>
)
})}
</>
)
}