/** * NeedsAttentionBar - Collapsible alert bar for items requiring user action * Shows pending reviews, sync failures, setup incomplete, automation failures */ import { useState } from 'react'; import { Link } from 'react-router-dom'; import { AlertIcon, ChevronDownIcon, ChevronUpIcon, CheckCircleIcon, CloseIcon, } from '../../icons'; export interface AttentionItem { id: string; type: 'pending_review' | 'sync_failed' | 'setup_incomplete' | 'automation_failed' | 'credits_low'; title: string; description: string; count?: number; actionLabel: string; actionHref?: string; onAction?: () => void; secondaryActionLabel?: string; secondaryActionHref?: string; onSecondaryAction?: () => void; } interface NeedsAttentionBarProps { items: AttentionItem[]; onDismiss?: (id: string) => void; } const typeConfig = { pending_review: { icon: CheckCircleIcon, bgColor: 'bg-amber-50 dark:bg-amber-900/20', borderColor: 'border-amber-200 dark:border-amber-800', iconColor: 'text-amber-500', titleColor: 'text-amber-800 dark:text-amber-200', }, sync_failed: { icon: AlertIcon, bgColor: 'bg-red-50 dark:bg-red-900/20', borderColor: 'border-red-200 dark:border-red-800', iconColor: 'text-red-500', titleColor: 'text-red-800 dark:text-red-200', }, setup_incomplete: { icon: AlertIcon, bgColor: 'bg-blue-50 dark:bg-blue-900/20', borderColor: 'border-blue-200 dark:border-blue-800', iconColor: 'text-blue-500', titleColor: 'text-blue-800 dark:text-blue-200', }, automation_failed: { icon: AlertIcon, bgColor: 'bg-red-50 dark:bg-red-900/20', borderColor: 'border-red-200 dark:border-red-800', iconColor: 'text-red-500', titleColor: 'text-red-800 dark:text-red-200', }, credits_low: { icon: AlertIcon, bgColor: 'bg-orange-50 dark:bg-orange-900/20', borderColor: 'border-orange-200 dark:border-orange-800', iconColor: 'text-orange-500', titleColor: 'text-orange-800 dark:text-orange-200', }, }; export default function NeedsAttentionBar({ items, onDismiss }: NeedsAttentionBarProps) { const [isCollapsed, setIsCollapsed] = useState(false); if (items.length === 0) { return null; } return (
{item.description}