feat(tags): remove tags section

This commit is contained in:
ryan 2025-01-13 19:24:44 +03:00
parent f667327616
commit d40dfd0e86
4 changed files with 4 additions and 96 deletions

View file

@ -1,13 +1,12 @@
use crate::components::editable_cell::EditableCell;
use crate::components::editable_cell::InputType;
use crate::components::tag_editor::TagEditor;
use leptos::*;
use serde::Deserialize;
use uuid::Uuid;
use leptos::logging::log;
use crate::models::item::Item;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::sync::Arc;
use wasm_bindgen::JsCast;
#[derive(Deserialize, Clone, Debug)]
@ -36,7 +35,6 @@ pub fn ItemsList(
id: Uuid::new_v4().to_string(),
name: String::new(),
description: String::new(),
tags: vec![],
reviews: vec![],
wikidata_id: None,
custom_properties: HashMap::new(),
@ -100,7 +98,6 @@ pub fn ItemsList(
id: Uuid::new_v4().to_string(),
name: String::new(),
description: String::new(),
tags: vec![],
reviews: vec![],
wikidata_id: None,
custom_properties: HashMap::new(),
@ -118,24 +115,6 @@ pub fn ItemsList(
});
};
// Add a new tag to an item
let add_tag = move |index: usize, key: String, value: String| {
set_items.update(|items| {
if let Some(item) = items.get_mut(index) {
item.tags.push((key, value));
}
});
};
// Remove a tag from an item
let remove_tag = move |item_index: usize, tag_index: usize| {
set_items.update(|items| {
if let Some(item) = items.get_mut(item_index) {
item.tags.remove(tag_index);
}
});
};
// Remove an item
let remove_item = move |index: usize| {
set_items.update(|items| {
@ -144,7 +123,7 @@ pub fn ItemsList(
};
// List of properties to display as rows
let properties = vec!["Name", "Description", "Tags", "Actions"];
let properties = vec!["Name", "Description", "Actions"];
view! {
<div>
@ -222,20 +201,12 @@ pub fn ItemsList(
let label_for_display = suggestion.label.clone();
let description_for_click = suggestion.description.clone().unwrap_or_default();
let description_for_display = suggestion.description.clone().unwrap_or_default();
let id = suggestion.id.clone();
// Tags for the item
let tags = vec![
("source".to_string(), "wikidata".to_string()),
("wikidata_id".to_string(), id.clone()),
];
let id = suggestion.id.clone();
view! {
<li class="editable-cell-suggestions-li" on:click=move |_| {
set_items.update(|items| {
if let Some(item) = items.get_mut(index) {
item.description = description_for_click.clone();
item.tags.extend(tags.clone());
item.wikidata_id = Some(id.clone());
item.name = label_for_click.clone();
}
@ -276,13 +247,6 @@ pub fn ItemsList(
input_type=InputType::TextArea
/>
}.into_view(),
"Tags" => view! {
<TagEditor
tags=item.tags.clone()
on_add=move |key, value| add_tag(index, key, value)
on_remove=Arc::new(Mutex::new(move |tag_index: usize| remove_tag(index, tag_index)))
/>
}.into_view(),
"Actions" => view! {
<button on:click=move |_| remove_item(index)>{ "Delete" }</button>
}.into_view(),

View file

@ -1,4 +1,3 @@
pub mod item_form;
pub mod items_list;
pub mod editable_cell;
pub mod tag_editor;
pub mod editable_cell;

View file

@ -1,54 +0,0 @@
use leptos::*;
use std::sync::{Arc, Mutex};
#[component]
pub fn TagEditor(
tags: Vec<(String, String)>,
on_add: impl Fn(String, String) + 'static,
on_remove: Arc<Mutex<dyn FnMut(usize) + Send + Sync>>,
) -> impl IntoView {
let (key, set_key) = create_signal(String::new());
let (value, set_value) = create_signal(String::new());
let add_tag = move |_| {
if !key.get().is_empty() && !value.get().is_empty() {
on_add(key.get(), value.get());
set_key.set(String::new());
set_value.set(String::new());
}
};
view! {
<div>
<ul>
{tags.iter().enumerate().map(|(index, (k, v))| {
let on_remove = on_remove.clone();
view! {
<li>
{format!("{}: {}", k, v)}
<button on:click=move |_| {
let mut on_remove = on_remove.lock().unwrap();
on_remove(index);
}>
{ "Remove" }
</button>
</li>
}
}).collect::<Vec<_>>()}
</ul>
<input
placeholder="Key"
value={key.get()}
on:input=move |e| set_key.set(event_target_value(&e))
/>
<input
placeholder="Value"
value={value.get()}
on:input=move |e| set_value.set(event_target_value(&e))
/>
<button on:click=add_tag>{ "Add Tag" }</button>
</div>
}
}

View file

@ -7,7 +7,6 @@ pub struct Item {
pub id: String,
pub name: String,
pub description: String,
pub tags: Vec<(String, String)>,
pub reviews: Vec<ReviewWithRating>,
pub wikidata_id: Option<String>,
pub custom_properties: HashMap<String, String>,