/** * PatternDetectionSection Component * * Container section for displaying pattern detection results from PageAnalysis. * Shows listing templates, search mechanism, and pagination mechanism detection. * * Features: * - Reliability status badge display * - Pattern count summary * - Conditional rendering based on available patterns * - Empty state for no patterns * - Placeholder sections for Phase 4 components * * @layer Presentation */ import * as React from 'react'; import { PageAnalysis } from '@/domain/entities/PageAnalysis'; import { ReliabilityStatusBadge } from '@/components/ui/ReliabilityStatusBadge'; import { ListingTemplateCard } from './ListingTemplateCard'; import { PaginationMechanismCard } from './components/PaginationMechanismCard'; import { ErrorBoundary } from '@/components/ErrorBoundary'; import type { ListingTemplate } from '@archer/domain'; export interface PatternDetectionSectionProps { analysis: PageAnalysis; onViewTemplate?: (template: ListingTemplate) => void; className?: string; } export const PatternDetectionSection = React.forwardRef( ({ analysis, onViewTemplate, className }, ref) => { const hasPatterns = analysis.hasPatterns(); const listingCount = analysis.getListingCount(); return (

Unable to display pattern detection data. This analysis may have been created with an older version or contains invalid data.

} >
{/* Header with reliability status */}

Pattern Detection

{analysis.reliabilityStatus && ( )}
{/* Empty state */} {!hasPatterns && (

No patterns detected for this page.

)} {/* Pattern sections */} {hasPatterns && (
{/* Listing Templates */} {analysis.listingTemplates && analysis.listingTemplates.length > 0 && (

Listing Templates ({listingCount})

{analysis.listingTemplates.map((template, idx) => ( onViewTemplate?.(template)} /> ))}
)} {/* Search Mechanism */} {analysis.searchMechanism && (

Search Mechanism

{/* Phase 4: SearchMechanismCard component will be added here */}

Search mechanism card will be added in Phase 4.

Method: {analysis.searchMechanism.method || 'Unknown'}

)} {/* Pagination Mechanism */} {analysis.paginationMechanism && (

Pagination Mechanism

)}
)}
); } ); PatternDetectionSection.displayName = 'PatternDetectionSection';