fix(ui): align contextual documentation with headings
Verified with the coordinated workspace changes by devkit full run 2026-09-08T225814-186389-0000-3e3ed7cd (all seven phases passed). This shared UI pass does not mark the individual module reviews complete.
This commit is contained in:
@@ -951,6 +951,8 @@ manifest = ModuleManifest(
|
|||||||
title="Case lifecycle, access, and evidence reference",
|
title="Case lifecycle, access, and evidence reference",
|
||||||
summary="Explains revision, status, access, and reference fields together with their durable consequences.",
|
summary="Explains revision, status, access, and reference fields together with their durable consequences.",
|
||||||
body=(
|
body=(
|
||||||
|
"Documentation books sit beside the Cases collection heading, the selected case title, and "
|
||||||
|
"the access or decision dialog title; field help stays with its label. "
|
||||||
"Title and status changes append an immutable case revision guarded by the "
|
"Title and status changes append an immutable case revision guarded by the "
|
||||||
"expected revision and a stable idempotency key. Every accepted change also "
|
"expected revision and a stable idempotency key. Every accepted change also "
|
||||||
"appends a timeline entry with actor, time, and change reason; a terminal "
|
"appends a timeline entry with actor, time, and change reason; a terminal "
|
||||||
@@ -979,6 +981,9 @@ manifest = ModuleManifest(
|
|||||||
"Revisions-, Status-, Zugriffs- und Verweisfelder gemeinsam mit ihren dauerhaften Folgen erläutern."
|
"Revisions-, Status-, Zugriffs- und Verweisfelder gemeinsam mit ihren dauerhaften Folgen erläutern."
|
||||||
),
|
),
|
||||||
"body": (
|
"body": (
|
||||||
|
"Dokumentationsbücher stehen neben der Überschrift der Vorgangsliste, dem Titel des "
|
||||||
|
"ausgewählten Vorgangs und dem Titel des Zugriffs- oder Entscheidungsdialogs; Feldhilfe "
|
||||||
|
"bleibt bei der Feldbezeichnung. "
|
||||||
"Änderungen an Titel und Status ergänzen eine unveränderliche Vorgangsrevision, geschützt durch erwartete Revision und "
|
"Änderungen an Titel und Status ergänzen eine unveränderliche Vorgangsrevision, geschützt durch erwartete Revision und "
|
||||||
"stabilen Idempotenzschlüssel. Jede akzeptierte Änderung ergänzt außerdem einen Timeline-Eintrag mit handelnder Person, "
|
"stabilen Idempotenzschlüssel. Jede akzeptierte Änderung ergänzt außerdem einen Timeline-Eintrag mit handelnder Person, "
|
||||||
"Zeitpunkt und Änderungsgrund; ein abschließender Status verlangt zusätzlich die Berechtigung zum Schließen. Die Sichtbarkeit "
|
"Zeitpunkt und Änderungsgrund; ein abschließender Status verlangt zusätzlich die Berechtigung zum Schließen. Die Sichtbarkeit "
|
||||||
|
|||||||
@@ -92,10 +92,11 @@ class CasesInterfaceDocumentationContractTests(unittest.TestCase):
|
|||||||
REPO_ROOT / "webui/src/features/cases/CaseShareDialog.tsx"
|
REPO_ROOT / "webui/src/features/cases/CaseShareDialog.tsx"
|
||||||
).read_text(encoding="utf-8")
|
).read_text(encoding="utf-8")
|
||||||
|
|
||||||
self.assertIn("DocumentationHelpLink", list_page)
|
self.assertIn("titleHelp={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}", list_page)
|
||||||
|
self.assertNotIn("helpAction=", list_page)
|
||||||
for component in (
|
for component in (
|
||||||
"ActionBlockerHint",
|
"ActionBlockerHint",
|
||||||
"DocumentationHelpLink",
|
'TextWithHelp as="div" help={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}',
|
||||||
"FormField",
|
"FormField",
|
||||||
"useUnsavedDraftGuard",
|
"useUnsavedDraftGuard",
|
||||||
"QUICK_ACCESS_RESULT_EVENT",
|
"QUICK_ACCESS_RESULT_EVENT",
|
||||||
@@ -105,7 +106,7 @@ class CasesInterfaceDocumentationContractTests(unittest.TestCase):
|
|||||||
self.assertIn(component, detail_page)
|
self.assertIn(component, detail_page)
|
||||||
for component in (
|
for component in (
|
||||||
"ConfirmDialog",
|
"ConfirmDialog",
|
||||||
"DocumentationHelpLink",
|
"titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}",
|
||||||
"ReferenceSelect",
|
"ReferenceSelect",
|
||||||
"useUnsavedDraftGuard",
|
"useUnsavedDraftGuard",
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ export default function CaseDecisionDialog({
|
|||||||
<Dialog
|
<Dialog
|
||||||
open={open}
|
open={open}
|
||||||
title={i18nMessage("i18n:govoplan-cases.decision_title", { value0: record.case_number })}
|
title={i18nMessage("i18n:govoplan-cases.decision_title", { value0: record.case_number })}
|
||||||
|
titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
closeDisabled={busy}
|
closeDisabled={busy}
|
||||||
portal
|
portal
|
||||||
@@ -123,7 +124,6 @@ export default function CaseDecisionDialog({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="case-decision-content" data-help-context-id="cases.decision.editor">
|
<div className="case-decision-content" data-help-context-id="cases.decision.editor">
|
||||||
<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />
|
|
||||||
{error ? <DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert> : null}
|
{error ? <DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert> : null}
|
||||||
<p className="case-decision-explanation">
|
<p className="case-decision-explanation">
|
||||||
The server verifies your current acting assignment, the effective Mandate, the exact Case revision, evidence, and legal basis before recording the outcome.
|
The server verifies your current acting assignment, the effective Mandate, the exact Case revision, evidence, and legal basis before recording the outcome.
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { ActionToolbar,
|
|||||||
ActionBlockerHint,
|
ActionBlockerHint,
|
||||||
Button,
|
Button,
|
||||||
DocumentationHelpLink,
|
DocumentationHelpLink,
|
||||||
|
TextWithHelp,
|
||||||
DismissibleAlert,
|
DismissibleAlert,
|
||||||
FormField,
|
FormField,
|
||||||
IconButton,
|
IconButton,
|
||||||
@@ -335,7 +336,6 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext)
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
<DocumentationHelpLink reference={CASES_DOCUMENTATION} />
|
|
||||||
</ActionToolbar>
|
</ActionToolbar>
|
||||||
<PageScrollViewport className="case-detail-viewport">
|
<PageScrollViewport className="case-detail-viewport">
|
||||||
{error &&
|
{error &&
|
||||||
@@ -350,7 +350,7 @@ export default function CaseDetailPage({ settings, auth }: PlatformRouteContext)
|
|||||||
<div className="case-detail-title-row">
|
<div className="case-detail-title-row">
|
||||||
<div>
|
<div>
|
||||||
<span className="case-detail-eyebrow">{humanize(record.case_type_key)}</span>
|
<span className="case-detail-eyebrow">{humanize(record.case_type_key)}</span>
|
||||||
<h1>{record.title}</h1>
|
<TextWithHelp as="div" help={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}><h1>{record.title}</h1></TextWithHelp>
|
||||||
</div>
|
</div>
|
||||||
<StatusBadge status={record.closed_at ? "inactive" : "active"} label={humanize(record.status_key)} />
|
<StatusBadge status={record.closed_at ? "inactive" : "active"} label={humanize(record.status_key)} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ export default function CaseShareDialog({
|
|||||||
<Dialog
|
<Dialog
|
||||||
open={open}
|
open={open}
|
||||||
title={i18nMessage("i18n:govoplan-cases.case_access_title", { value0: record.case_number })}
|
title={i18nMessage("i18n:govoplan-cases.case_access_title", { value0: record.case_number })}
|
||||||
|
titleHelp={<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />}
|
||||||
onClose={close}
|
onClose={close}
|
||||||
closeDisabled={busy}
|
closeDisabled={busy}
|
||||||
portal
|
portal
|
||||||
@@ -193,7 +194,6 @@ export default function CaseShareDialog({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="case-share-content">
|
<div className="case-share-content">
|
||||||
<DocumentationHelpLink reference={CASES_FIELDS_DOCUMENTATION} />
|
|
||||||
{error ? (
|
{error ? (
|
||||||
<DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert>
|
<DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert>
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
<main className="cases-page">
|
<main className="cases-page">
|
||||||
<WorkspaceFrame className="cases-shell" label="Cases" interfaceId="cases.catalogue" helpContextId="cases.page.catalogue" helpModuleId="cases">
|
<WorkspaceFrame className="cases-shell" label="Cases" interfaceId="cases.catalogue" helpContextId="cases.page.catalogue" helpModuleId="cases">
|
||||||
<WorkspaceActionBar
|
<WorkspaceActionBar
|
||||||
|
title="Cases"
|
||||||
|
titleHelp={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}
|
||||||
scope="collection-pane"
|
scope="collection-pane"
|
||||||
variant="collection"
|
variant="collection"
|
||||||
refreshable
|
refreshable
|
||||||
@@ -131,7 +133,6 @@ export default function CasesPage({ settings }: PlatformRouteContext) {
|
|||||||
</label>
|
</label>
|
||||||
<span className="cases-count">{i18nMessage("i18n:govoplan-cases.case_count", { value0: total })}</span>
|
<span className="cases-count">{i18nMessage("i18n:govoplan-cases.case_count", { value0: total })}</span>
|
||||||
</>}
|
</>}
|
||||||
helpAction={<DocumentationHelpLink reference={CASES_DOCUMENTATION} />}
|
|
||||||
/>
|
/>
|
||||||
<PageScrollViewport className="cases-list-viewport">
|
<PageScrollViewport className="cases-list-viewport">
|
||||||
{error &&
|
{error &&
|
||||||
|
|||||||
Reference in New Issue
Block a user