Toast message when scheduling a recipe

This commit is contained in:
Greg Burri 2025-02-05 15:44:48 +01:00
parent fbef990022
commit ccb1248da3
11 changed files with 168 additions and 66 deletions

View file

@ -1,24 +1,16 @@
use std::{cell::RefCell, future::Future, rc::Rc, str::FromStr};
use std::str::FromStr;
use chrono::Locale;
use common::{ron_api, utils::substitute};
use gloo::{
console::log,
events::EventListener,
net::http::Request,
utils::{document, window},
};
use common::{ron_api, utils::substitute_with_names};
use gloo::events::EventListener;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::spawn_local;
use web_sys::{
DragEvent, Element, HtmlDivElement, HtmlInputElement, HtmlSelectElement, HtmlTextAreaElement,
KeyboardEvent,
};
use web_sys::{Element, HtmlInputElement};
use crate::{
calendar, modal_dialog, request,
toast::{self, Level},
utils::{by_id, selector, selector_and_clone, SelectorExt},
utils::{get_locale, selector, SelectorExt},
};
pub fn setup_page(recipe_id: i64) -> Result<(), JsValue> {
@ -38,7 +30,7 @@ pub fn setup_page(recipe_id: i64) -> Result<(), JsValue> {
)
.await
{
if request::post::<(), _>(
if let Ok(result) = request::post::<ron_api::ScheduleRecipeResult, _>(
"calendar/schedule_recipe",
ron_api::ScheduleRecipe {
recipe_id,
@ -47,31 +39,37 @@ pub fn setup_page(recipe_id: i64) -> Result<(), JsValue> {
},
)
.await
.is_ok()
{
toast::show_element_and_initialize(
Level::Success,
"#hidden-templates .calendar-add-to-planner-success",
match result {
ron_api::ScheduleRecipeResult::Ok => Level::Success,
ron_api::ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
Level::Warning
}
},
match result {
ron_api::ScheduleRecipeResult::Ok => {
"#hidden-templates .calendar-add-to-planner-success"
}
ron_api::ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
"#hidden-templates .calendar-add-to-planner-already-exists"
}
},
|element| {
let title =
selector::<Element>("#recipe-view .recipe-title").inner_html();
let date_format =
selector::<Element>("#hidden-templates .calendar-date-format")
.inner_html();
let locale = {
let lang_and_territory = selector::<Element>("html")
.get_attribute("lang")
.unwrap()
.replace("-", "_");
Locale::from_str(&lang_and_territory).unwrap_or_default()
};
element.set_inner_html(&substitute(
element.set_inner_html(&substitute_with_names(
&element.inner_html(),
"{}",
&["{title}", "{date}"],
&[
&title,
&date.format_localized(&date_format, locale).to_string(),
&date
.format_localized(&date_format, get_locale())
.to_string(),
],
));
},

View file

@ -1,3 +1,6 @@
use std::str::FromStr;
use chrono::Locale;
use gloo::utils::document;
use wasm_bindgen::prelude::*;
use web_sys::Element;
@ -86,3 +89,11 @@ where
.dyn_into::<T>()
.unwrap()
}
pub fn get_locale() -> Locale {
let lang_and_territory = selector::<Element>("html")
.get_attribute("lang")
.unwrap()
.replace("-", "_");
Locale::from_str(&lang_and_territory).unwrap_or_default()
}