diff --git a/demo/src/components/site_header.rs b/demo/src/components/site_header.rs index b42388d..e9f6a4b 100644 --- a/demo/src/components/site_header.rs +++ b/demo/src/components/site_header.rs @@ -26,6 +26,49 @@ pub fn SiteHeader() -> impl IntoView { format!("height: 64px; display: flex; align-items: center; justify-content: space-between; padding: 0 20px; border-bottom: 1px solid {}", theme.common.border_color) }) }); + let search_value = create_rw_signal(String::new()); + let search_all_options = store_value(gen_search_all_options()); + let search_options = create_memo(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(" ", "") + .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(" ", "") + .replace("-", ""); + match_value(search_value, label) + }) + .cloned() + .collect() + }) + }); view! { @@ -42,6 +85,7 @@ pub fn SiteHeader() -> impl IntoView { +