import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from "recharts"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { toast } from "@/hooks/use-toast" import { useState, useEffect } from "react"; import { getLinkClickStats, getLinkSourceStats } from '../api/client'; import { ClickStats, SourceStats } from '../types/api'; interface StatisticsModalProps { isOpen: boolean; onClose: () => void; linkId: number; } export function StatisticsModal({ isOpen, onClose, linkId }: StatisticsModalProps) { const [clicksOverTime, setClicksOverTime] = useState([]); const [sourcesData, setSourcesData] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (isOpen && linkId) { const fetchData = async () => { try { setLoading(true); const [clicksData, sourcesData] = await Promise.all([ getLinkClickStats(linkId), getLinkSourceStats(linkId), ]); setClicksOverTime(clicksData); setSourcesData(sourcesData); } catch (error: any) { console.error("Failed to fetch statistics:", error); toast({ variant: "destructive", title: "Error", description: error.response?.data || "Failed to load statistics", }); } finally { setLoading(false); } }; fetchData(); } }, [isOpen, linkId]); return ( Link Statistics {loading ? (
Loading...
) : (
Clicks Over Time
Top Sources
    {sourcesData.map((source, index) => (
  • {index + 1}. {source.source} {source.count} clicks
  • ))}
)}
); }