"use client";
import { api } from "~/trpc/react";
import { Domain, DomainStatus } from "@prisma/client";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@unsend/ui/src/breadcrumb";
import { DomainStatusBadge } from "../domain-badge";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@unsend/ui/src/table";
import { TextWithCopyButton } from "@unsend/ui/src/text-with-copy";
import React, { use } from "react";
import { Switch } from "@unsend/ui/src/switch";
import DeleteDomain from "./delete-domain";
import SendTestMail from "./send-test-mail";
import { Button } from "@unsend/ui/src/button";
import Link from "next/link";
import { toast } from "@unsend/ui/src/toaster";
export default function DomainItemPage({
params,
}: {
params: Promise<{ domainId: string }>;
}) {
const { domainId } = use(params);
const domainQuery = api.domain.getDomain.useQuery(
{
id: Number(domainId),
},
{
refetchInterval: (q) => (q?.state.data?.isVerifying ? 10000 : false),
refetchIntervalInBackground: true,
}
);
const verifyQuery = api.domain.startVerification.useMutation();
const handleVerify = () => {
verifyQuery.mutate(
{ id: Number(domainId) },
{
onSettled: () => {
domainQuery.refetch();
},
}
);
};
return (
{domainQuery.isLoading ? (
Loading...
) : (
{/*
{domainQuery.data?.name}
*/}
Domains
{domainQuery.data?.name}
{domainQuery.data?.isVerifying
? "Verifying..."
: domainQuery.data?.status === DomainStatus.SUCCESS
? "Verify again"
: "Verify domain"}
{domainQuery.data ? (
) : null}
DNS records
Type
Name
Content
TTL
Priority
Status
MX
{/*
{`feedback-smtp.${domainQuery.data?.region}.amazonses.com`}
*/}
Auto
10
TXT
Auto
TXT
Auto
TXT
(recommended)
Auto
{domainQuery.data ? (
) : null}
)}
);
}
const DomainSettings: React.FC<{ domain: Domain }> = ({ domain }) => {
const updateDomain = api.domain.updateDomain.useMutation();
const utils = api.useUtils();
const [clickTracking, setClickTracking] = React.useState(
domain.clickTracking
);
const [openTracking, setOpenTracking] = React.useState(domain.openTracking);
function handleClickTrackingChange() {
setClickTracking(!clickTracking);
updateDomain.mutate(
{ id: domain.id, clickTracking: !clickTracking },
{
onSuccess: () => {
utils.domain.invalidate();
toast.success("Click tracking updated");
},
}
);
}
function handleOpenTrackingChange() {
setOpenTracking(!openTracking);
updateDomain.mutate(
{ id: domain.id, openTracking: !openTracking },
{
onSuccess: () => {
utils.domain.invalidate();
toast.success("Open tracking updated");
},
}
);
}
return (
Settings
Click tracking
Track any links in your emails content.{" "}
Open tracking
Unsend adds a tracking pixel to every email you send. This allows you
to see how many people open your emails. This will affect the delivery
rate of your emails.
Danger
Deleting a domain will stop sending emails with this domain.
);
};
const DnsVerificationStatus: React.FC<{ status: string }> = ({ status }) => {
let badgeColor = "bg-gray/10 text-gray border-gray/10"; // Default color
switch (status) {
case DomainStatus.SUCCESS:
badgeColor = "bg-green/15 text-green border border-green/25";
break;
case DomainStatus.FAILED:
badgeColor = "bg-red/10 text-red border border-red/10";
break;
case DomainStatus.TEMPORARY_FAILURE:
case DomainStatus.PENDING:
badgeColor = "bg-yellow/20 text-yellow border border-yellow/10";
break;
default:
badgeColor = "bg-gray/10 text-gray border border-gray/20";
}
return (
{status.split("_").join(" ").toLowerCase()}
);
};