Calendar is now displayed on home page and recipes can be scheduled without being logged

This commit is contained in:
Greg Burri 2025-02-08 22:31:38 +01:00
parent ccb1248da3
commit 37721ac3ea
22 changed files with 538 additions and 166 deletions

View file

@ -8,50 +8,56 @@ use wasm_bindgen_futures::spawn_local;
use web_sys::{Element, HtmlInputElement};
use crate::{
calendar, modal_dialog, request,
calendar, modal_dialog,
recipe_scheduler::{RecipeScheduler, ScheduleRecipeResult},
toast::{self, Level},
utils::{get_locale, selector, SelectorExt},
};
pub fn setup_page(recipe_id: i64) -> Result<(), JsValue> {
pub fn setup_page(recipe_id: i64, is_user_logged: bool) -> Result<(), JsValue> {
let recipe_scheduler = RecipeScheduler::new(!is_user_logged);
let add_to_planner: Element = selector("#recipe-view .add-to-planner");
EventListener::new(&add_to_planner, "click", move |_event| {
spawn_local(async move {
if let Some((date, servings)) = modal_dialog::show_and_initialize_with_ok(
"#hidden-templates .date-and-servings",
async |element| calendar::setup(element.selector(".calendar")),
async |element| {
calendar::setup(
element.selector(".calendar"),
calendar::CalendarOptions {
can_select_date: true,
},
recipe_scheduler,
)
},
|element, calendar_state| {
let servings_element: HtmlInputElement = element.selector("#input-servings");
(
calendar_state.get_selected_date().date_naive(),
calendar_state.get_selected_date(),
servings_element.value_as_number() as u32,
)
},
)
.await
{
if let Ok(result) = request::post::<ron_api::ScheduleRecipeResult, _>(
"calendar/schedule_recipe",
ron_api::ScheduleRecipe {
recipe_id,
date,
servings,
},
)
.await
if let Ok(result) = recipe_scheduler
.shedule_recipe(recipe_id, date, servings)
.await
{
toast::show_element_and_initialize(
match result {
ron_api::ScheduleRecipeResult::Ok => Level::Success,
ron_api::ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
ScheduleRecipeResult::Ok => Level::Success,
ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
Level::Warning
}
},
match result {
ron_api::ScheduleRecipeResult::Ok => {
ScheduleRecipeResult::Ok => {
"#hidden-templates .calendar-add-to-planner-success"
}
ron_api::ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
ScheduleRecipeResult::RecipeAlreadyScheduledAtThisDate => {
"#hidden-templates .calendar-add-to-planner-already-exists"
}
},