'use client'; import { useEffect, useState } from 'react'; import { Activity, Clock, User, Plus, CheckCircle2, XCircle } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; interface ActivityItem { id: string; actor: string; action: string; entity_type: string; entity_id: string; changes: Record | null; created_at: string; } export function ActivityFeedWidget() { const [activities, setActivities] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchActivities(); }, []); async function fetchActivities() { try { const res = await fetch('/api/agent-activity?perPage=20&sort=-created'); if (res.ok) { const data = await res.json(); setActivities(data.items || []); } } catch {} finally { setLoading(false); } } function getActionIcon(action: string) { switch (action) { case 'created': return ; case 'completed': return ; case 'deleted': return ; default: return ; } } function timeAgo(dateStr: string) { const diff = Date.now() - new Date(dateStr).getTime(); const mins = Math.floor(diff / 60000); if (mins < 1) return 'just now'; if (mins < 60) return `${mins}m ago`; const hours = Math.floor(mins / 60); if (hours < 24) return `${hours}h ago`; return `${Math.floor(hours / 24)}d ago`; } return (
{loading ? (

Loading...

) : activities.length === 0 ? (

No recent activity

) : (
{activities.slice(0, 10).map((item) => (
{getActionIcon(item.action)}
{item.actor}{' '} {item.action}{' '} {item.entity_type}
{timeAgo(item.created_at)}
))}
)}
); }