"use client" import { useState, useEffect } from "react" import { motion } from "framer-motion" import { ShoppingBag, CreditCard, Truck, MessageSquare, AlertCircle } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { clientFetch } from "@/lib/api" import { Skeleton } from "@/components/ui/skeleton" import { formatDistanceToNow } from "date-fns" import Link from "next/link" interface ActivityItem { _id: string; orderId: string; status: string; totalPrice: number; orderDate: string; username?: string; } export default function RecentActivity() { const [activities, setActivities] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchRecentOrders() { try { const data = await clientFetch("/orders?limit=10&sortBy=orderDate&sortOrder=desc"); setActivities(data.orders || []); } catch (error) { console.error("Failed to fetch recent activity:", error); } finally { setLoading(false); } } fetchRecentOrders(); }, []); const getStatusIcon = (status: string) => { switch (status) { case "paid": return ; case "shipped": return ; case "unpaid": return ; default: return ; } }; const getStatusColor = (status: string) => { switch (status) { case "paid": return "bg-emerald-500/10 text-emerald-500"; case "shipped": return "bg-blue-500/10 text-blue-500"; case "unpaid": return "bg-amber-500/10 text-amber-500"; default: return "bg-gray-500/10 text-gray-500"; } }; return ( Recent Activity Latest updates from your store {loading ? (
{[1, 2, 3, 4, 5].map((i) => (
))}
) : activities.length === 0 ? (
No recent activity
) : (
{activities.map((item, index) => ( {index !== activities.length - 1 && (
)}
{getStatusIcon(item.status)}
Order #{item.orderId} {formatDistanceToNow(new Date(item.orderDate), { addSuffix: true })}

{item.status === "paid" ? "Payment received" : item.status === "shipped" ? "Order marked as shipped" : `Order status: ${item.status}`} for £{item.totalPrice.toFixed(2)}

))}
)} ) }