feat: consolidate shared UI and harden browser authority for release

This commit is contained in:
2026-09-08 01:35:05 +02:00
parent ac40774785
commit b75ca34295
143 changed files with 8664 additions and 752 deletions
@@ -0,0 +1,31 @@
import { useState } from "react";
import { apiPostJson } from "../src/api/client";
import { PlatformLanguageProvider } from "../src/i18n/LanguageContext";
import BulkMessageReviewDialog from "../../../govoplan-campaign/webui/src/features/campaigns/review/BulkMessageReviewDialog";
import { generatedTranslations } from "../../../govoplan-campaign/webui/src/i18n/generatedTranslations";
import "../../../govoplan-campaign/webui/src/styles/campaign-workspace.css";
function job(id: string, overrides: Record<string, unknown> = {}) {
return { id, build_status: "built", validation_status: "needs_review", recipient_email: `${id}@example.test`, subject: `Frozen ${id}`,
review_decision: { eligible: true, category_key: "same-attachment-condition", reason_required: true, issue_codes: ["attachment_match_empty"] }, ...overrides };
}
export default function CampaignBulkReviewScenario() {
const params = new URLSearchParams(window.location.search);
const [open, setOpen] = useState(false);
const [buildToken, setBuildToken] = useState("build-one");
const rows = [...Array.from({ length: params.has("large") ? 205 : 3 }, (_, index) => job(`job-${String(index).padStart(3, "0")}`)),
job("reviewed", { reviewed: true }), job("blocked", { validation_status: "blocked", review_decision: { eligible: false } }),
job("expected-exclusion", { validation_status: "excluded", review_decision: { eligible: false } }),
job("allowed-zero", { validation_status: "warning", review_decision: { eligible: false } }),
job("other-category", { review_decision: { eligible: true, category_key: "other-condition", reason_required: false, issue_codes: ["address_warning"] } })];
return <PlatformLanguageProvider preferredLanguageCode={params.get("language") ?? "en"} moduleTranslations={[generatedTranslations]}>
<main><button onClick={() => setOpen(true)}>Open grouped review</button>
<button data-testid="replace-build" onClick={() => setBuildToken("build-two")}>Replace build</button>
{open && <BulkMessageReviewDialog rows={rows} buildToken={buildToken} disabled={params.has("read-only")}
onClose={() => setOpen(false)} onAccept={async (selection) => {
await apiPostJson({ apiBaseUrl: "", apiKey: "", accessToken: "" }, "/api/v1/conformance/review-state", selection);
}} />}
</main>
</PlatformLanguageProvider>;
}