"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 { Button } from "@unsend/ui/src/button"; import { CheckIcon, ClipboardCopy } from "lucide-react"; import React from "react"; import { Switch } from "@unsend/ui/src/switch"; import DeleteDomain from "./delete-domain"; import SendTestMail from "./send-test-mail"; export default function DomainItemPage({ params, }: { params: { domainId: string }; }) { const domainQuery = api.domain.getDomain.useQuery({ id: Number(params.domainId), }); return (
{domainQuery.isLoading ? (

Loading...

) : (
{/*

{domainQuery.data?.name}

*/} Domains {domainQuery.data?.name}
{domainQuery.data ? ( ) : null}

DNS records

Type Value Status TTL Priority Status MX {/*
{`feedback-smtp.${domainQuery.data?.region}.amazonses.com`}
*/}
Auto 10
TXT Auto TXT Auto TXT Auto
{domainQuery.data ? ( ) : null}
)}
); } const InputWithCopyButton: React.FC<{ value: string; className?: string }> = ({ value, className, }) => { const [isCopied, setIsCopied] = React.useState(false); const copyToClipboard = async () => { try { await navigator.clipboard.writeText(value); setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); // Reset isCopied to false after 2 seconds } catch (err) { console.error("Failed to copy: ", err); } }; return (
{value}
); }; 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.domains.invalidate(); }, } ); } function handleOpenTrackingChange() { setOpenTracking(!openTracking); updateDomain.mutate( { id: domain.id, openTracking: !openTracking }, { onSuccess: () => { utils.domain.domains.invalidate(); }, } ); } 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-400/10 text-gray-500 border-gray-400/10"; // Default color switch (status) { case DomainStatus.NOT_STARTED: badgeColor = "bg-gray-400/10 text-gray-500 border-gray-400/10"; break; case DomainStatus.SUCCESS: badgeColor = "bg-emerald-500/10 text-emerald-500 border-emerald-600/10"; break; case DomainStatus.FAILED: badgeColor = "bg-red-500/10 text-red-600 border-red-500/20"; break; case DomainStatus.TEMPORARY_FAILURE: case DomainStatus.PENDING: badgeColor = "bg-yellow-500/10 text-yellow-600 border-yellow-600/10"; break; default: badgeColor = "bg-gray-400/10 text-gray-500 border-gray-400/10"; } return (
{status.split("_").join(" ").toLowerCase()}
); };