feat(web): add persistent theme

This commit is contained in:
Kristofers Solo 2025-11-26 19:17:25 +02:00
parent 01eac0bc85
commit 045f49a9ef
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED

View File

@ -4,17 +4,17 @@ use std::fmt::Display;
#[component] #[component]
pub fn Header() -> impl IntoView { 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() if let Ok(Some(storage)) = window().local_storage()
&& let Ok(Some(saved)) = storage.get_item("theme") && let Ok(Some(saved)) = storage.get_item("theme")
{ {
Theme::from_local_storage(&saved) let theme = Theme::from_local_storage(&saved);
} else { set_theme(theme);
Theme::Dark apply_theme(theme);
} }
}; });
let (theme, set_theme) = signal(initial_theme);
let toggle_theme = move |_| { let toggle_theme = move |_| {
set_theme.update(|t| *t = t.inverse()); set_theme.update(|t| *t = t.inverse());
@ -22,7 +22,6 @@ pub fn Header() -> impl IntoView {
if let Ok(Some(storage)) = window().local_storage() { if let Ok(Some(storage)) = window().local_storage() {
let _ = storage.set_item("theme", theme.get().to_local_storage()); let _ = storage.set_item("theme", theme.get().to_local_storage());
} }
apply_theme(theme.get()); apply_theme(theme.get());
}; };