Add immediate refresh when new external calendars are created

When users add a new external calendar, events now appear instantly instead
of waiting for the next 5-minute auto-refresh cycle or manual refresh.

Changes:
- Modified ExternalCalendarModal to return newly created calendar ID
- Enhanced on_success callback to immediately fetch events for new calendar
- Added proper visibility checking and error handling
- Removed unused imports to clean up compilation warnings

User experience improvement:
- Before: Add calendar → wait 5 minutes → see events
- After: Add calendar → events appear immediately

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Connor Johnstone
2025-09-03 22:15:03 -04:00
parent 28b3946e86
commit 75d9149c76
3 changed files with 48 additions and 5 deletions

View File

@@ -1419,7 +1419,51 @@ pub fn App() -> Html {
let external_calendar_modal_open = external_calendar_modal_open.clone();
move |_| external_calendar_modal_open.set(false)
})}
on_success={refresh_external_calendars.clone()}
on_success={Callback::from({
let external_calendars = external_calendars.clone();
let external_calendar_events = external_calendar_events.clone();
move |new_calendar_id: i32| {
let external_calendars = external_calendars.clone();
let external_calendar_events = external_calendar_events.clone();
wasm_bindgen_futures::spawn_local(async move {
// First, refresh the calendar list to get the new calendar
match CalendarService::get_external_calendars().await {
Ok(calendars) => {
external_calendars.set(calendars.clone());
// Then immediately fetch events for the new calendar if it's visible
if let Some(new_calendar) = calendars.iter().find(|c| c.id == new_calendar_id) {
if new_calendar.is_visible {
match CalendarService::fetch_external_calendar_events(new_calendar_id).await {
Ok(mut events) => {
// Set calendar_path for color matching
for event in &mut events {
event.calendar_path = Some(format!("external_{}", new_calendar_id));
}
// Add the new calendar's events to existing events
let mut all_events = (*external_calendar_events).clone();
all_events.extend(events);
external_calendar_events.set(all_events);
}
Err(e) => {
web_sys::console::log_1(
&format!("Failed to fetch events for new calendar {}: {}", new_calendar_id, e).into(),
);
}
}
}
}
}
Err(err) => {
web_sys::console::log_1(
&format!("Failed to refresh calendars after creation: {}", err).into(),
);
}
}
});
}
})}
/>
</div>
</BrowserRouter>