build(files): remove unused item_form.rs and wikidata_lookup.rs files
This commit is contained in:
parent
4bfd47d8c4
commit
443c7a7e0c
3 changed files with 0 additions and 123 deletions
|
@ -1,74 +0,0 @@
|
|||
use leptos::*;
|
||||
use leptos_dom::ev::SubmitEvent;
|
||||
use leptos::logging::log;
|
||||
|
||||
#[component]
|
||||
pub fn ItemForm(on_submit: Box<dyn Fn(String, String, Vec<(String, String)>, String, u8)>) -> 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());
|
||||
let (review, set_review) = create_signal(String::new());
|
||||
let (rating, set_rating) = create_signal(5u8); // Default rating to 5
|
||||
|
||||
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());
|
||||
}
|
||||
};
|
||||
|
||||
let handle_submit = move |ev: SubmitEvent| {
|
||||
ev.prevent_default();
|
||||
|
||||
// Validation
|
||||
if name.get().is_empty() || description.get().is_empty() || rating.get() < 1 || rating.get() > 5 {
|
||||
log!("Validation failed: Check required fields.");
|
||||
return;
|
||||
}
|
||||
|
||||
on_submit(
|
||||
name.get(),
|
||||
description.get(),
|
||||
tags.get().clone(),
|
||||
review.get(),
|
||||
rating.get(),
|
||||
);
|
||||
|
||||
// Reset values
|
||||
set_name.set(String::new());
|
||||
set_description.set(String::new());
|
||||
set_tags.set(vec![]);
|
||||
set_review.set(String::new());
|
||||
set_rating.set(5);
|
||||
};
|
||||
|
||||
view! {
|
||||
<form on:submit=handle_submit>
|
||||
<input type="text" placeholder="Name" on:input=move |e| set_name.set(event_target_value(&e)) />
|
||||
<textarea placeholder="Description" on:input=move |e| set_description.set(event_target_value(&e)) />
|
||||
<h3>{ "Add Tags" }</h3>
|
||||
<input type="text" placeholder="Key" on:input=move |e| set_tag_key.set(event_target_value(&e)) />
|
||||
<input type="text" placeholder="Value" on:input=move |e| set_tag_value.set(event_target_value(&e)) />
|
||||
<button type="button" on:click=add_tag>{ "Add Tag" }</button>
|
||||
<ul>
|
||||
{tags.get().iter().map(|(key, value)| view! {
|
||||
<li>{ format!("{}: {}", key, value) }</li>
|
||||
}).collect::<Vec<_>>() }
|
||||
</ul>
|
||||
<h3>{ "Write a Review" }</h3>
|
||||
<textarea placeholder="Review" on:input=move |e| set_review.set(event_target_value(&e)) />
|
||||
<h3>{ "Rating (1-5)" }</h3>
|
||||
<input
|
||||
type="number"
|
||||
min="1"
|
||||
max="5"
|
||||
value={rating.get()}
|
||||
on:input=move |e| set_rating.set(event_target_value(&e).parse::<u8>().unwrap_or(5))
|
||||
/>
|
||||
<button type="submit">{ "Add Item" }</button>
|
||||
</form>
|
||||
}
|
||||
}
|
|
@ -1,3 +1,2 @@
|
|||
pub mod item_form;
|
||||
pub mod items_list;
|
||||
pub mod editable_cell;
|
|
@ -1,48 +0,0 @@
|
|||
use leptos::*;
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Deserialize, Clone, Debug)]
|
||||
struct WikidataResult {
|
||||
id: String,
|
||||
label: String,
|
||||
description: Option<String>,
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn WikidataLookup(
|
||||
query: String,
|
||||
on_select: impl Fn(WikidataResult) + 'static,
|
||||
) -> impl IntoView {
|
||||
let (suggestions, set_suggestions) = create_signal(Vec::new());
|
||||
|
||||
let fetch_suggestions = move |query: String| {
|
||||
spawn_local(async move {
|
||||
if query.is_empty() {
|
||||
set_suggestions(Vec::new());
|
||||
return;
|
||||
}
|
||||
let url = format!("https://www.wikidata.org/w/api.php?action=wbsearchentities&search={}&language=en&limit=5&format=json&origin=*", query);
|
||||
if let Ok(response) = reqwest::get(&url).await {
|
||||
if let Ok(data) = response.json::<WikidataResponse>().await {
|
||||
set_suggestions(data.search);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
create_effect(move || {
|
||||
fetch_suggestions(query.clone());
|
||||
});
|
||||
|
||||
view! {
|
||||
<ul>
|
||||
{suggestions.get().iter().map(|suggestion| {
|
||||
view! {
|
||||
<li on:click=move |_| on_select(suggestion.clone())>
|
||||
{format!("{} - {}", suggestion.label, suggestion.description.clone().unwrap_or_default())}
|
||||
</li>
|
||||
}
|
||||
}).collect::<Vec<_>>()}
|
||||
</ul>
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue