feat: integrate reports into Campaign navigation
This commit is contained in:
@@ -11,8 +11,9 @@ import { OPERATOR_QUEUE_ROUTE_SCOPES } from "../operator/operatorQueueAccess";
|
||||
|
||||
const CampaignListPage = lazy(() => import("./CampaignListPage"));
|
||||
const OperatorQueuePage = lazy(() => import("../operator/OperatorQueuePage"));
|
||||
const AggregateReportsPage = lazy(() => import("../reports/AggregateReportsPage"));
|
||||
|
||||
export type CampaignModuleSection = "campaigns" | "queue";
|
||||
export type CampaignModuleSection = "campaigns" | "queue" | "reports";
|
||||
|
||||
export default function CampaignModulePage({
|
||||
active,
|
||||
@@ -24,24 +25,42 @@ export default function CampaignModulePage({
|
||||
auth: AuthInfo;
|
||||
}) {
|
||||
const navigate = useGuardedNavigate();
|
||||
const canReadCampaigns = hasAnyScope(auth, ["campaigns:campaign:read"]);
|
||||
const canUseQueue =
|
||||
canReadCampaigns && hasAnyScope(auth, OPERATOR_QUEUE_ROUTE_SCOPES);
|
||||
const canReadReports = hasAnyScope(auth, ["campaigns:report:read"]);
|
||||
const groups: ModuleSubnavGroup<CampaignModuleSection>[] = [{
|
||||
items: [
|
||||
{
|
||||
id: "campaigns",
|
||||
label: "i18n:govoplan-campaign.all_campaigns.2bd1ee3a",
|
||||
primary: true
|
||||
},
|
||||
...(hasAnyScope(auth, OPERATOR_QUEUE_ROUTE_SCOPES)
|
||||
...(canReadCampaigns
|
||||
? [{
|
||||
id: "campaigns" as const,
|
||||
label: "i18n:govoplan-campaign.all_campaigns.2bd1ee3a",
|
||||
primary: true
|
||||
}]
|
||||
: []),
|
||||
...(canUseQueue
|
||||
? [{
|
||||
id: "queue" as const,
|
||||
label: "i18n:govoplan-campaign.operator_queue.72492fb5"
|
||||
}]
|
||||
: []),
|
||||
...(canReadReports
|
||||
? [{
|
||||
id: "reports" as const,
|
||||
label: "i18n:govoplan-campaign.reports.88bc3fe3",
|
||||
primary: !canReadCampaigns
|
||||
}]
|
||||
: [])
|
||||
]
|
||||
}];
|
||||
|
||||
function select(section: CampaignModuleSection) {
|
||||
navigate(section === "queue" ? "/campaigns/queue" : "/campaigns");
|
||||
const routes: Record<CampaignModuleSection, string> = {
|
||||
campaigns: "/campaigns",
|
||||
queue: "/campaigns/queue",
|
||||
reports: "/campaigns/reports"
|
||||
};
|
||||
navigate(routes[section]);
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -50,7 +69,9 @@ export default function CampaignModulePage({
|
||||
<section className="workspace-content">
|
||||
{active === "queue"
|
||||
? <OperatorQueuePage settings={settings} auth={auth} />
|
||||
: <CampaignListPage settings={settings} />}
|
||||
: active === "reports"
|
||||
? <AggregateReportsPage settings={settings} />
|
||||
: <CampaignListPage settings={settings} />}
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user