use leptos::*; use leptos_dom::ev::SubmitEvent; #[component] pub fn ItemForm(on_submit: Box)>) -> impl IntoView { let (name, set_name) = create_signal(String::new()); let (description, set_description) = create_signal(String::new()); let (tags, set_tags) = create_signal(Vec::<(String, String)>::new()); let (tag_key, set_tag_key) = create_signal(String::new()); let (tag_value, set_tag_value) = create_signal(String::new()); // Handle adding a new tag let add_tag = move |_| { if !tag_key.get().is_empty() && !tag_value.get().is_empty() { set_tags.update(|t| t.push((tag_key.get(), tag_value.get()))); set_tag_key.set(String::new()); set_tag_value.set(String::new()); } }; // Handle form submission. let handle_submit = move |ev: SubmitEvent| { ev.prevent_default(); on_submit(name.get(), description.get(), tags.get().clone()); // Reset values after submission set_name.update(|n| *n = String::new()); set_description.update(|d| *d = String::new()); set_tags.update(|t| t.clear()); }; view! {