use leptos::*; use crate::search::search; use crate::song::Song; use crate::models::Album; use crate::models::Artist; use crate::models::Song; use crate::util::state::GlobalState; use leptos::ev::*; use leptos::leptos_dom::*; use leptos_icons::*; const OPTIONS_BTN_SIZE: &str = "2.5rem"; #[component] pub fn Search() -> impl IntoView { let status = GlobalState::play_status(); let search_query = create_rw_signal(String::new()); let search_results = create_rw_signal((Vec::<(Album, f32)>::new(), Vec::<(Artist, f32)>::new(), Vec::<(Song, f32)>::new())); let search_limit = 10; let on_input = move |e: Event| { search_query.set(event_target_value(&e)); log!("Search Query: {:?}", search_query.get_untracked()); if search_query.get_untracked().len() < 3 { search_results.set((Vec::<(Album, f32)>::new(), Vec::<(Artist, f32)>::new(), Vec::<(Song, f32)>::new())); return; } spawn_local(async move { log!("Searching for: {:?}", search_query.get_untracked()); let results = search(search_query.get_untracked(), search_limit).await; match results { Ok((albums, artists, songs)) => { search_results.set((albums, artists, songs)); } Err(err) => { log!("Error searching: {:?}", err); } } }); }; let on_disabled = move |_e: FocusEvent| { log!("Search Bar Disabled"); }; let on_enabled = move |_e: FocusEvent| { status.update(|status| { status.search_active = true; }); log!("Search Bar Enabled"); }; let prevent_focus = move |e: MouseEvent| { e.prevent_default(); }; view! {