Implement last used calendar tracking with localStorage and database sync
- Add database migration for last_used_calendar field in user preferences - Update backend models and handlers to support last_used_calendar persistence - Modify frontend preferences service with update_last_used_calendar() method - Implement automatic saving of selected calendar on event creation - Add localStorage fallback for offline usage and immediate UI response - Update create event modal to default to last used calendar for new events - Clean up unused imports from event form components 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ use crate::components::event_form::*;
|
||||
use crate::components::EditAction;
|
||||
use crate::models::ical::VEvent;
|
||||
use crate::services::calendar_service::CalendarInfo;
|
||||
use gloo_storage::{LocalStorage, Storage};
|
||||
use yew::prelude::*;
|
||||
|
||||
#[derive(Properties, PartialEq)]
|
||||
@@ -57,7 +58,25 @@ pub fn create_event_modal(props: &CreateEventModalProps) -> Html {
|
||||
|
||||
// Set default calendar
|
||||
if data.selected_calendar.is_none() && !available_calendars.is_empty() {
|
||||
data.selected_calendar = Some(available_calendars[0].path.clone());
|
||||
// For new events, try to use the last used calendar
|
||||
if event_to_edit.is_none() {
|
||||
// Try to get last used calendar from localStorage
|
||||
if let Ok(last_used_calendar) = LocalStorage::get::<String>("last_used_calendar") {
|
||||
// Check if the last used calendar is still available
|
||||
if available_calendars.iter().any(|cal| cal.path == last_used_calendar) {
|
||||
data.selected_calendar = Some(last_used_calendar);
|
||||
} else {
|
||||
// Fall back to first available calendar
|
||||
data.selected_calendar = Some(available_calendars[0].path.clone());
|
||||
}
|
||||
} else {
|
||||
// No last used calendar, use first available
|
||||
data.selected_calendar = Some(available_calendars[0].path.clone());
|
||||
}
|
||||
} else {
|
||||
// For editing existing events, keep the current calendar as default
|
||||
data.selected_calendar = Some(available_calendars[0].path.clone());
|
||||
}
|
||||
}
|
||||
|
||||
// Set edit scope if provided
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use super::types::*;
|
||||
// Types are already imported from super::types::*
|
||||
use wasm_bindgen::JsCast;
|
||||
use web_sys::{HtmlInputElement, HtmlSelectElement};
|
||||
use web_sys::HtmlSelectElement;
|
||||
use yew::prelude::*;
|
||||
|
||||
#[function_component(AdvancedTab)]
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
use crate::models::ical::VEvent;
|
||||
use crate::services::calendar_service::CalendarInfo;
|
||||
use chrono::{Datelike, Local, NaiveDate, NaiveTime, TimeZone, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use chrono::{Local, NaiveDate, NaiveTime};
|
||||
use yew::prelude::*;
|
||||
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
|
||||
@@ -24,10 +24,6 @@ pub use create_calendar_modal::CreateCalendarModal;
|
||||
pub use create_event_modal::CreateEventModal;
|
||||
// Re-export event form types for backwards compatibility
|
||||
pub use event_form::EventCreationData;
|
||||
pub use event_form::{
|
||||
EventClass as EventFormClass, EventCreationData as EventFormData, EventStatus as EventFormStatus,
|
||||
RecurrenceType as EventFormRecurrenceType, ReminderType as EventFormReminderType,
|
||||
};
|
||||
pub use event_context_menu::{DeleteAction, EditAction, EventContextMenu};
|
||||
pub use event_modal::EventModal;
|
||||
pub use login::Login;
|
||||
|
||||
Reference in New Issue
Block a user