diff --git a/frontend/src/components/create_event_modal.rs b/frontend/src/components/create_event_modal.rs index cb4ba0f..dd5655f 100644 --- a/frontend/src/components/create_event_modal.rs +++ b/frontend/src/components/create_event_modal.rs @@ -1,5 +1,6 @@ use yew::prelude::*; use web_sys::{HtmlInputElement, HtmlTextAreaElement, HtmlSelectElement}; +use wasm_bindgen::JsCast; use chrono::{NaiveDate, NaiveTime, Local, TimeZone, Utc}; use crate::services::calendar_service::CalendarInfo; use crate::models::ical::VEvent; @@ -238,9 +239,26 @@ impl EventCreationData { } +#[derive(Clone, PartialEq)] +enum ModalTab { + BasicDetails, + Advanced, + People, + Categories, + Location, + Reminders, +} + +impl Default for ModalTab { + fn default() -> Self { + ModalTab::BasicDetails + } +} + #[function_component(CreateEventModal)] pub fn create_event_modal(props: &CreateEventModalProps) -> Html { let event_data = use_state(|| EventCreationData::default()); + let active_tab = use_state(|| ModalTab::default()); // Initialize with selected date or event data if provided use_effect_with((props.selected_date, props.event_to_edit.clone(), props.is_open, props.available_calendars.clone(), props.initial_start_time, props.initial_end_time), { @@ -554,6 +572,14 @@ pub fn create_event_modal(props: &CreateEventModalProps) -> Html { }) }; + // Tab switching callbacks + let switch_to_tab = { + let active_tab = active_tab.clone(); + Callback::from(move |tab: ModalTab| { + active_tab.set(tab); + }) + }; + let data = &*event_data; html! { @@ -568,273 +594,912 @@ pub fn create_event_modal(props: &CreateEventModalProps) -> Html {