From 045f49a9ef28ff202cd3e7c45a99d4f0089e3e33 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Wed, 26 Nov 2025 19:17:25 +0200 Subject: [PATCH] feat(web): add persistent theme --- web/src/pages/header.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/web/src/pages/header.rs b/web/src/pages/header.rs index d54ae05..112fe71 100644 --- a/web/src/pages/header.rs +++ b/web/src/pages/header.rs @@ -4,17 +4,17 @@ use std::fmt::Display; #[component] pub fn Header() -> impl IntoView { - let initial_theme = { + let (theme, set_theme) = signal(Theme::Dark); + + Effect::new(move |_| { if let Ok(Some(storage)) = window().local_storage() && let Ok(Some(saved)) = storage.get_item("theme") { - Theme::from_local_storage(&saved) - } else { - Theme::Dark + let theme = Theme::from_local_storage(&saved); + set_theme(theme); + apply_theme(theme); } - }; - - let (theme, set_theme) = signal(initial_theme); + }); let toggle_theme = move |_| { set_theme.update(|t| *t = t.inverse()); @@ -22,7 +22,6 @@ pub fn Header() -> impl IntoView { if let Ok(Some(storage)) = window().local_storage() { let _ = storage.set_item("theme", theme.get().to_local_storage()); } - apply_theme(theme.get()); };