Add right-click context menu to external calendars for deletion

Users can now right-click on external calendar items in the sidebar
to access a context menu with a "Delete Calendar" option. The delete
action removes the calendar from both the server and local state,
including all associated events from the calendar display.

🤖 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 19:24:02 -04:00
parent f88c238b0a
commit 7461e8b123
2 changed files with 100 additions and 2 deletions

View File

@@ -1029,6 +1029,39 @@ pub fn App() -> Html {
});
}
})}
on_external_calendar_delete={Callback::from({
let external_calendars = external_calendars.clone();
let external_calendar_events = external_calendar_events.clone();
move |id: i32| {
let external_calendars = external_calendars.clone();
let external_calendar_events = external_calendar_events.clone();
wasm_bindgen_futures::spawn_local(async move {
// Delete the external calendar from the server
if let Err(err) = CalendarService::delete_external_calendar(id).await {
web_sys::console::log_1(
&format!("Failed to delete external calendar: {}", err).into(),
);
return;
}
// Remove calendar from local state
let mut calendars = (*external_calendars).clone();
calendars.retain(|c| c.id != id);
external_calendars.set(calendars.clone());
// Remove events from this calendar
let mut events = (*external_calendar_events).clone();
events.retain(|e| {
if let Some(ref calendar_path) = e.calendar_path {
calendar_path != &format!("external_{}", id)
} else {
true
}
});
external_calendar_events.set(events);
});
}
})}
color_picker_open={(*color_picker_open).clone()}
on_color_change={on_color_change}
on_color_picker_toggle={on_color_picker_toggle}