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}
);
};