feat(item_list): normalize property labels to display the right labels on the item list

This commit is contained in:
ryan 2025-02-04 14:29:11 +03:00
parent 94ed4c46b9
commit 4bfd47d8c4

View file

@ -333,11 +333,14 @@ pub fn ItemsList(
if let Some(bindings) = data["results"]["bindings"].as_array() { if let Some(bindings) = data["results"]["bindings"].as_array() {
for binding in bindings { for binding in bindings {
let prop_label = binding["propLabel"]["value"].as_str().unwrap_or("").to_string(); let prop_label = binding["propLabel"]["value"].as_str().unwrap_or("").to_string();
let prop_label = prop_label.replace("http://www.wikidata.org/prop/", "");
let value_label = binding["valueLabel"]["value"].as_str().unwrap_or("").to_string(); let value_label = binding["valueLabel"]["value"].as_str().unwrap_or("").to_string();
result.insert(prop_label, value_label); result.insert(prop_label, value_label);
log!("result: {:?}", result);
} }
} }
result result
} else { } else {
HashMap::new() HashMap::new()
} }
@ -432,19 +435,22 @@ pub fn ItemsList(
// Add a new custom property // Add a new custom property
let add_property = move |property: String| { let add_property = move |property: String| {
// Normalize the property ID
let normalized_property = property.replace("http://www.wikidata.org/prop/", "");
set_custom_properties.update(|props| { set_custom_properties.update(|props| {
if !props.contains(&property) && !property.is_empty() { if !props.contains(&normalized_property) && !normalized_property.is_empty() {
props.push(property.clone()); props.push(normalized_property.clone());
//update the selected_properties state when a new property is added //update the selected_properties state when a new property is added
set_selected_properties.update(|selected| { set_selected_properties.update(|selected| {
selected.insert(property.clone(), true); selected.insert(normalized_property.clone(), true);
}); });
// Ensure the grid updates reactively // Ensure the grid updates reactively
set_items.update(|items| { set_items.update(|items| {
for item in items { for item in items {
item.custom_properties.entry(property.clone()).or_insert_with(|| "".to_string()); item.custom_properties.entry(normalized_property.clone()).or_insert_with(|| "".to_string());
// Save the updated item to the database // Save the updated item to the database
let item_clone = item.clone(); let item_clone = item.clone();
@ -455,12 +461,14 @@ pub fn ItemsList(
}); });
// Fetch the property label // Fetch the property label
let property_id = property.clone(); let property_id = normalized_property.clone();
spawn_local(async move { spawn_local(async move {
let labels = fetch_property_labels(vec![property_id.clone()]).await; let labels = fetch_property_labels(vec![property_id.clone()]).await;
log!("Fetched labels: {:?}", labels);
set_property_labels.update(|labels_map| { set_property_labels.update(|labels_map| {
if let Some(label) = labels.get(&property_id) { for (key, value) in labels {
labels_map.insert(property_id, label.clone()); log!("Inserting label: {} -> {}", key, value);
labels_map.insert(key, value);
} }
}); });
}); });
@ -721,9 +729,10 @@ pub fn ItemsList(
{move || { {move || {
let custom_props = custom_properties.get().clone(); let custom_props = custom_properties.get().clone();
custom_props.into_iter().map(move |property| { custom_props.into_iter().map(move |property| {
let property_clone = property.clone(); let normalized_property = property.replace("http://www.wikidata.org/prop/", "");
let property_label = property_labels.get().get(&property_clone).cloned().unwrap_or_else(|| property_clone.clone()); let property_label = property_labels.get().get(&normalized_property).cloned().unwrap_or_else(|| normalized_property.clone());
let property_clone_for_button = property_clone.clone(); log!("Rendering property: {} -> {}", normalized_property, property_label);
let property_clone_for_button = normalized_property.clone();
view! { view! {
<tr> <tr>
<td> <td>
@ -745,7 +754,7 @@ pub fn ItemsList(
}>{ "Delete" }</button> }>{ "Delete" }</button>
</td> </td>
{move || { {move || {
let property_clone_for_cells = property_clone.clone(); let property_clone_for_cells = normalized_property.clone();
items.get().iter().enumerate().map(move |(index, item)| { items.get().iter().enumerate().map(move |(index, item)| {
let property_clone_for_closure = property_clone_for_cells.clone(); let property_clone_for_closure = property_clone_for_cells.clone();
view! { view! {