'use client' import { TrendUp } from '@phosphor-icons/react' import { Pie, PieChart } from 'recharts' import { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig, } from '@/components/charts' import type { FrustrationSummary } from '@/lib/api/stats' interface FrustrationTrendProps { summary: FrustrationSummary | null loading: boolean } function SkeletonCard() { return (
) } const chartConfig = { count: { label: 'Count', }, rage_clicks: { label: 'Rage Clicks', color: '#FD5E0F', }, dead_clicks: { label: 'Dead Clicks', color: '#E04E0A', }, prev_rage_clicks: { label: 'Prev Rage Clicks', color: '#78350F', }, prev_dead_clicks: { label: 'Prev Dead Clicks', color: '#92400E', }, } satisfies ChartConfig export default function FrustrationTrend({ summary, loading }: FrustrationTrendProps) { if (loading || !summary) return const hasData = summary.rage_clicks > 0 || summary.dead_clicks > 0 || summary.prev_rage_clicks > 0 || summary.prev_dead_clicks > 0 const totalCurrent = summary.rage_clicks + summary.dead_clicks const totalPrevious = summary.prev_rage_clicks + summary.prev_dead_clicks const totalChange = totalPrevious > 0 ? Math.round(((totalCurrent - totalPrevious) / totalPrevious) * 100) : null const chartData = [ { type: 'rage_clicks', count: summary.rage_clicks, fill: 'var(--color-rage_clicks)' }, { type: 'dead_clicks', count: summary.dead_clicks, fill: 'var(--color-dead_clicks)' }, { type: 'prev_rage_clicks', count: summary.prev_rage_clicks, fill: 'var(--color-prev_rage_clicks)' }, { type: 'prev_dead_clicks', count: summary.prev_dead_clicks, fill: 'var(--color-prev_dead_clicks)' }, ] if (!hasData) { return (

Frustration Trend

Current vs. previous period comparison

No trend data yet

Frustration trend data will appear here once rage clicks or dead clicks are detected across periods.

) } return (

Frustration Trend

Rage and dead clicks split across current and previous period

} />
{totalChange !== null ? ( <> {totalChange > 0 ? 'Up' : totalChange < 0 ? 'Down' : 'No change'} by {Math.abs(totalChange)}% vs previous period ) : totalCurrent > 0 ? ( <> {totalCurrent.toLocaleString()} new signals this period ) : ( 'No frustration signals detected' )}
) }