round69: Kurzes Aufblitzen des Classic-Designs beim Reload behoben (Design-Wahl jetzt zusaetzlich lokal zwischengespeichert)

This commit is contained in:
2026-07-26 22:51:05 +02:00
parent 2ed39d6865
commit 0a1052f217

View File

@@ -311,7 +311,29 @@ export function HomePage() {
const showResults = isSearching && resultsVisible;
const isMobile = useIsMobile();
const useAndroidHome = isMobile && settings?.mobileHomeStyle === "android";
// WICHTIG: Bei einem ECHTEN Seiten-Reload (z. B. "mit Runterziehen
// aktualisieren" auf dem Handy) ist settings.mobileHomeStyle beim
// allerersten Render noch nicht geladen (React-Query-Cache ist nach einem
// vollständigen Reload leer, die Server-Antwort kommt erst asynchron
// nach) - bis dahin wäre "classic" der Standard-Fallback gewesen und kurz
// sichtbar aufgeblitzt, bevor auf "android" umgeschaltet wird (siehe
// Bugreport). Die zuletzt bekannte Wahl wird daher zusätzlich in
// localStorage gespiegelt (überlebt einen Reload, im Gegensatz zum
// React-Query-Cache) und beim allerersten Render schon genutzt, bevor die
// eigentliche Serverantwort da ist - dieselbe Technik wie beim
// Dark-Mode-Flash (siehe index.html).
const [cachedMobileHomeStyle, setCachedMobileHomeStyle] = useState<string | null>(() =>
typeof window !== "undefined" ? window.localStorage.getItem("launchpad:mobileHomeStyle") : null
);
useEffect(() => {
if (settings?.mobileHomeStyle && settings.mobileHomeStyle !== cachedMobileHomeStyle) {
window.localStorage.setItem("launchpad:mobileHomeStyle", settings.mobileHomeStyle);
setCachedMobileHomeStyle(settings.mobileHomeStyle);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [settings?.mobileHomeStyle]);
const effectiveMobileHomeStyle = settings?.mobileHomeStyle ?? cachedMobileHomeStyle ?? "classic";
const useAndroidHome = isMobile && effectiveMobileHomeStyle === "android";
const addReadLaterMutation = useMutation({
mutationFn: (url: string) => saveReadLaterRequest(url),