use crate::services::confirm::ConfirmService; use crate::services::rest::RestService; use common::DeleteMilestone; use common::Milestone; use wasm_bindgen_futures::spawn_local; use yew::prelude::*; #[derive(Properties, Clone, PartialEq)] pub struct Props { pub milestone: Milestone, pub completed_achievements: usize, } #[function_component(MilestoneComponent)] pub fn milestone_component(props: &Props) -> Html { let confirm_service = use_memo(|_| ConfirmService, ()); let unfilled = props.milestone.goal - props.completed_achievements.min(props.milestone.goal); let filled = props.completed_achievements.min(props.milestone.goal); let unfilled_stars = std::iter::repeat(html! { }) .take(unfilled) .collect::(); let filled_stars = std::iter::repeat(html! { }) .take(filled) .collect::(); let uuid = props.milestone.uuid; let onclick_delete = Callback::from(move |_| { if !confirm_service.confirm("Are you sure you want to delete?") { return; } log::info!("Delete achievement confirmed."); spawn_local(async move { match RestService::delete_milestone(DeleteMilestone { uuid }).await { Ok(_response) => {} Err(_err) => {} } }); }); html! {
{format!("{} / {}", props.completed_achievements, props.milestone.goal)}
{filled_stars}
{unfilled_stars}