use err ctx
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user