"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 ? ( ) : 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()}
); };