From d39596da77a7e7e4a1797c2631488d53758fe86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asger=20Juul=20Brunsh=C3=B8j?= Date: Thu, 22 Jun 2023 21:30:00 +0200 Subject: [PATCH] use err ctx --- crates/frontend/src/components/achievement.rs | 12 +++++- crates/frontend/src/components/admin.rs | 41 +++++++++++++++---- .../src/components/create_achievement.rs | 12 +++--- .../src/components/create_milestone.rs | 14 +++---- .../src/components/error/error_component.rs | 2 + .../src/components/error/error_provider.rs | 7 ++++ crates/frontend/src/components/root.rs | 9 ++-- crates/frontend/src/services/rest.rs | 2 +- .../frontend/src/util/group_achievements.rs | 2 +- 9 files changed, 70 insertions(+), 31 deletions(-) diff --git a/crates/frontend/src/components/achievement.rs b/crates/frontend/src/components/achievement.rs index a89d15c..25e0642 100644 --- a/crates/frontend/src/components/achievement.rs +++ b/crates/frontend/src/components/achievement.rs @@ -1,10 +1,13 @@ +use crate::components::error::error_provider::ErrorContext; use crate::services::rest::RestService; use common::Achievement; use common::ToggleAchievement; +use std::rc::Rc; use wasm_bindgen_futures::spawn_local; use yew::classes; use yew::function_component; use yew::html; +use yew::use_context; use yew::Callback; use yew::Html; use yew::Properties; @@ -17,6 +20,8 @@ pub struct Props { #[function_component] pub fn AchievementComponent(props: &Props) -> Html { + let err_ctx = Rc::new(use_context::()); + let Achievement { goal, completed, @@ -28,10 +33,15 @@ pub fn AchievementComponent(props: &Props) -> Html { let onclick_toggle = Callback::from(move |_| { log::info!("button click, toggling achievement"); + let err_ctx = Rc::clone(&err_ctx); spawn_local(async move { match RestService::toggle_achievement(ToggleAchievement { uuid }).await { Ok(_response) => {} - Err(_err) => {} + Err(err) => { + if let Some(err_ctx) = &*err_ctx { + err_ctx.dispatch(err.to_string()); + } + } } }); }); diff --git a/crates/frontend/src/components/admin.rs b/crates/frontend/src/components/admin.rs index a4458bf..3a778f8 100644 --- a/crates/frontend/src/components/admin.rs +++ b/crates/frontend/src/components/admin.rs @@ -1,8 +1,10 @@ +use crate::components::error::error_provider::ErrorContext; use crate::services::confirm::ConfirmService; use crate::services::rest::RestService; use common::DeleteAchievement; use common::DeleteMilestone; use common::UpdateAchievementTimeOfReveal; +use std::rc::Rc; use wasm_bindgen::JsCast; use wasm_bindgen_futures::spawn_local; use yew::function_component; @@ -27,8 +29,9 @@ pub fn Admin() -> Html { .enumerate() .map(|(idx, a)| (idx + 1, a)) .map(|(n, a)| { + let uuid = a.uuid.to_string(); html! { - + } }) .collect::(); @@ -48,7 +51,10 @@ pub fn Admin() -> Html { milestones.sort_by_key(|m| m.goal); let milestones = milestones .into_iter() - .map(|m| html! { }) + .map(|m| { + let uuid = m.uuid.to_string(); + html! { } + }) .collect::(); html! { @@ -93,6 +99,7 @@ struct AchievementProps { #[function_component] fn Achievement(props: &AchievementProps) -> Html { + let err_ctx = Rc::new(use_context::()); let achievement = &props.achievement; let uuid = achievement.uuid; @@ -108,6 +115,7 @@ fn Achievement(props: &AchievementProps) -> Html { let awaiting_response = awaiting_response.clone(); let timed_reveal_enabled = timed_reveal_enabled.clone(); let input_time = input_time.clone(); + let err_ctx = Rc::clone(&err_ctx); Callback::from(move |e: web_sys::SubmitEvent| { e.prevent_default(); @@ -129,8 +137,16 @@ fn Achievement(props: &AchievementProps) -> Html { }; awaiting_response.set(true); let awaiting_response = awaiting_response.clone(); + let err_ctx = Rc::clone(&err_ctx); spawn_local(async move { - let res = RestService::update_time_of_reveal(payload).await; + match RestService::update_time_of_reveal(payload).await { + Ok(_response) => {} + Err(err) => { + if let Some(err_ctx) = &*err_ctx { + err_ctx.dispatch(err.to_string()); + } + } + } awaiting_response.set(false); }); }) @@ -163,10 +179,15 @@ fn Achievement(props: &AchievementProps) -> Html { } log::info!("Delete achievement confirmed."); + let err_ctx = Rc::clone(&err_ctx); spawn_local(async move { match RestService::delete_achievement(DeleteAchievement { uuid }).await { Ok(_response) => {} - Err(_err) => {} + Err(err) => { + if let Some(err_ctx) = &*err_ctx { + err_ctx.dispatch(err.to_string()); + } + } } }); }); @@ -192,7 +213,7 @@ fn Achievement(props: &AchievementProps) -> Html { // Timed reveal form -
+ // Timed reveal: Enable checkbox