feat(campaign): persist delivery execution mode
This commit is contained in:
@@ -305,6 +305,7 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
const jobsTotal = cards?.jobs_total ?? inlineEntries.filter((entry) => entry.active !== false).length;
|
||||
const sentCount = cards?.sent ?? 0;
|
||||
const failedCount = cards?.failed ?? 0;
|
||||
const retryableCount = cards?.retryable ?? numberFrom(sendStatusCounts, ["failed_temporary"]);
|
||||
const imapAppended = cards?.imap_appended ?? 0;
|
||||
const imapFailed = cards?.imap_failed ?? 0;
|
||||
const imapPending = numberFrom(imapStatusCounts, ["pending"]);
|
||||
@@ -322,6 +323,8 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
const synchronousEligibleCount = numberFrom(synchronousSendOption, ["eligible_recipient_job_count"]);
|
||||
const synchronousSendAllowed = synchronousSendOption.allowed === true;
|
||||
const workerQueueAvailable = deliveryOptions?.worker_queue_available === true;
|
||||
const persistedDeliveryMode = version?.delivery_mode ?? null;
|
||||
const persistedDeliveryModeSelectedAt = version?.delivery_mode_selected_at ?? null;
|
||||
const selectedDryRun = dryRun && !directQueuedSendAllowed;
|
||||
const deliveryPartial = cards?.partially_completed === true || ["partially_sent", "failed_partial", "partially_completed"].includes(currentWorkflowState);
|
||||
const deliveryComplete = queuedOrActiveCount === 0 &&
|
||||
@@ -913,14 +916,14 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
}
|
||||
|
||||
async function runRetryFailed() {
|
||||
if (busy || !canRetryDelivery || failedCount <= 0 || !workerQueueAvailable) return;
|
||||
if (busy || !canRetryDelivery || retryableCount <= 0 || !workerQueueAvailable) return;
|
||||
setBusy("retry");
|
||||
setMessage("Queueing retryable failed messages for background workers…");
|
||||
setError("");
|
||||
try {
|
||||
const response = await retryCampaignJobs(settings, campaignId, { enqueue_celery: true });
|
||||
const result = asRecord(response.result ?? response);
|
||||
setMessage(`Queued ${String(result.queued_count ?? 0)} retryable message(s); ${String(result.enqueued_count ?? 0)} worker task(s) published.`);
|
||||
setMessage(`Queued ${String(result.selected_count ?? 0)} retryable message(s); ${String(result.enqueued_count ?? 0)} worker task(s) published.`);
|
||||
await reload();
|
||||
await refreshDeliveryOptions(true);
|
||||
} catch (err) {
|
||||
@@ -1516,6 +1519,7 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
<WorkflowFact label="i18n:govoplan-campaign.smtp_failed.0ce5516d" value={failedCount} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.queued_active.a2784a4a" value={queuedOrActiveCount} />
|
||||
<WorkflowFact label="Paused" value={pausedQueueCount} />
|
||||
<WorkflowFact label="Delivery mode" value={persistedDeliveryMode ? humanize(persistedDeliveryMode) : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.outcome_unknown.6e929fca" value={outcomeUnknownCount} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.imap_appended.56017ea3" value={imapAppended} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.imap_pending.ed50375e" value={imapPendingForDisplay} />
|
||||
@@ -1526,6 +1530,11 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
<StatusBadge status={deliveryDisplayStatus} />
|
||||
<span>{deliveryStarted ? "i18n:govoplan-campaign.delivery_activity_is_available_in_the_report_and.cb163d1d" : "i18n:govoplan-campaign.no_real_delivery_has_started_for_this_campaign_v.3b9235ff"}</span>
|
||||
</div>
|
||||
{persistedDeliveryMode &&
|
||||
<p className="muted small-note">
|
||||
This version last entered {humanize(persistedDeliveryMode)} mode{persistedDeliveryModeSelectedAt ? ` at ${formatDateTime(persistedDeliveryModeSelectedAt)}` : ""}. This record remains available after leaving and returning.
|
||||
</p>
|
||||
}
|
||||
<div className="button-row compact-actions review-flow-stage-actions">
|
||||
<Button
|
||||
onClick={() => void runDeliveryControl("pause")}
|
||||
@@ -1544,7 +1553,7 @@ export default function ReviewSendPage({ settings, auth, campaignId }: {settings
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => void runRetryFailed()}
|
||||
disabled={Boolean(busy) || !canRetryDelivery || failedCount <= 0 || !workerQueueAvailable}>
|
||||
disabled={Boolean(busy) || !canRetryDelivery || retryableCount <= 0 || !workerQueueAvailable}>
|
||||
Retry failed with workers
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user