import React from 'react'; import type { ReviewStatus, AgentName, AgentStatus } from '../types'; import { AGENT_NAMES } from '../constants'; import { LegalIcon } from './icons/LegalIcon'; import { BrandIcon } from './icons/BrandIcon'; import { CheckCircleIcon, ExclamationTriangleIcon, InformationCircleIcon } from './icons/StatusIcons'; import { ChannelIcon } from './icons/ChannelIcon'; import { SpinnerIcon } from './icons/SpinnerIcon'; interface StatusDashboardProps { status: ReviewStatus; variant?: 'default' | 'hero'; } interface StatusInfoProps { status: string; isHeroVariant?: boolean; } // FIX: Storing components instead of instantiated elements to avoid React.cloneElement type issues. const agentIcons: Record>> = { 'Legal Agent': LegalIcon, 'Brand Agent': BrandIcon, 'Channel Best Practices Agent': ChannelIcon, 'Channel Tech Specs Agent': ChannelIcon, }; const StatusInfo: React.FC = ({ status, isHeroVariant = false }) => { const colors = isHeroVariant ? { complete: 'text-success-light', issues: 'text-warning-light', error: 'text-error-light', pending: 'text-grey-300' } : { complete: 'text-success', issues: 'text-warning', error: 'text-error', pending: 'text-oliver-black/60' }; switch (status) { case 'complete': return
Pass
; case 'issues-found': return
Issues Found
; case 'error': return
Error
; default: return
Pending
; } }; export const StatusDashboard: React.FC = ({ status, variant = 'default' }) => { if (Object.keys(status).length === 0) return null; const isHeroVariant = variant === 'hero'; const getTileClassName = (agentStatus: AgentStatus, isHero: boolean): string => { const baseClasses = 'rounded-[10px] flex flex-col text-center transition-colors duration-500 ease-in-out'; if (isHero) { const heroBase = `${baseClasses} p-4`; switch (agentStatus) { case 'complete': return `${heroBase} bg-success/20`; case 'issues-found': return `${heroBase} bg-warning/20`; case 'error': return `${heroBase} bg-error/20`; default: // 'pending' or 'in-progress' return `${heroBase} bg-white/10`; } } else { const defaultBase = `${baseClasses} p-6 shadow-lg border`; switch (agentStatus) { case 'complete': return `${defaultBase} bg-success-light border-success`; case 'issues-found': return `${defaultBase} bg-warning-light border-warning`; case 'error': return `${defaultBase} bg-error-light border-error`; default: // 'pending' or 'in-progress' return `${defaultBase} bg-oliver-grey border-grey-300`; } } }; return (

Review Progress

{AGENT_NAMES.map((agentName) => { const agentStatus = status[agentName] || 'pending'; const iconColor = isHeroVariant ? 'text-oliver-azure' : 'text-oliver-azure'; const Icon = agentIcons[agentName]; return (

{agentName}

{agentStatus === 'in-progress' ? (
Analysing...
) : ( )}
); })}
); };