/** * 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'; import Button from '../ui/button/Button'; import IconButton from '../ui/button/IconButton'; 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-warning-50 dark:bg-warning-900/20', borderColor: 'border-warning-200 dark:border-warning-800', iconColor: 'text-warning-500', titleColor: 'text-warning-800 dark:text-warning-200', }, sync_failed: { icon: AlertIcon, bgColor: 'bg-error-50 dark:bg-error-900/20', borderColor: 'border-error-200 dark:border-error-800', iconColor: 'text-error-500', titleColor: 'text-error-800 dark:text-error-200', }, setup_incomplete: { icon: AlertIcon, bgColor: 'bg-brand-50 dark:bg-brand-900/20', borderColor: 'border-brand-200 dark:border-brand-800', iconColor: 'text-brand-500', titleColor: 'text-brand-800 dark:text-brand-200', }, automation_failed: { icon: AlertIcon, bgColor: 'bg-error-50 dark:bg-error-900/20', borderColor: 'border-error-200 dark:border-error-800', iconColor: 'text-error-500', titleColor: 'text-error-800 dark:text-error-200', }, credits_low: { icon: AlertIcon, bgColor: 'bg-warning-50 dark:bg-warning-900/20', borderColor: 'border-warning-200 dark:border-warning-800', iconColor: 'text-warning-500', titleColor: 'text-warning-800 dark:text-warning-200', }, }; export default function NeedsAttentionBar({ items, onDismiss }: NeedsAttentionBarProps) { const [isCollapsed, setIsCollapsed] = useState(false); if (items.length === 0) { return null; } return (
{item.description}