import { createElement, lazy } from "react"; import type { DashboardWidgetsUiCapability, PlatformWebModule } from "@govoplan/core-webui"; import SchedulingRequestsWidget from "./features/scheduling/SchedulingRequestsWidget"; import { generatedTranslations } from "./i18n/generatedTranslations"; import "./styles/scheduling.css"; const SchedulingPage = lazy(() => import("./features/scheduling/SchedulingPage")); const SchedulingPublicPage = lazy(() => import("./features/scheduling/SchedulingPublicPage")); const scheduleRead = ["scheduling:schedule:read"]; const schedulingDashboardWidgets: DashboardWidgetsUiCapability = { widgets: [ { id: "scheduling.open-requests", surfaceId: "scheduling.widget.open-requests", title: "Scheduling requests", description: "Open scheduling polls and their response progress.", moduleId: "scheduling", category: "Planning", order: 45, defaultVisible: false, defaultSize: "medium", supportedSizes: ["medium", "wide"], anyOf: scheduleRead, refreshIntervalMs: 60_000, defaultConfiguration: { maxItems: 5, includeDrafts: false }, configurationFields: [ { id: "maxItems", label: "Maximum requests", kind: "number", min: 1, max: 12, step: 1, required: true }, { id: "includeDrafts", label: "Include drafts", kind: "boolean" } ], render: ({ settings, refreshKey, configuration }) => createElement(SchedulingRequestsWidget, { settings, refreshKey, configuration }) } ] }; export const schedulingModule: PlatformWebModule = { id: "scheduling", label: "Scheduling", version: "0.1.11", dependencies: ["poll"], optionalDependencies: ["access", "calendar", "mail", "notifications", "workflow", "appointments", "addresses"], translations: generatedTranslations, viewSurfaces: [ { id: "scheduling.widget.open-requests", moduleId: "scheduling", kind: "section", label: "Scheduling requests widget", order: 45 } ], navItems: [{ to: "/scheduling", label: "Scheduling", iconName: "calendar-clock", anyOf: scheduleRead, order: 56 }], routes: [ { path: "/scheduling", anyOf: scheduleRead, order: 56, render: ({ settings, auth }) => createElement(SchedulingPage, { settings, auth }) } ], publicRoutes: [ { path: "/scheduling/public/:requestId/:token", order: 10, render: ({ settings, auth }) => createElement(SchedulingPublicPage, { settings, auth }) } ], uiCapabilities: { "dashboard.widgets": schedulingDashboardWidgets } }; export default schedulingModule;