import React from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { Loader2, CheckCircle2, AlertCircle, X, ChevronDown, ChevronUp, Trash2, Clock, Activity } from 'lucide-react'; import { ForensicTask } from '../hooks/useTaskQueue'; import { Button } from './ui/button'; import { Progress } from './ui/progress'; import { Badge } from './ui/badge'; import { ScrollArea } from './ui/scroll-area'; import { cn } from '@/lib/utils'; interface TaskQueueManagerProps { tasks: ForensicTask[]; onRemove: (id: string) => void; onClearCompleted: () => void; isOpen: boolean; onToggle: () => void; } export const TaskQueueManager: React.FC = ({ tasks, onRemove, onClearCompleted, isOpen, onToggle }) => { const activeTasks = tasks.filter(t => t.status === 'processing' || t.status === 'pending'); const completedTasks = tasks.filter(t => t.status === 'completed' || t.status === 'failed'); return (
{/* Header */}
0 ? "text-primary animate-pulse" : "text-zinc-500")} /> Task Queue {activeTasks.length > 0 && ( {activeTasks.length} )}
{isOpen ? : }
{isOpen && (
{tasks.length} Total Tasks {completedTasks.length > 0 && ( )}
{tasks.length === 0 ? (

No active tasks

) : ( tasks.map((task) => (

{task.fileName}

{task.status === 'processing' && ( )} {task.status === 'completed' && ( )} {task.status === 'failed' && ( )} {task.status}
{task.status === 'processing' && ( )} {task.error && (

{task.error}

)}
)) )}
)}
); };