// ======================================== // QueueCard Component // ======================================== // Card component for displaying queue information and actions import { useIntl } from 'react-intl'; import { ListTodo, CheckCircle2, AlertCircle } from 'lucide-react'; import { Card } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; import { ExecutionGroup } from './ExecutionGroup'; import { QueueActions } from './QueueActions'; import { cn } from '@/lib/utils'; import type { IssueQueue } from '@/lib/api'; // ========== Types ========== export interface QueueCardProps { queue: IssueQueue; isActive?: boolean; onActivate?: (queueId: string) => void; onDeactivate?: () => void; onDelete?: (queueId: string) => void; onMerge?: (sourceId: string, targetId: string) => void; onSplit?: (sourceQueueId: string, itemIds: string[]) => void; onItemClick?: (item: import('@/lib/api').QueueItem) => void; isActivating?: boolean; isDeactivating?: boolean; isDeleting?: boolean; isMerging?: boolean; isSplitting?: boolean; className?: string; } // ========== Component ========== export function QueueCard({ queue, isActive = false, onActivate, onDeactivate, onDelete, onMerge, onSplit, onItemClick, isActivating = false, isDeactivating = false, isDeleting = false, isMerging = false, isSplitting = false, className, }: QueueCardProps) { const { formatMessage } = useIntl(); // Use "current" for queue ID display const queueId = 'current'; // Calculate item counts const taskCount = queue.tasks?.length || 0; const solutionCount = queue.solutions?.length || 0; const conflictCount = queue.conflicts?.length || 0; const totalItems = taskCount + solutionCount; const groupCount = Object.keys(queue.grouped_items || {}).length; // Get execution groups from grouped_items const executionGroups = Object.entries(queue.grouped_items || {}).map(([name, items]) => ({ id: name, type: name.toLowerCase().includes('parallel') ? 'parallel' as const : 'sequential' as const, items: items || [], })); return ( {/* Header */}

{formatMessage({ id: 'issues.queue.title' })}

{queueId.substring(0, 20)}{queueId.length > 20 ? '...' : ''}

{isActive && ( {formatMessage({ id: 'issues.queue.status.active' })} )}
{/* Stats */}
{formatMessage({ id: 'issues.queue.items' })}: {totalItems}
{formatMessage({ id: 'issues.queue.groups' })}: {groupCount}
{/* Conflicts Warning */} {conflictCount > 0 && (
{conflictCount} {formatMessage({ id: 'issues.queue.conflicts' })}
)} {/* Execution Groups */} {executionGroups.length > 0 && (

{formatMessage({ id: 'issues.queue.executionGroups' })}

{executionGroups.map((group) => ( ))}
)} {/* Empty State */} {executionGroups.length === 0 && totalItems === 0 && (

{formatMessage({ id: 'issues.queue.empty' })}

)}
); } export default QueueCard;