From 1e90eb29050f27de34571143aadb9d3fb8d743c0 Mon Sep 17 00:00:00 2001 From: Dicken Date: Sun, 26 Jul 2026 23:15:37 +0200 Subject: [PATCH] round70: Icons ruckeln nicht mehr nach - Raster wartet auf alle Datenquellen bevor es rendert --- .../src/components/MobileAndroidHome.tsx | 106 +++++++++++------- apps/frontend/src/routes/HomePage.tsx | 18 ++- 2 files changed, 82 insertions(+), 42 deletions(-) diff --git a/apps/frontend/src/components/MobileAndroidHome.tsx b/apps/frontend/src/components/MobileAndroidHome.tsx index dd6b765..56e7232 100644 --- a/apps/frontend/src/components/MobileAndroidHome.tsx +++ b/apps/frontend/src/components/MobileAndroidHome.tsx @@ -235,6 +235,14 @@ export interface MobileAndroidHomeProps { onToggleFavorite: (item: SearchResult) => void; onAddReadLater: (url: string) => void; isOnline: boolean; + /** + * Wird erst true, wenn ALLE für das Raster nötigen Daten (Dienste, + * Lesezeichen, Kategorien, Zuletzt-besucht, Einstellungen/Layout) + * mindestens einmal geladen sind - siehe Kommentar in HomePage.tsx. Bis + * dahin wird ein einfacher Platzhalter statt des Rasters gezeigt, damit + * nicht einzelne Kacheln nacheinander "nachrücken". + */ + isReady: boolean; } export function MobileAndroidHome({ @@ -249,6 +257,7 @@ export function MobileAndroidHome({ onToggleFavorite, onAddReadLater, isOnline, + isReady, }: MobileAndroidHomeProps) { const [searchOpen, setSearchOpen] = useState(false); const [query, setQuery] = useState(""); @@ -537,46 +546,63 @@ export function MobileAndroidHome({ {/* Haupt-Raster */}
-
- {recentVisits.length > 0 ? ( - - ) : null} - + {isReady ? ( + <> +
+ {recentVisits.length > 0 ? ( + + ) : null} + - {layout.grid.map((slot) => renderTile(slot, "grid"))} -
+ {layout.grid.map((slot) => renderTile(slot, "grid"))} +
- {layout.grid.length === 0 ? ( -

- Markiere Dienste/Lesezeichen im Adminbereich als Favorit – sie erscheinen dann hier. -

- ) : null} + {layout.grid.length === 0 ? ( +

+ Markiere Dienste/Lesezeichen im Adminbereich als Favorit – sie erscheinen dann hier. +

+ ) : null} + + ) : ( + // Platzhalter statt des Rasters, solange noch nicht ALLE nötigen + // Daten da sind (siehe isReady-Kommentar an der Prop weiter oben) - + // verhindert, dass z. B. "Zuletzt besucht" erst nachträglich + // auftaucht und alle Icons danach verschiebt (siehe Bugreport). +