import { StatusBadge, type DashboardWidgetConfiguration, type PlatformWebModule } from "@govoplan/core-webui"; export default function InstalledModulesWidget({ modules, configuration }: { modules: PlatformWebModule[]; configuration: DashboardWidgetConfiguration; }) { if (!modules.length) return

No WebUI modules are active.

; const maxItems = clampNumber(configuration.maxItems, 1, 50, 8); const showVersions = configuration.showVersions !== false; const sortBy = configuration.sortBy === "label" ? "label" : "module"; const visibleModules = [...modules] .sort((left, right) => { const leftValue = sortBy === "label" ? left.label : left.id; const rightValue = sortBy === "label" ? right.label : right.id; return String(leftValue).localeCompare(String(rightValue)); }) .slice(0, maxItems); const remaining = Math.max(modules.length - visibleModules.length, 0); return ( <>
{visibleModules.map((module) =>
{module.label} {showVersions && v{module.version}}
)}
{remaining > 0 &&

+{remaining} more active modules

} ); } function clampNumber( value: DashboardWidgetConfiguration[string], minimum: number, maximum: number, fallback: number ): number { if (typeof value !== "number" || !Number.isFinite(value)) return fallback; return Math.min(maximum, Math.max(minimum, Math.round(value))); }