"use client"; import { useState, useEffect } from 'react'; import { addDays, format } from 'date-fns'; import { DateRangePicker } from '../../components/ui/DateRangePicker'; import TimeSeriesChart from '../../components/charts/TimeSeriesChart'; import { TimeSeriesData } from '../../api/types'; interface ConversionStats { totalConversions: number; conversionRate: number; averageValue: number; conversionsByType: { type: string; count: number; value: number; percentage: number; }[]; } export default function ConversionsPage() { const [dateRange, setDateRange] = useState({ from: new Date('2024-02-01'), to: new Date('2025-03-05') }); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [stats, setStats] = useState(null); const [timeSeriesData, setTimeSeriesData] = useState([]); useEffect(() => { const fetchData = async () => { setLoading(true); setError(null); try { const startTime = format(dateRange.from, "yyyy-MM-dd'T'HH:mm:ss'Z'"); const endTime = format(dateRange.to, "yyyy-MM-dd'T'HH:mm:ss'Z'"); const [statsRes, timeSeriesRes] = await Promise.all([ fetch(`/api/events/conversions/stats?startTime=${startTime}&endTime=${endTime}`), fetch(`/api/events/conversions/time-series?startTime=${startTime}&endTime=${endTime}`) ]); const [statsData, timeSeriesData] = await Promise.all([ statsRes.json(), timeSeriesRes.json() ]); if (!statsRes.ok) throw new Error(statsData.error || 'Failed to fetch conversion stats'); if (!timeSeriesRes.ok) throw new Error(timeSeriesData.error || 'Failed to fetch time series data'); setStats(statsData); setTimeSeriesData(timeSeriesData.data); } catch (err) { setError(err instanceof Error ? err.message : 'An error occurred while fetching data'); } finally { setLoading(false); } }; fetchData(); }, [dateRange]); if (loading) { return (
); } if (error) { return (
{error}
); } return (

Conversion Analytics

{stats && (

Total Conversions

{stats.totalConversions.toLocaleString()}

Conversion Rate

{stats.conversionRate.toFixed(2)}%

Average Value

${stats.averageValue.toFixed(2)}

)}

Conversion Trends

{stats && (

Conversion Types

{stats.conversionsByType.map((item, index) => (
{item.type} {item.count.toLocaleString()} conversions
${item.value.toFixed(2)} ({item.percentage.toFixed(1)}%)
))}
)}
); }