impulse_thaw/auto_complete/
auto_complete_option.rs1use super::AutoCompleteInjection;
2use crate::combobox::listbox::ListboxInjection;
3use leptos::prelude::*;
4use thaw_utils::class_list;
5
6#[component]
7pub fn AutoCompleteOption(
8 #[prop(optional, into)] class: MaybeProp<String>,
9 value: String,
11 children: Children,
12) -> impl IntoView {
13 let auto_complete = AutoCompleteInjection::expect_context();
14 let listbox = ListboxInjection::expect_context();
15 let is_selected = Memo::new({
16 let value = value.clone();
17 let auto_complete = auto_complete.clone();
18 move |_| auto_complete.is_selected(&value)
19 });
20 let id = uuid::Uuid::new_v4().to_string();
21 {
22 auto_complete.insert_option(id.clone(), value.clone());
23 let id = id.clone();
24 listbox.trigger();
25 let auto_complete = auto_complete.clone();
26 on_cleanup(move || {
27 auto_complete.remove_option(&id);
28 listbox.trigger();
29 });
30 }
31
32 view! {
33 <div
34 class=class_list!["thaw-auto-complete-option", class]
35 role="option"
36 id=id
37 aria-selected=move || if is_selected.get() { "true" } else { "false" }
38 on:click=move |_| auto_complete.select_option(value.clone())
39 >
40 {children()}
41 </div>
42 }
43}