From d635f3a5fc7534a3b9acebdce68bd30cf97a6dc3 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Mon, 3 Aug 2026 07:35:39 +0200 Subject: [PATCH] Link campaign interventions to configured help --- .../campaigns/review/ReviewWorkflowGuidance.tsx | 10 +++++++++- .../review-workflow-guidance-ui-structure.test.mjs | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/webui/src/features/campaigns/review/ReviewWorkflowGuidance.tsx b/webui/src/features/campaigns/review/ReviewWorkflowGuidance.tsx index e87dd0d..9692223 100644 --- a/webui/src/features/campaigns/review/ReviewWorkflowGuidance.tsx +++ b/webui/src/features/campaigns/review/ReviewWorkflowGuidance.tsx @@ -12,9 +12,10 @@ type InterventionHintProps = { summary: string; requiredAction: string; destination: string; + documentationTopicId: string; }; -function InterventionHint({ tone, summary, requiredAction, destination }: InterventionHintProps) { +function InterventionHint({ tone, summary, requiredAction, destination, documentationTopicId }: InterventionHintProps) { const requiredActionLabel = i18nMessage("i18n:govoplan-campaign.required_action.f2429497"); const actorLabel = i18nMessage("i18n:govoplan-campaign.who_can_resolve_this.e60939b2"); const destinationLabel = i18nMessage("i18n:govoplan-campaign.where_to_go.bb1c6969"); @@ -30,6 +31,7 @@ function InterventionHint({ tone, summary, requiredAction, destination }: Interv )} {stale && ( @@ -64,6 +67,7 @@ export function ValidationWorkflowGuidance({ summary={i18nMessage("i18n:govoplan-campaign.the_validation_evidence_is_stale.408e8930")} requiredAction={i18nMessage("i18n:govoplan-campaign.run_validation_again_before_relying_on_this_result.97116fc9")} destination={i18nMessage("i18n:govoplan-campaign.review_send_validate.c1b403c7")} + documentationTopicId="campaigns.workflow.prepare-validate-and-build" /> )} {warnings > 0 && ( @@ -72,6 +76,7 @@ export function ValidationWorkflowGuidance({ summary={i18nMessage("i18n:govoplan-campaign.value0_validation_warning_s_need_review_but_do_not_block.ff03efd1", { value0: warnings })} requiredAction={i18nMessage("i18n:govoplan-campaign.inspect_the_warning_details_correct_the_data_or_accept_t.a558e0d4")} destination={i18nMessage("i18n:govoplan-campaign.review_send_validate.c1b403c7")} + documentationTopicId="campaigns.workflow.prepare-validate-and-build" /> )} @@ -134,6 +139,7 @@ export function BuiltMessageWorkflowGuidance({ summary={i18nMessage("i18n:govoplan-campaign.value0_built_message_s_are_blocked_or_failed.8061ea60", { value0: progress.blocking })} requiredAction={i18nMessage("i18n:govoplan-campaign.correct_the_affected_recipient_template_mail_or_attachme.5a65e373")} destination={i18nMessage("i18n:govoplan-campaign.sender_recipients_template_mail_settings_or_files.bdd91b62")} + documentationTopicId="campaigns.workflow.complete-review" /> )} {progress.remaining > 0 && ( @@ -146,6 +152,7 @@ export function BuiltMessageWorkflowGuidance({ })} requiredAction={i18nMessage("i18n:govoplan-campaign.open_every_critical_message_and_record_a_decision_then_e.9e08c029")} destination={i18nMessage("i18n:govoplan-campaign.review_send_built_messages.6b030946")} + documentationTopicId="campaigns.workflow.complete-review" /> )} {showUnacknowledgedWarning && ( @@ -154,6 +161,7 @@ export function BuiltMessageWorkflowGuidance({ summary={i18nMessage("i18n:govoplan-campaign.value0_built_message_warning_s_need_acknowledgement.7d8e30a2", { value0: buildWarnings })} requiredAction={i18nMessage("i18n:govoplan-campaign.inspect_the_warning_details_correct_the_data_or_accept_t.a558e0d4")} destination={i18nMessage("i18n:govoplan-campaign.review_send_built_messages.6b030946")} + documentationTopicId="campaigns.workflow.complete-review" /> )} diff --git a/webui/tests/review-workflow-guidance-ui-structure.test.mjs b/webui/tests/review-workflow-guidance-ui-structure.test.mjs index 263d4c9..3a1ad8f 100644 --- a/webui/tests/review-workflow-guidance-ui-structure.test.mjs +++ b/webui/tests/review-workflow-guidance-ui-structure.test.mjs @@ -13,6 +13,9 @@ assert.match(guidance, /tone="danger"/); assert.match(guidance, /tone="warning"/); assert.match(guidance, /requiredAction: requiredActionLabel/); assert.match(guidance, /target: destinationLabel/); +assert.match(guidance, /documentation=\{\{ topicId: documentationTopicId \}\}/); +assert.match(guidance, /campaigns\.workflow\.prepare-validate-and-build/); +assert.match(guidance, /campaigns\.workflow\.complete-review/); assert.match(page, /calculateBuildReviewProgress/); assert.match(page, /