use super::*;
#[component]
pub fn euv_dropdown(node: VirtualNode<EuvDropdownProps>) -> VirtualNode {
let EuvDropdownProps {
open,
items,
on_select,
}: EuvDropdownProps = node.try_get_props().unwrap_or_default();
let children: VirtualNode = node.get_child_node();
let menu_items: Vec<VirtualNode> = items
.into_iter()
.map(|item: EuvDropdownItem| {
html! {
button {
class: c_euv_dropdown_item()
onclick: select_item(open, on_select.clone(), item.value)
{
item.label
}
}
}
})
.collect();
html! {
div {
class: c_euv_dropdown()
children
div {
class: c_euv_dropdown_menu()
class: if { open } {
c_euv_dropdown_menu_open()
} else {
c_euv_dropdown_menu_closed()
}
menu_items
}
}
}
}
fn select_item(
open: Signal<bool>,
on_select: Option<Rc<dyn Fn(&'static str)>>,
value: &'static str,
) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_| {
if let Some(callback) = &on_select {
callback(value);
}
open.set(false);
}))
}