Added support for external calendars #14
| @@ -1419,7 +1419,51 @@ pub fn App() -> Html { | |||||||
|                         let external_calendar_modal_open = external_calendar_modal_open.clone(); |                         let external_calendar_modal_open = external_calendar_modal_open.clone(); | ||||||
|                         move |_| external_calendar_modal_open.set(false) |                         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> |             </div> | ||||||
|         </BrowserRouter> |         </BrowserRouter> | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ use crate::services::calendar_service::CalendarService; | |||||||
| pub struct ExternalCalendarModalProps { | pub struct ExternalCalendarModalProps { | ||||||
|     pub is_open: bool, |     pub is_open: bool, | ||||||
|     pub on_close: Callback<()>, |     pub on_close: Callback<()>, | ||||||
|     pub on_success: Callback<()>, |     pub on_success: Callback<i32>, // Pass the newly created calendar ID | ||||||
| } | } | ||||||
|  |  | ||||||
| #[function_component(ExternalCalendarModal)] | #[function_component(ExternalCalendarModal)] | ||||||
| @@ -75,9 +75,9 @@ pub fn external_calendar_modal(props: &ExternalCalendarModalProps) -> Html { | |||||||
|  |  | ||||||
|             wasm_bindgen_futures::spawn_local(async move { |             wasm_bindgen_futures::spawn_local(async move { | ||||||
|                 match CalendarService::create_external_calendar(&name, &url, &color).await { |                 match CalendarService::create_external_calendar(&name, &url, &color).await { | ||||||
|                     Ok(_) => { |                     Ok(new_calendar) => { | ||||||
|                         is_loading.set(false); |                         is_loading.set(false); | ||||||
|                         on_success.emit(()); |                         on_success.emit(new_calendar.id); | ||||||
|                         on_close.emit(()); |                         on_close.emit(()); | ||||||
|                     } |                     } | ||||||
|                     Err(e) => { |                     Err(e) => { | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| use crate::components::CalendarListItem; | use crate::components::CalendarListItem; | ||||||
| use crate::services::calendar_service::{UserInfo, ExternalCalendar}; | use crate::services::calendar_service::{UserInfo, ExternalCalendar}; | ||||||
| use chrono::{DateTime, Local, TimeZone, Utc}; |  | ||||||
| use web_sys::HtmlSelectElement; | use web_sys::HtmlSelectElement; | ||||||
| use yew::prelude::*; | use yew::prelude::*; | ||||||
| use yew_router::prelude::*; | use yew_router::prelude::*; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user