Loading runs...
No runs found
Push sequences to Smartlead to see history here
import React, { useState, useEffect } from 'react';
import { History, CheckCircle2, XCircle, Clock, ExternalLink, Filter } from 'lucide-react';
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Badge } from "@/components/ui/badge";
import { motion } from 'framer-motion';
export default function RunHistory() {
const [runs, setRuns] = useState([]);
const [loading, setLoading] = useState(true);
const [filterStatus, setFilterStatus] = useState('all');
const [searchQuery, setSearchQuery] = useState('');
useEffect(() => {
fetchRuns();
}, []);
const fetchRuns = async () => {
try {
setLoading(true);
const response = await fetch('/api/smartlead-runs');
if (response.ok) {
const data = await response.json();
setRuns(data);
}
} catch (error) {
console.error('Error fetching runs:', error);
} finally {
setLoading(false);
}
};
const filteredRuns = runs.filter(run => {
const matchesStatus = filterStatus === 'all' || run.status === filterStatus;
const matchesSearch = searchQuery === '' ||
run.campaign_name?.toLowerCase().includes(searchQuery.toLowerCase()) ||
run.campaign_id?.toLowerCase().includes(searchQuery.toLowerCase()) ||
run.run_id?.toLowerCase().includes(searchQuery.toLowerCase());
return matchesStatus && matchesSearch;
});
const getStatusBadge = (status) => {
const variants = {
'completed': 'bg-green-100 text-green-700',
'failed': 'bg-red-100 text-red-700',
'pending': 'bg-yellow-100 text-yellow-700',
'dry_run_completed': 'bg-blue-100 text-blue-700'
};
return variants[status] || 'bg-slate-100 text-slate-700';
};
const getStatusIcon = (status) => {
if (status === 'completed' || status === 'dry_run_completed') {
return
Smartlead campaign push history
Loading runs...
Push sequences to Smartlead to see history here