import React from "react"; import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer, } from "recharts"; import { EmailStatusIcon } from "../emails/email-status-badge"; import { EmailStatus } from "@prisma/client"; import { api } from "~/trpc/react"; import Spinner from "@unsend/ui/src/spinner"; import { Tabs, TabsList, TabsTrigger } from "@unsend/ui/src/tabs"; import { useUrlState } from "~/hooks/useUrlState"; export default function DashboardChart() { const [days, setDays] = useUrlState("days", "7"); const statusQuery = api.email.dashboard.useQuery({ days: Number(days) }); return (

Dashboard

setDays(value)} className="" > 7 Days 30 Days
{!statusQuery.isLoading && statusQuery.data ? ( <> ) : ( <>
)}
{!statusQuery.isLoading && statusQuery.data ? (
{/* */} { const data = payload?.[0]?.payload as Record< EmailStatus, number > & { name: string }; if ( !data || (!data.BOUNCED && !data.COMPLAINED && !data.DELIVERED && !data.OPENED && !data.CLICKED) ) return null; return (

{data.name}

{data.DELIVERED ? (

Delivered

{data.DELIVERED} emails

) : null} {data.BOUNCED ? (

Bounced

{data.BOUNCED} emails

) : null} {data.COMPLAINED ? (

Complained

{data.COMPLAINED} emails

) : null} {data.OPENED ? (

Opened

{data.OPENED} emails

) : null} {data.CLICKED ? (

Clicked

{data.CLICKED} emails

) : null}
); }} cursor={false} /> {/* */}
) : null}
); } type DashboardItemCardProps = { status: EmailStatus | "total"; count: number; percentage: number; }; const DashboardItemCard: React.FC = ({ status, count, percentage, }) => { return (
{status !== "total" ? : null}
{status.toLowerCase()}
{count}
{status !== "total" ? (
{percentage}%
) : null}
); };