fix(campaign): bound operator queue polling

This commit is contained in:
2026-07-22 09:39:03 +02:00
parent 99d44eeb8d
commit 735e874bd0
4 changed files with 136 additions and 21 deletions

View File

@@ -70,6 +70,34 @@ export function campaignLifecycleTotals(items: CampaignLifecycleTotals[]): Campa
}), { pausable: 0, paused: 0, cancellable: 0 });
}
export function operatorDeliveryStateCounts(
queue: {queued?: number;},
// send.queued intentionally does not contribute: paused queue rows retain that send state.
send: {queued?: number;claimed?: number;sending?: number;smtpAccepted?: number;sent?: number;}
) {
const queued = queue.queued ?? 0;
const claimed = send.claimed ?? 0;
const sending = send.sending ?? 0;
const completed = (send.smtpAccepted ?? 0) + (send.sent ?? 0);
return { queued, claimed, sending, completed, queuedOrActive: queued + claimed + sending };
}
export function shouldRefreshOperatorVersionSummary(input: {
fullDiscovery: boolean;
versionChanged: boolean;
selected: boolean;
cached: boolean;
queuedOrActive: number;
needsAttention: number;
}): boolean {
return input.fullDiscovery
|| input.versionChanged
|| !input.cached
|| input.selected
|| input.queuedOrActive > 0
|| input.needsAttention > 0;
}
/**
* Return the reason each fixed queue action is unavailable. A null result means
* the action is permitted and meaningful for the current queue projection.