import { createElement, lazy } from "react"; import type { DashboardWidgetsUiCapability, PlatformWebModule, SettingsSectionsUiCapability } from "@govoplan/core-webui"; import NotificationSummaryWidget from "./features/notifications/NotificationSummaryWidget"; import { generatedTranslations } from "./i18n/generatedTranslations"; import "./styles/notifications.css"; const NotificationCenterPage = lazy(() => import("./features/notifications/NotificationCenterPage")); const NotificationSettingsPanel = lazy(() => import("./features/notifications/NotificationSettingsPanel")); const notificationRead = ["notifications:notification:read"]; const notificationDashboardWidgets: DashboardWidgetsUiCapability = { widgets: [ { id: "notifications.summary", surfaceId: "notifications.widget.summary", title: "i18n:govoplan-notifications.surface.center", description: "i18n:govoplan-notifications.widget_description", moduleId: "notifications", category: "i18n:govoplan-notifications.communication", order: 60, defaultSize: "medium", supportedSizes: ["medium", "wide"], anyOf: notificationRead, refreshIntervalMs: 30_000, defaultConfiguration: { showDeliveryState: true }, configurationFields: [ { id: "showDeliveryState", label: "i18n:govoplan-notifications.show_delivery_state", description: "i18n:govoplan-notifications.show_delivery_state_help", kind: "boolean" } ], render: ({ settings, effectiveView, refreshKey, configuration }) => createElement(NotificationSummaryWidget, { settings, refreshKey, configuration, showCenterLink: ( !effectiveView?.activeViewId || effectiveView.visibleSurfaceIds.includes( "notifications.route.notifications" ) ) }) } ] }; const notificationSettingsSections: SettingsSectionsUiCapability = { sections: [ { id: "notifications", surfaceId: "notifications.settings.preferences", label: "i18n:govoplan-notifications.surface.center", group: "ui", order: 40, anyOf: notificationRead, render: ({ settings, auth }) => createElement(NotificationSettingsPanel, { settings, auth }) } ] }; export const notificationsModule: PlatformWebModule = { id: "notifications", label: "i18n:govoplan-notifications.surface.center", version: "1.0.0", dependencies: [], optionalDependencies: ["mail", "tasks", "portal", "workflow", "calendar", "scheduling"], translations: generatedTranslations, viewSurfaces: [ { id: "notifications.page.inbox", moduleId: "notifications", kind: "section", label: "i18n:govoplan-notifications.surface.inbox", parentId: "notifications.route.notifications", order: 20 }, { id: "notifications.page.detail", moduleId: "notifications", kind: "section", label: "i18n:govoplan-notifications.surface.detail", parentId: "notifications.route.notifications", order: 30 }, { id: "notifications.page.delivery", moduleId: "notifications", kind: "section", label: "i18n:govoplan-notifications.surface.delivery", parentId: "notifications.page.detail", order: 40 }, { id: "notifications.action.mark-read", moduleId: "notifications", kind: "action", label: "i18n:govoplan-notifications.surface.mark_read", parentId: "notifications.page.detail", order: 50 }, { id: "notifications.action.acknowledge", moduleId: "notifications", kind: "action", label: "i18n:govoplan-notifications.surface.acknowledge", parentId: "notifications.page.detail", order: 60 }, { id: "notifications.action.cancel", moduleId: "notifications", kind: "action", label: "i18n:govoplan-notifications.surface.cancel", parentId: "notifications.page.delivery", order: 70 }, { id: "notifications.action.dispatch", moduleId: "notifications", kind: "action", label: "i18n:govoplan-notifications.surface.dispatch", parentId: "notifications.page.delivery", order: 80 }, { id: "notifications.widget.summary", moduleId: "notifications", kind: "section", label: "i18n:govoplan-notifications.surface.widget_summary", order: 90 }, { id: "notifications.settings.preferences", moduleId: "notifications", kind: "section", label: "i18n:govoplan-notifications.surface.preferences", order: 100 } ], routes: [ { path: "/notifications", anyOf: notificationRead, order: 59, surfaceId: "notifications.route.notifications", render: ({ settings, auth }) => createElement(NotificationCenterPage, { settings, auth }) } ], uiCapabilities: { "settings.sections": notificationSettingsSections, "dashboard.widgets": notificationDashboardWidgets } }; export default notificationsModule;