use err ctx

This commit is contained in:
2023-06-22 21:30:00 +02:00
parent 5b49586da3
commit d39596da77
9 changed files with 70 additions and 31 deletions

View File

@@ -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! {
<Achievement number={n} achievement={a} />
<Achievement key={uuid} number={n} achievement={a} />
}
})
.collect::<Html>();
@@ -48,7 +51,10 @@ pub fn Admin() -> Html {
milestones.sort_by_key(|m| m.goal);
let milestones = milestones
.into_iter()
.map(|m| html! { <Milestone milestone={m}/> })
.map(|m| {
let uuid = m.uuid.to_string();
html! { <Milestone key={uuid} milestone={m}/> }
})
.collect::<Html>();
html! {
@@ -93,6 +99,7 @@ struct AchievementProps {
#[function_component]
fn Achievement(props: &AchievementProps) -> Html {
let err_ctx = Rc::new(use_context::<ErrorContext>());
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 {
</div>
// Timed reveal form
<form onsubmit={onsubmit_timed_reveal}>
<form onsubmit={onsubmit_timed_reveal} style="margin-left: 30px">
// Timed reveal: Enable checkbox
<label>
<span class="label-body" style="margin-right: 0.5rem; font-weight: bold"><i class="fas fa-clock" style="padding-right: 0.5em"/>{"Enable Timed Reveal:"}</span>
@@ -215,23 +236,27 @@ fn Achievement(props: &AchievementProps) -> Html {
</div>
</form>
<hr />
</div>
}
}
#[function_component]
fn Milestone(props: &MilestoneProps) -> Html {
let err_ctx = Rc::new(use_context::<ErrorContext>());
let uuid = props.milestone.uuid;
let onclick_delete = Callback::from(move |_| {
if !ConfirmService::confirm("Are you sure you want to delete?") {
return;
}
let err_ctx = Rc::clone(&err_ctx);
spawn_local(async move {
match RestService::delete_milestone(DeleteMilestone { uuid }).await {
Ok(_response) => {}
Err(_err) => {}
Err(err) => {
if let Some(err_ctx) = &*err_ctx {
err_ctx.dispatch(err.to_string());
}
}
}
});
});