feat(campaigns): add Case Quick Access selector
Module Package Release / publish-packages (push) Successful in 13s
Module Package Release / publish-packages (push) Successful in 13s
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@govoplan/campaign-webui",
|
||||
"version": "0.1.18",
|
||||
"version": "0.1.19",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "src/index.ts",
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
import { Megaphone, X } from "lucide-react";
|
||||
import { useCallback } from "react";
|
||||
|
||||
import {
|
||||
Button,
|
||||
DashboardWidgetList,
|
||||
DismissibleAlert,
|
||||
LoadingFrame,
|
||||
useDashboardWidgetData,
|
||||
type QuickAccessToolRenderContext
|
||||
} from "@govoplan/core-webui";
|
||||
import { listCampaigns } from "../../api/campaigns";
|
||||
|
||||
|
||||
type Props = Pick<
|
||||
QuickAccessToolRenderContext,
|
||||
"settings" | "launchContext" | "complete" | "cancel"
|
||||
>;
|
||||
|
||||
export default function CampaignQuickAccess({
|
||||
settings,
|
||||
launchContext,
|
||||
complete,
|
||||
cancel
|
||||
}: Props) {
|
||||
const load = useCallback(
|
||||
async () => (await listCampaigns(settings))
|
||||
.filter((campaign) => Boolean(campaign.current_version_id))
|
||||
.slice(0, 12),
|
||||
[settings]
|
||||
);
|
||||
const { data, loading, error } = useDashboardWidgetData(load, 0);
|
||||
|
||||
return (
|
||||
<LoadingFrame loading={loading} label="Loading authorized Campaigns">
|
||||
<p className="muted small-note">
|
||||
Select an exact Campaign version for {launchContext.activeObject?.label}.
|
||||
Campaign content remains in Campaigns and access is checked again when opened.
|
||||
</p>
|
||||
{error ? (
|
||||
<DismissibleAlert tone="warning" resetKey={error}>{error}</DismissibleAlert>
|
||||
) : null}
|
||||
<DashboardWidgetList
|
||||
emptyText="No authorized versioned Campaign is available."
|
||||
items={(data ?? []).map((campaign) => ({
|
||||
id: campaign.id,
|
||||
title: campaign.name,
|
||||
detail: campaign.description || campaign.status,
|
||||
meta: campaign.status,
|
||||
leading: <Megaphone size={17} aria-hidden="true" />,
|
||||
onClick: () => complete({
|
||||
contractVersion: "1",
|
||||
outcome: "completed",
|
||||
action: "selected",
|
||||
reference: {
|
||||
ownerModule: "campaigns",
|
||||
kind: "campaign",
|
||||
objectId: campaign.id,
|
||||
tenantId: launchContext.tenantId,
|
||||
label: campaign.name,
|
||||
version: campaign.current_version_id!,
|
||||
path: `/campaigns/${encodeURIComponent(campaign.id)}`
|
||||
}
|
||||
})
|
||||
}))}
|
||||
/>
|
||||
<div className="dashboard-contribution-footer">
|
||||
<Button onClick={() => cancel("user")}>
|
||||
<X size={15} aria-hidden="true" /> Cancel selection
|
||||
</Button>
|
||||
</div>
|
||||
</LoadingFrame>
|
||||
);
|
||||
}
|
||||
+12
-1
@@ -6,10 +6,12 @@ import {
|
||||
type ApiSettings,
|
||||
type AuthInfo,
|
||||
type DashboardWidgetsUiCapability,
|
||||
type PlatformWebModule
|
||||
type PlatformWebModule,
|
||||
type QuickAccessToolsUiCapability
|
||||
} from "@govoplan/core-webui";
|
||||
import { getCampaign } from "./api/campaigns";
|
||||
import CampaignActivityWidget from "./features/campaigns/CampaignActivityWidget";
|
||||
import CampaignQuickAccess from "./features/campaigns/CampaignQuickAccess";
|
||||
import { OPERATOR_QUEUE_ROUTE_SCOPES } from "./features/operator/operatorQueueAccess";
|
||||
import { generatedTranslations } from "./i18n/generatedTranslations";
|
||||
import { campaignWizardDirectories } from "./features/campaigns/wizard/directory";
|
||||
@@ -72,6 +74,14 @@ const campaignDashboardWidgets: DashboardWidgetsUiCapability = {
|
||||
}
|
||||
]
|
||||
};
|
||||
const campaignQuickAccessTools: QuickAccessToolsUiCapability = {
|
||||
tools: [
|
||||
{
|
||||
id: "campaigns.select",
|
||||
render: (context) => createElement(CampaignQuickAccess, context)
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
export const campaignModule: PlatformWebModule = {
|
||||
id: "campaigns",
|
||||
@@ -100,6 +110,7 @@ export const campaignModule: PlatformWebModule = {
|
||||
{ path: "/campaigns/:campaignId/*", anyOf: campaignRead, order: 22, render: ({ settings, auth }) => createElement(CampaignResourceRoute, { settings, auth }) }],
|
||||
uiCapabilities: {
|
||||
"dashboard.widgets": campaignDashboardWidgets,
|
||||
"quickAccess.tools": campaignQuickAccessTools,
|
||||
"wizard.directories": campaignWizardDirectories
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user