From 7e70fc4d32cd18b381672272d23084061c2e7eda Mon Sep 17 00:00:00 2001 From: Schalli Date: Wed, 30 Sep 2026 12:02:50 +0200 Subject: [PATCH] feat(custom-modules): besuchte eigene Module offen halten (Keep-Alive, hoechstens 5) iframes liegen dauerhaft in einem Behaelter im Portal-Rahmen und werden per position: fixed deckungsgleich ueber den Platzhalter der Modulseite gelegt; beim Wegnavigieren nur versteckt (visibility), nie neu eingehaengt. Name/Adresse je Modul im Sitzungsspeicher, Nachladen im Hintergrund, 404 verwirft. Abmelden und Loeschen leeren. Im Browser nachgewiesen: gleiches iframe-Element und kein neuer Seitenabruf nach Dashboard -> Modul B -> Modul A; folgt Seitenleiste ein-/ausgeklappt und Handybreite. Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 1 + .../custom-module-form-modal.tsx | 5 + .../delete-custom-module-dialog.tsx | 3 + apps/web/src/components/layout/app-shell.tsx | 17 ++- apps/web/src/components/layout/header.tsx | 55 +++---- .../modules/custom-module-frame-host.tsx | 134 +++++++++++++++++ .../modules/custom-module-view.test.tsx | 138 ++++++++++++++++-- .../components/modules/custom-module-view.tsx | 88 +++++++---- .../stores/custom-module-cache-store.test.ts | 83 +++++++++++ .../lib/stores/custom-module-cache-store.ts | 102 +++++++++++++ 10 files changed, 553 insertions(+), 73 deletions(-) create mode 100644 apps/web/src/components/modules/custom-module-frame-host.tsx create mode 100644 apps/web/src/lib/stores/custom-module-cache-store.test.ts create mode 100644 apps/web/src/lib/stores/custom-module-cache-store.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 86bc2d9..2eb93e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T ### Geändert +- Eigene Module: Einmal geöffnete Seiten bleiben im Hintergrund offen. Wechseln Sie zurück, ist die Seite sofort da – im selben Zustand, ohne neu zu laden. Tessera hält die fünf zuletzt benutzten offen; beim Abmelden werden sie geschlossen. - Dashboard, Favoriten: In der Kachelansicht stehen die Symbole enger beieinander; der Abstand zwischen ihnen ist etwa halb so groß, in eine Zeile passen mehr Favoriten. Passt ein Name nicht in eine Zeile, wird er kleiner geschrieben und auf zwei Zeilen umbrochen. - Dashboard: Es sieht jetzt auf jedem Bildschirm gleich aus. Tessera merkt sich die Fläche des Bildschirms, an dem Sie ein Dashboard zuerst öffnen, und zeigt es auf anderen Bildschirmen maßstäblich verkleinert oder vergrößert – samt Schrift und ohne Scrollen. Ist ein Dashboard länger als der Bildschirm, wird es so weit verkleinert, dass es ganz hineinpasst. Auf dem Handy bleibt es bei der bisherigen Anordnung untereinander. - Eigene Module: Neue Einträge sind mit der Kategorie „Eigene Module“ vorbelegt. diff --git a/apps/web/src/components/custom-modules/custom-module-form-modal.tsx b/apps/web/src/components/custom-modules/custom-module-form-modal.tsx index 9eff9d9..6760d29 100644 --- a/apps/web/src/components/custom-modules/custom-module-form-modal.tsx +++ b/apps/web/src/components/custom-modules/custom-module-form-modal.tsx @@ -10,6 +10,7 @@ import { createCustomModule, updateCustomModule, } from '@/lib/custom-modules-api'; +import { useCustomModuleCacheStore } from '@/lib/stores/custom-module-cache-store'; import { useCategoryLabel } from '@/lib/use-category-label'; interface CustomModuleFormModalProps { @@ -96,6 +97,10 @@ export function CustomModuleFormModal({ const input = { name: trimmedName, url: trimmedUrl, category }; if (mod) { await updateCustomModule(mod.id, input); + // Sitzungsspeicher der offen gehaltenen Module nachziehen — nur wenn + // das Modul dort schon liegt; eine neue Adresse laedt dessen