"use client"; import { useState } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Loader2, Pause, Play, StopCircle, X } from "lucide-react"; import { useApi } from "@/hooks/use-api"; import { toast } from "sonner"; interface ActiveTaskCardProps { jobId: string; workflowName: string; status: string; businessesFound?: number; onDismiss?: () => void; onStatusChange?: () => void; } export function ActiveTaskCard({ jobId, workflowName, status, businessesFound = 0, onDismiss, onStatusChange, }: ActiveTaskCardProps) { const [isControlling, setIsControlling] = useState(false); const { post: controlJob } = useApi(); const handleControl = async (action: "pause" | "resume" | "stop") => { setIsControlling(true); try { const result = await controlJob("/api/scraping/control", { jobId, action, }); if (result) { toast.success(`Task ${action}d successfully`); onStatusChange?.(); } else { throw new Error("Failed to control task"); } } catch (error) { toast.error(`Failed to ${action} task`); console.error(`Error ${action}ing task:`, error); } finally { setIsControlling(false); } }; const getStatusBadge = () => { switch (status) { case "processing": return Running; case "paused": return Paused; case "completed": return Completed; case "failed": return Stopped; default: return Pending; } }; return (

Scraping: {workflowName}

{getStatusBadge()}

{businessesFound} businesses found

{status === "processing" && ( )} {status === "paused" && ( )} {(status === "processing" || status === "paused") && ( )} {(status === "completed" || status === "failed") && onDismiss && ( )}
); }