Calendar is now displayed on home page and recipes can be scheduled without being logged
This commit is contained in:
parent
ccb1248da3
commit
37721ac3ea
22 changed files with 538 additions and 166 deletions
|
|
@ -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"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue