2024-12-09 19:24:46 +03:00
|
|
|
/// Form component for adding a new item.
|
|
|
|
/// Handles user input for item name, description, and optional tags.
|
|
|
|
/// Calls `on_submit` when the form is submitted.
|
2024-12-06 14:45:14 +03:00
|
|
|
use leptos::*;
|
2024-12-09 19:20:18 +03:00
|
|
|
use leptos_dom::ev::SubmitEvent;
|
2024-12-06 14:45:14 +03:00
|
|
|
|
|
|
|
#[component]
|
2024-12-09 19:20:18 +03:00
|
|
|
pub fn ItemForm(on_submit: Box<dyn Fn(String, String, Vec<(String, String)>)>) -> impl IntoView {
|
2024-12-06 16:08:21 +03:00
|
|
|
let (name, set_name) = create_signal(String::new());
|
|
|
|
let (description, set_description) = create_signal(String::new());
|
2024-12-09 19:20:18 +03:00
|
|
|
let (tags, set_tags) = create_signal(Vec::<(String, String)>::new());
|
2024-12-06 14:45:14 +03:00
|
|
|
|
2024-12-09 19:24:46 +03:00
|
|
|
// Handle form submission.
|
2024-12-06 16:08:21 +03:00
|
|
|
let handle_submit = move |ev: SubmitEvent| {
|
2024-12-09 19:20:18 +03:00
|
|
|
ev.prevent_default();
|
2024-12-06 16:08:21 +03:00
|
|
|
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());
|
2024-12-06 14:45:14 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
view! {
|
|
|
|
<form on:submit=handle_submit>
|
2024-12-06 16:08:21 +03:00
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
placeholder="Name"
|
|
|
|
value={name.get()}
|
|
|
|
on:input=move |e| set_name.set(event_target_value(&e))
|
|
|
|
/>
|
|
|
|
<textarea
|
|
|
|
placeholder="Description"
|
|
|
|
value={description.get()}
|
|
|
|
on:input=move |e| set_description.set(event_target_value(&e))
|
|
|
|
/>
|
2024-12-06 14:45:14 +03:00
|
|
|
<button type="submit">{ "Add Item" }</button>
|
|
|
|
</form>
|
|
|
|
}
|
2024-12-09 19:20:18 +03:00
|
|
|
}
|