feat(campaigns): add governed collaboration thread
Module Package Release / publish-packages (push) Successful in 13s

This commit is contained in:
2026-08-22 00:09:34 +02:00
parent 5a21067e44
commit c2f083e5f6
25 changed files with 2315 additions and 24 deletions
+16 -4
View File
@@ -1,7 +1,9 @@
import type { CampaignWorkspaceSection } from "../types";
import { ModuleSubnav, type ModuleSubnavGroup } from "@govoplan/core-webui";
const campaignSubnav: ModuleSubnavGroup<CampaignWorkspaceSection>[] = [
export type CampaignWorkspaceNavigationSection = CampaignWorkspaceSection | "activity";
const campaignSubnav: ModuleSubnavGroup<CampaignWorkspaceNavigationSection>[] = [
{
items: [{ id: "overview", label: "i18n:govoplan-campaign.overview.0efc2e6b", primary: true }]
},
@@ -38,6 +40,7 @@ const campaignSubnav: ModuleSubnavGroup<CampaignWorkspaceSection>[] = [
title: "i18n:govoplan-campaign.report.7b8ddb90",
items: [
{ id: "report", label: "i18n:govoplan-campaign.report.ee45c303" },
{ id: "activity", label: "i18n:govoplan-campaign.collaboration" },
{ id: "audit", label: "i18n:govoplan-campaign.audit_log.3cfc5f1c" }]
},
@@ -49,10 +52,19 @@ const campaignSubnav: ModuleSubnavGroup<CampaignWorkspaceSection>[] = [
export default function SectionSidebar({
active,
onSelect
onSelect,
canReadActivity
}: {active: CampaignWorkspaceSection;onSelect: (section: CampaignWorkspaceSection) => void;}) {
return <ModuleSubnav active={active} groups={campaignSubnav} onSelect={onSelect} />;
}: {
active: CampaignWorkspaceNavigationSection;
onSelect: (section: CampaignWorkspaceNavigationSection) => void;
canReadActivity: boolean;
}) {
const groups = campaignSubnav.map((group) => ({
...group,
items: group.items.filter((item) => item.id !== "activity" || canReadActivity)
}));
return <ModuleSubnav active={active} groups={groups} onSelect={onSelect} />;
}