Clarify campaign review interventions
This commit is contained in:
@@ -72,6 +72,12 @@ import DeliverabilityPreflight, {
|
||||
} from "./review/DeliverabilityPreflight";
|
||||
import DeliveryJobDetailOverlay from "./review/DeliveryJobDetailOverlay";
|
||||
import BuiltMessagePreview from "./review/BuiltMessagePreview";
|
||||
import {
|
||||
BuiltMessageReviewProgress,
|
||||
BuiltMessageWorkflowGuidance,
|
||||
ValidationWorkflowGuidance
|
||||
} from "./review/ReviewWorkflowGuidance";
|
||||
import { calculateBuildReviewProgress } from "./review/reviewProgress";
|
||||
import {
|
||||
WorkflowFact,
|
||||
WorkflowNavigation,
|
||||
@@ -466,7 +472,6 @@ export default function ReviewSendPage({
|
||||
Number(reviewMetadata.reviewed_required_count ?? 0) + newlyReviewedRequiredKeys.size
|
||||
);
|
||||
const reviewRequiredCount = explicitReviewCount + bulkAcceptableCount;
|
||||
const reviewedRequiredCount = reviewedExplicitCount;
|
||||
const automaticInspectionComplete = reviewJobs.total_unfiltered > 0 &&
|
||||
blockingReviewCount === 0 &&
|
||||
reviewRequiredCount === 0;
|
||||
@@ -505,6 +510,13 @@ export default function ReviewSendPage({
|
||||
|
||||
const downstreamDeliveryActivity = deliveryQueued || deliveryStarted;
|
||||
const inspectionSatisfied = automaticInspectionComplete || messageReviewComplete || downstreamDeliveryActivity;
|
||||
const buildReviewProgress = calculateBuildReviewProgress({
|
||||
blocking: Math.max(blockingReviewCount, buildBlocked),
|
||||
individualRequired: explicitReviewCount,
|
||||
individualReviewed: reviewedExplicitCount,
|
||||
groupRequired: bulkAcceptableCount,
|
||||
reviewComplete: messageReviewComplete || downstreamDeliveryActivity
|
||||
});
|
||||
|
||||
const buildReviewState: FlowState = !readyForDelivery ?
|
||||
"locked" :
|
||||
@@ -512,7 +524,7 @@ export default function ReviewSendPage({
|
||||
"running" :
|
||||
hasBuild && buildBlocked > 0 ?
|
||||
"danger" :
|
||||
hasBuild && (buildNeedsReview > 0 || buildWarnings > 0 || !inspectionSatisfied) ?
|
||||
hasBuild && !inspectionSatisfied && (buildNeedsReview > 0 || buildWarnings > 0 || buildReviewProgress.remaining > 0) ?
|
||||
"warning" :
|
||||
hasBuild && inspectionSatisfied ?
|
||||
"complete" :
|
||||
@@ -1392,13 +1404,14 @@ export default function ReviewSendPage({
|
||||
<WorkflowFact label="i18n:govoplan-campaign.warnings.1430f976" value={validationPresent ? validationWarnings : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.jobs_needing_attention.95613b02" value={cards?.needs_attention ?? "—"} />
|
||||
</div>
|
||||
{validationStale && <p className="review-flow-inline-note is-stale">i18n:govoplan-campaign.the_stored_validation_result_is_no_longer_an_act.45d2dd14</p>}
|
||||
<ValidationWorkflowGuidance
|
||||
errors={validationErrors}
|
||||
warnings={validationWarnings}
|
||||
stale={validationStale}
|
||||
/>
|
||||
{validationPresent && validationErrors === 0 &&
|
||||
<p className="review-flow-inline-note is-complete"><Check size={17} aria-hidden="true" /> i18n:govoplan-campaign.no_blocking_validation_exceptions_remain.73186d0d</p>
|
||||
}
|
||||
{validationErrors > 0 &&
|
||||
<p className="review-flow-inline-note is-danger">i18n:govoplan-campaign.resolve_the_blocking_entries_then_validate_again.e282ae0f</p>
|
||||
}
|
||||
<AttachmentLinkingPreview
|
||||
preview={attachmentPreview}
|
||||
loading={attachmentPreviewLoading}
|
||||
@@ -1447,10 +1460,13 @@ export default function ReviewSendPage({
|
||||
<WorkflowFact label="i18n:govoplan-campaign.built.a6ad3f82" value={hasBuild ? builtCount : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.blocked.99613c74" value={hasBuild ? buildBlocked : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.need_review.201a4493" value={hasBuild ? buildNeedsReview : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.reviewed.31ef8593" value={hasBuild ? reviewedRequiredCount : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.reviewed.31ef8593" value={hasBuild ? buildReviewProgress.reviewed : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.remaining.cc632b5e" value={hasBuild ? buildReviewProgress.remaining : "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.review_candidates.438b8b57" value={reviewJobs.total || "—"} />
|
||||
<WorkflowFact label="i18n:govoplan-campaign.attachment_issues.69748336" value={missingAttachments + ambiguousAttachments} />
|
||||
</div>
|
||||
{hasBuild && <BuiltMessageReviewProgress progress={buildReviewProgress} />}
|
||||
{hasBuild && <BuiltMessageWorkflowGuidance progress={buildReviewProgress} buildWarnings={buildWarnings} />}
|
||||
<p className="muted">i18n:govoplan-campaign.building_freezes_the_current_recipients_rendered.273a8170</p>
|
||||
{getText(printOutput, "render_id") && (
|
||||
<div className="review-flow-data-section">
|
||||
@@ -1501,9 +1517,6 @@ export default function ReviewSendPage({
|
||||
{automaticInspectionComplete &&
|
||||
<p className="review-flow-inline-note is-complete"><Check size={17} aria-hidden="true" /> i18n:govoplan-campaign.all_built_messages_are_ready_no_manual_review_ac.c5549791</p>
|
||||
}
|
||||
{blockingReviewCount > 0 &&
|
||||
<p className="review-flow-inline-note is-danger">{blockingReviewCount} i18n:govoplan-campaign.blocked_or_failed_message_s_must_be_resolved_bef.5c6b5140</p>
|
||||
}
|
||||
{hasBuild &&
|
||||
<div className="review-flow-data-section">
|
||||
<div className="page-heading split">
|
||||
|
||||
Reference in New Issue
Block a user