use super::switch_version::SwitchVersion; use leptos::{ev::MouseEvent, prelude::*}; use leptos_meta::Style; use leptos_router::hooks::use_navigate; // use leptos_use::{storage::use_local_storage, utils::FromToStringCodec}; use thaw::*; #[component] pub fn SiteHeader() -> impl IntoView { let navigate = use_navigate(); let navigate_signal = RwSignal::new(use_navigate()); let theme = Theme::use_rw_theme(); let theme_name = Memo::new(move |_| { theme.with(|theme| { if theme.name == *"light" { "Dark".to_string() } else { "Light".to_string() } }) }); // let (_, write_theme, _) = use_local_storage::("theme"); let change_theme = move |_| { if theme_name.get_untracked() == "Light" { theme.set(Theme::light()); // write_theme.set("light".to_string()); } else { theme.set(Theme::dark()); // write_theme.set("dark".to_string()); } }; let search_value = RwSignal::new(String::new()); let search_all_options = StoredValue::new(gen_search_all_options()); let search_options = Memo::new(move |_| { let search_value = search_value.get(); if search_value.is_empty() { return vec![]; } fn match_value(pattern: &str, value: String) -> bool { if pattern.is_empty() { return true; } if value.is_empty() { return false; } if pattern.chars().next() == value.chars().next() { return match_value(pattern.split_at(1).1, value.split_at(1).1.to_string()); } match_value(pattern, value.split_at(1).1.to_string()) } search_all_options.with_value(|options| { let search_value = search_value.to_lowercase().replace([' ', '-'], ""); let search_value = if search_value.len() > 20 { search_value.split_at(20).0 } else { &search_value }; options .iter() .filter(|option| { let label = option.label.to_lowercase().replace([' ', '-'], ""); match_value(search_value, label) }) .cloned() .collect() }) }); let on_search_select = { let navigate = navigate.clone(); move |path: String| { navigate(&path, Default::default()); } }; let auto_complete_ref = ComponentRef::::new(); #[cfg(any(feature = "csr", feature = "hydrate"))] { use leptos::ev; let handle = window_event_listener(ev::keydown, move |event| { let key = event.key(); if key == *"/" { if let Some(auto_complete_ref) = auto_complete_ref.get_untracked() { event.prevent_default(); auto_complete_ref.focus(); } } }); on_cleanup(move || handle.remove()); } // let menu_value = use_menu_value(change_theme); view! {
"Thaw UI"
{option.label} change_theme(MouseEvent::new("click").unwrap()), "Light" => change_theme(MouseEvent::new("click").unwrap()), "github" => { _ = window().open_with_url("http://github.com/thaw-ui/thaw"); },//FIXME: breaks page "discord" => { _ = window().open_with_url("https://discord.gg/YPxuprzu6M"); },//FIXME: breaks page _ => navigate_signal.get()(&value, Default::default()) } >