diff --git a/src/app.rs b/src/app.rs
index 56c4c2a..5ca104e 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -1,7 +1,7 @@
use leptos::*;
use leptos_meta::*;
use crate::components::items_list::ItemsList;
-use crate::models::item::Item;
+use crate::models::item::{Item, ReviewWithRating};
use crate::nostr::NostrClient;
use tokio::sync::mpsc;
use uuid::Uuid;
@@ -28,28 +28,25 @@ pub fn App() -> impl IntoView {
}
});
- // Function to add a new item from the grid
- let add_item_from_grid = move || {
- let new_id = Uuid::new_v4().to_string();
-
- set_items.update(|items| {
- let item = Item {
- id: new_id.clone(),
- name: String::new(),
- description: String::new(),
- tags: vec![],
- reviews: vec![],
- wikidata_id: None,
- };
- items.push(item);
- });
+ // Handle adding a new item
+ let add_item = move || {
+ let new_item = Item {
+ id: Uuid::new_v4().to_string(),
+ name: "New Item".to_string(),
+ description: String::new(),
+ tags: vec![],
+ reviews: vec![],
+ wikidata_id: None,
+ };
+ set_items.update(|items| items.push(new_item));
};
-
+
view! {
{ "CompareWare" }
-
+
+
}
}
diff --git a/src/components/editable_cell.rs b/src/components/editable_cell.rs
new file mode 100644
index 0000000..a8f43ca
--- /dev/null
+++ b/src/components/editable_cell.rs
@@ -0,0 +1,23 @@
+use leptos::*;
+
+#[component]
+pub fn EditableCell(
+ value: String,
+ on_input: impl Fn(String) + 'static,
+) -> impl IntoView {
+ let (input_value, set_input_value) = create_signal(value.clone());
+
+ let handle_input = move |e: web_sys::Event| {
+ let new_value = event_target_value(&e);
+ set_input_value(new_value.clone());
+ on_input(new_value);
+ };
+
+ view! {
+
+ }
+}
diff --git a/src/components/items_list.rs b/src/components/items_list.rs
index 53940a6..c2a5da2 100644
--- a/src/components/items_list.rs
+++ b/src/components/items_list.rs
@@ -1,144 +1,182 @@
-use crate::models::item::Item;
-use gloo_net::http::Request;
-use leptos::logging::log;
+use crate::components::editable_cell::EditableCell;
+use crate::components::tag_editor::TagEditor;
use leptos::*;
use serde::Deserialize;
-use std::collections::HashMap;
-use wasm_bindgen_futures::spawn_local;
+use uuid::Uuid;
#[derive(Deserialize, Clone, Debug)]
-struct WikidataResponse {
- entities: HashMap,
+struct WikidataSuggestion {
+ id: String,
+ label: String,
+ description: Option,
}
-#[derive(Deserialize, Clone, Debug)]
-struct WikidataEntity {
- labels: Option>,
- descriptions: Option>,
-}
-
-#[derive(Deserialize, Clone, Debug)]
-struct WikidataLabel {
- value: String,
+#[derive(Clone, Debug)]
+struct Item {
+ id: String,
+ name: String,
+ description: String,
+ tags: Vec<(String, String)>,
+ wikidata_id: Option,
}
#[component]
-pub fn ItemsList(items: ReadSignal>, set_items: WriteSignal>, on_add_item: impl Fn() + 'static, ) -> impl IntoView {
- let (wikidata_data, set_wikidata_data) = create_signal(Vec::