Add calendar selection dropdown and fix multi-calendar event display

- Add calendar selection dropdown to event creation modal
- Update EventCreationData to include selected_calendar field
- Pass available calendars from user info to modal component
- Initialize dropdown with first available calendar as default
- Fix backend to fetch events from ALL calendars, not just the first
- Update refresh_event to search across all calendars
- Events created in any calendar now properly display in UI

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Connor Johnstone
2025-08-29 08:45:40 -04:00
parent 7a53228ec8
commit e1578ed11c
3 changed files with 92 additions and 17 deletions

View File

@@ -39,11 +39,24 @@ pub async fn get_calendar_events(
return Ok(Json(vec![])); // No calendars found
}
// Fetch events from the first calendar
let calendar_path = &calendar_paths[0];
let events = client.fetch_events(calendar_path)
.await
.map_err(|e| ApiError::Internal(format!("Failed to fetch events: {}", e)))?;
// Fetch events from all calendars
let mut all_events = Vec::new();
for calendar_path in &calendar_paths {
match client.fetch_events(calendar_path).await {
Ok(mut events) => {
// Set calendar_path for each event to identify which calendar it belongs to
for event in &mut events {
event.calendar_path = Some(calendar_path.clone());
}
all_events.extend(events);
},
Err(e) => {
// Log the error but continue with other calendars
eprintln!("Failed to fetch events from calendar {}: {}", calendar_path, e);
}
}
}
let events = all_events;
// Filter events by month if specified
let filtered_events = if let (Some(year), Some(month)) = (params.year, params.month) {
@@ -80,11 +93,23 @@ pub async fn refresh_event(
return Ok(Json(None)); // No calendars found
}
// Fetch the specific event by UID from the first calendar
let calendar_path = &calendar_paths[0];
let event = client.fetch_event_by_uid(calendar_path, &uid)
.await
.map_err(|e| ApiError::Internal(format!("Failed to fetch event: {}", e)))?;
// Search for the specific event by UID across all calendars
let mut found_event = None;
for calendar_path in &calendar_paths {
match client.fetch_event_by_uid(calendar_path, &uid).await {
Ok(Some(mut event)) => {
event.calendar_path = Some(calendar_path.clone());
found_event = Some(event);
break;
},
Ok(None) => continue, // Event not found in this calendar
Err(e) => {
eprintln!("Failed to fetch event from calendar {}: {}", calendar_path, e);
continue;
}
}
}
let event = found_event;
Ok(Json(event))
}