diff --git a/src/app.rs b/src/app.rs index 43b3293..3324a4c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -253,8 +253,7 @@ impl Tasks { } } DialogPage::Calendar(date) => { - self.details - .update(details::Message::SetDueDate(date.selected)); + self.update_details(tasks, details::Message::SetDueDate(date.selected)); } DialogPage::Export(content) => { let Ok(mut clipboard) = ClipboardContext::new() else { diff --git a/src/app/dialog.rs b/src/app/dialog.rs index acfb426..59193e9 100644 --- a/src/app/dialog.rs +++ b/src/app/dialog.rs @@ -152,6 +152,7 @@ impl DialogPage { dialog } DialogPage::Calendar(date) => { + let date_clone = date.clone(); let dialog = widget::dialog() .title(fl!("select-date")) .primary_action(widget::button::suggested(fl!("ok")).on_press_maybe(Some( @@ -161,6 +162,7 @@ impl DialogPage { Message::Application(ApplicationAction::Dialog(DialogAction::Close)), )) .control( + widget::container(widget::calendar( date, |selected_date| { @@ -171,8 +173,22 @@ impl DialogPage { ))), )) }, - || Message::Application(ApplicationAction::Dialog(DialogAction::None)), - || Message::Application(ApplicationAction::Dialog(DialogAction::None)), + move || { + // Previous month - update visible month, keep selected date + let mut new_model = date_clone.clone(); + new_model.show_prev_month(); + Message::Application(ApplicationAction::Dialog( + DialogAction::Update(DialogPage::Calendar(new_model)) + )) + }, + move || { + // Next month - update visible month, keep selected date + let mut new_model = date_clone.clone(); + new_model.show_next_month(); + Message::Application(ApplicationAction::Dialog( + DialogAction::Update(DialogPage::Calendar(new_model)) + )) + }, chrono::Weekday::Mon, )) .width(Length::Fill)