import { Link } from "react-router-dom"; import type { ApiSettings } from "../../types"; import Button from "../../components/Button"; import PageTitle from "../../components/PageTitle"; import LoadingFrame from "../../components/LoadingFrame"; import Card from "../../components/Card"; import MetricCard from "../../components/MetricCard"; import { useCampaignWorkspaceData } from "./hooks/useCampaignWorkspaceData"; import { asRecord, formatDateTime, getDeliverySection, getNestedString } from "./utils/campaignView"; export default function SendDataPage({ settings, campaignId }: { settings: ApiSettings; campaignId: string }) { const { data, loading, error, reload } = useCampaignWorkspaceData(settings, campaignId, { includeSummary: true }); const version = data.currentVersion; const cards = data.summary?.cards; const delivery = getDeliverySection(version); const rateLimit = asRecord(delivery.rate_limit); const imapAppend = asRecord(delivery.imap_append_sent); const retry = asRecord(delivery.retry); return (
Send

Version {version ? `#${version.version_number}` : "—"} · Loaded {formatDateTime(version?.updated_at)}

{error &&
{error}
}
Messages/minute
{String(rateLimit.messages_per_minute ?? "—")}
Concurrency
{String(rateLimit.concurrency ?? "—")}
Max attempts
{String(retry.max_attempts ?? "—")}
Backoff
{getNestedString(delivery, ["retry", "backoff_seconds"])}
Enabled
{String(Boolean(imapAppend.enabled))}
Folder
{String(imapAppend.folder || "auto")}
Appended
{cards?.imap_appended ?? "—"}
Append failed
{cards?.imap_failed ?? "—"}

SMTP sending and IMAP append-to-Sent remain separate states. A successful SMTP send is still successful even if appending to Sent fails.

); }