//! Prop detail page component. use leptos::prelude::*; use leptos_router::hooks::use_params_map; use crate::components::{Card, DetailGrid, DetailItem, PageHeader}; use crate::hooks::use_fetch_if; use crate::models::PropDetail; /// Prop detail page component. #[component] pub fn PropsDetailPage() -> impl IntoView { let params = use_params_map(); let prop_id = move || params.get().get("prop_id").unwrap_or_default(); let initial_prop_id = params.get_untracked().get("prop_id").unwrap_or_default(); let prop = use_fetch_if::( move || !prop_id().is_empty(), move || format!("/api/admin/props/{}", prop_id()), ); view! { "Back to Props" "Loading prop..."

}> {move || { prop.get().map(|maybe_prop| { match maybe_prop { Some(p) => view! { }.into_any(), None => view! {

"Prop not found or you don't have permission to view."

}.into_any() } }) }}
} } #[component] fn PropDetailView(prop: PropDetail) -> impl IntoView { let asset_url = format!("/assets/{}", prop.asset_path); let tags_display = if prop.tags.is_empty() { "None".to_string() } else { prop.tags.join(", ") }; view! {
prop.name.clone()

{prop.name.clone()}

{prop.slug.clone()}

{prop.description.clone().map(|desc| view! {

{desc}

})}
{prop.id.clone()} {tags_display} {prop.default_layer.clone().unwrap_or_else(|| "Not set".to_string())} {match prop.default_position { Some(pos) => { let labels = ["Top-Left", "Top-Center", "Top-Right", "Middle-Left", "Center", "Middle-Right", "Bottom-Left", "Bottom-Center", "Bottom-Right"]; labels.get(pos as usize).map(|s| s.to_string()) .unwrap_or_else(|| format!("{}", pos)) }, None => "Not set".to_string(), }} {format!("{}%", (prop.default_scale * 100.0) as i32)} {if prop.is_active { view! { "Active" }.into_any() } else { view! { "Inactive" }.into_any() }} {if prop.is_unique { "Yes" } else { "No" }} {if prop.is_transferable { "Yes" } else { "No" }} {if prop.is_portable { "Yes" } else { "No" }} {prop.available_from.clone().unwrap_or_else(|| "Always".to_string())} {prop.available_until.clone().unwrap_or_else(|| "No end date".to_string())} {prop.created_at.clone()} {prop.updated_at.clone()} } }