"use client"; import { useMemo, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@usesend/ui/src/card"; import { Label } from "@usesend/ui/src/label"; import { Switch } from "@usesend/ui/src/switch"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@usesend/ui/src/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@usesend/ui/src/table"; import Spinner from "@usesend/ui/src/spinner"; import { api } from "~/trpc/react"; import { isCloud } from "~/utils/common"; import { timeframeOptions } from "./constants"; import { keepPreviousData } from "@tanstack/react-query"; export default function AdminEmailAnalyticsPage() { const isCloudEnv = isCloud(); const [timeframe, setTimeframe] = useState<(typeof timeframeOptions)[number]["value"]>("today"); const [paidOnly, setPaidOnly] = useState(false); const analyticsQuery = api.admin.getEmailAnalytics.useQuery( { timeframe, paidOnly, }, { enabled: isCloudEnv, placeholderData: keepPreviousData } ); const data = analyticsQuery.data; const totals = data?.totals ?? { sent: 0, delivered: 0, opened: 0, clicked: 0, bounced: 0, complained: 0, hardBounced: 0, }; const rows = useMemo(() => data?.rows ?? [], [data]); if (!isCloudEnv) { return (
Email analytics are available only in the cloud deployment.
); } return (

Email analytics

Usage by team {data ? (

Since {data.timeframe === "today" ? "today" : data.periodStart}

) : null}
{analyticsQuery.isLoading ? : null}
Team Team ID Plan Sent Delivered Opened Clicked Bounced Complained Hard bounced {analyticsQuery.isLoading ? ( ) : rows.length === 0 ? ( No email activity found for this period. ) : ( rows.map((row) => ( {row.name} {row.teamId} {row.plan} {row.sent} {row.delivered} {row.opened} {row.clicked} {row.bounced} {row.complained} {row.hardBounced} )) )}
); } function SummaryCard({ label, value }: { label: string; value: number }) { return ( {label}

{value.toLocaleString()}

); }