"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { TrendingUp, TrendingDown, Mail, MousePointer, Reply } from "lucide-react"; import { useApi } from "@/hooks/use-api"; interface CampaignMetrics { totalSent: number; delivered: number; opened: number; clicked: number; replied: number; bounced: number; deliveryRate: number; openRate: number; clickRate: number; replyRate: number; } interface AnalyticsDashboardProps { userId?: string; } export function AnalyticsDashboard({ userId }: AnalyticsDashboardProps) { const [metrics, setMetrics] = useState(null); const { get, loading } = useApi(); useEffect(() => { async function fetchAnalytics() { const data = await get("/api/analytics"); if (data) { setMetrics(data); } } fetchAnalytics(); }, [get, userId]); if (loading) { return (
{Array.from({ length: 4 }).map((_, i) => (
))}
); } // Default values if no data const data = metrics || { totalSent: 0, delivered: 0, opened: 0, clicked: 0, replied: 0, bounced: 0, deliveryRate: 0, openRate: 0, clickRate: 0, replyRate: 0, }; return (

Analytics Dashboard

Track your email campaign performance and metrics

Overview Campaigns Engagement {/* Key Metrics */}
Emails Sent
{data.totalSent.toLocaleString()}

{data.delivered} delivered ({data.deliveryRate.toFixed(1)}%)

Open Rate {data.openRate > 25 ? ( ) : ( )}
{data.openRate.toFixed(1)}%

{data.opened} of {data.delivered} emails

Click Rate
{data.clickRate.toFixed(1)}%

{data.clicked} clicks

Reply Rate
{data.replyRate.toFixed(1)}%

{data.replied} replies

{/* Detailed Metrics */} Performance Breakdown Detailed metrics for your campaigns
Delivery Rate {data.deliveryRate.toFixed(1)}%
Open Rate {data.openRate.toFixed(1)}%
Click Rate {data.clickRate.toFixed(1)}%
Reply Rate {data.replyRate.toFixed(1)}%
{data.bounced > 0 && (
Bounced Emails {data.bounced}
)} Campaign Overview Performance metrics across all campaigns

Campaign comparison data will be available once you have multiple active campaigns.

Engagement Metrics Track how recipients interact with your emails

Total Engagements

{data.opened + data.clicked + data.replied}

Unique Opens

{data.opened}

Link Clicks

{data.clicked}

); }