import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@unsend/ui/src/tooltip"; import { CheckCircle2, CheckCircle2Icon, InfoIcon, OctagonAlertIcon, TriangleAlertIcon, } from "lucide-react"; import { Bar, BarChart, ReferenceLine, ResponsiveContainer, Tooltip as RechartsTooltip, CartesianGrid, YAxis, } from "recharts"; import { HARD_BOUNCE_RISK_RATE, HARD_BOUNCE_WARNING_RATE, COMPLAINED_WARNING_RATE, COMPLAINED_RISK_RATE, } from "~/lib/constants"; import { api } from "~/trpc/react"; import { useColors } from "./hooks/useColors"; interface ReputationMetricsProps { days: number; domain: string | null; } enum ACCOUNT_STATUS { HEALTHY = "HEALTHY", WARNING = "WARNING", RISK = "RISK", } const CustomLabel = ({ value, stroke }: { value: string; stroke: string }) => { return ( {value} ); }; export function ReputationMetrics({ days, domain }: ReputationMetricsProps) { const { data: metrics, isLoading } = api.dashboard.reputationMetricsData.useQuery({ domain: domain ? Number(domain) : undefined, }); const colors = useColors(); const bouncedMetric = metrics ? [ { name: "Bounce Rate", value: metrics.bounceRate, }, ] : []; const complaintMetric = metrics ? [ { name: "Complaint Rate", value: metrics.complaintRate, }, ] : []; const bounceStatus = (metrics?.bounceRate ?? 0) > HARD_BOUNCE_RISK_RATE ? ACCOUNT_STATUS.RISK : (metrics?.bounceRate ?? 0) > HARD_BOUNCE_WARNING_RATE ? ACCOUNT_STATUS.WARNING : ACCOUNT_STATUS.HEALTHY; const complaintStatus = (metrics?.complaintRate ?? 0) > COMPLAINED_RISK_RATE ? ACCOUNT_STATUS.RISK : (metrics?.complaintRate ?? 0) > COMPLAINED_WARNING_RATE ? ACCOUNT_STATUS.WARNING : ACCOUNT_STATUS.HEALTHY; return (
Bounce Rate
The percentage of emails sent from your account that resulted in a hard bounce.
{metrics?.bounceRate}%
{/*
*/} `${value}%`} hide={false} axisLine={false} tickLine={false} interval={0} /> {/* */} {/* */} {/* */} { const data = payload?.[0]?.payload as { name: string; value: number; }; if (!data) return null; return (

{data.name}

Current

{data.value}%

Warning at

{HARD_BOUNCE_WARNING_RATE}%

Risk at

{HARD_BOUNCE_RISK_RATE}%

); }} cursor={false} />
Complaint Rate
The percentage of emails sent from your account that resulted in recipients reporting them as spam.
{metrics?.complaintRate}%
`${value}%`} hide={false} axisLine={false} interval={0} /> {/* */} { const data = payload?.[0]?.payload as { name: string; value: number; }; if (!data) return null; return (

{data.name}

Current

{data.value}%

Warning at

{COMPLAINED_WARNING_RATE}%

Risk at

{COMPLAINED_RISK_RATE}%

); }} cursor={false} />
); } export const StatusBadge: React.FC<{ status: ACCOUNT_STATUS }> = ({ status, }) => { const className = status === "HEALTHY" ? " text-success border-success" : status === "WARNING" ? " text-warning border-warning" : " text-destructive border-destructive"; const StatusIcon = status === "HEALTHY" ? CheckCircle2Icon : status === "WARNING" ? TriangleAlertIcon : OctagonAlertIcon; return (
{status.toLowerCase()}
); };