39ea1474a5
- Web: Union-Mitglied, Constraints, Icon, Registry-Eintrag, wire-Funktion, Katalog, Seiten-Verdrahtung, Tests und i18n (de/en) fuer den Typ link entfernt; link-widget.tsx/.test.tsx geloescht - API: create-widget.dto.ts (@IsIn-Liste) und widget-module-map.ts (Kommentare) auf sieben Typen angepasst; schema.prisma unveraendert - Neue Migration 20260916120000_remove_link_widget: eine idempotente DELETE-Anweisung auf WidgetInstance, FavoriteLink kaskadiert ueber den bestehenden FK; wird in diesem Auftrag NICHT ausgefuehrt - Neuer widget-wrapper-Test belegt den grauen Fallback fuer unbekannte Widget-Typen (Bestandsverhalten, jetzt festgeschrieben) - Handbuch (Widget-Tabelle, Einstellungs-Hinweise) und CHANGELOG (Geaendert/Entfernt/Behoben) aktualisiert - Web: 52 Dateien / 344 Tests gruen, tsc Exit 0; API: tsc Exit 0, dashboard-Spec 31 Tests gruen Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
/**
|
|
* Zuordnung Widget-Typ → Modul (D-22, PERM-07).
|
|
*
|
|
* Zweck: Widgets eines für den Benutzer gesperrten Moduls verschwinden
|
|
* serverseitig aus GET /dashboard/widgets — DashboardService.getWidgets
|
|
* filtert darüber.
|
|
*
|
|
* Schlüssel sind Werte von `WidgetInstance.widgetType`, Werte sind
|
|
* Modul-Slugs aus `Module.slug`.
|
|
*
|
|
* Bewusst eine TypeScript-Konstante statt einer Spalte auf
|
|
* `WidgetInstance`: eine Migration auf einer bereits befüllten Tabelle
|
|
* für ein Feld, das derzeit für jede Zeile leer wäre, wiegt schwerer als
|
|
* diese Konstante mit identischer Aussagekraft (15-RESEARCH.md Pitfall 5).
|
|
*
|
|
* Die Tabelle ist am Ende dieser Phase bewusst leer: alle sieben heute
|
|
* registrierten Widget-Typen (clock/search/calendar/note/calculator/
|
|
* favorites/stopwatch, siehe apps/web/src/components/dashboard/
|
|
* widget-registry.tsx) sind Plattform-Widgets ohne Modulbezug. Das
|
|
* einzige bislang geplante modulgebundene Widget steht in
|
|
* .planning/REQUIREMENTS.md unter "Future Requirements (deferred)" und
|
|
* wird in dieser Phase bewusst nicht registriert.
|
|
*/
|
|
export const WIDGET_MODULE_MAP: Readonly<Record<string, string>> = {};
|
|
|
|
/**
|
|
* Liefert den Modul-Slug für einen Widget-Typ, oder `undefined`, wenn
|
|
* der Typ kein Modul-Widget ist (der heutige Zustand für alle sieben
|
|
* bestehenden Typen). Einziger Lesezugriff auf die Zuordnungstabelle,
|
|
* damit Tests sie gezielt mocken können.
|
|
*/
|
|
export function getModuleSlugForWidgetType(widgetType: string): string | undefined {
|
|
return WIDGET_MODULE_MAP[widgetType];
|
|
}
|