Add configurable time increment toggle for event creation
- Add toggle button (15/30 minutes) in calendar header next to navigation arrows - Implement circular frosted styling consistent with nav buttons - Add configurable snapping for drag-to-create events in week view - Persist time increment setting across browser sessions using localStorage - Update snap function to accept configurable increment instead of hardcoded 15 minutes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -66,6 +66,20 @@ pub fn Calendar(props: &CalendarProps) -> Html { | ||||
|     let show_create_modal = use_state(|| false); | ||||
|     let create_event_data = use_state(|| None::<(chrono::NaiveDate, chrono::NaiveTime, chrono::NaiveTime)>); | ||||
|      | ||||
|     // State for time increment snapping (15 or 30 minutes) | ||||
|     let time_increment = use_state(|| { | ||||
|         // Try to load saved time increment from localStorage | ||||
|         if let Ok(saved_increment) = LocalStorage::get::<u32>("calendar_time_increment") { | ||||
|             if saved_increment == 15 || saved_increment == 30 { | ||||
|                 saved_increment | ||||
|             } else { | ||||
|                 15 | ||||
|             } | ||||
|         } else { | ||||
|             15 | ||||
|         } | ||||
|     }); | ||||
|      | ||||
|     // Handle view mode changes - adjust current_date format when switching between month/week | ||||
|     { | ||||
|         let current_date = current_date.clone(); | ||||
| @@ -152,6 +166,17 @@ pub fn Calendar(props: &CalendarProps) -> Html { | ||||
|         }) | ||||
|     }; | ||||
|      | ||||
|     // Handle time increment toggle | ||||
|     let on_time_increment_toggle = { | ||||
|         let time_increment = time_increment.clone(); | ||||
|         Callback::from(move |_: MouseEvent| { | ||||
|             let current = *time_increment; | ||||
|             let next = if current == 15 { 30 } else { 15 }; | ||||
|             time_increment.set(next); | ||||
|             let _ = LocalStorage::set("calendar_time_increment", next); | ||||
|         }) | ||||
|     }; | ||||
|      | ||||
|     // Handle drag-to-create event | ||||
|     let on_create_event = { | ||||
|         let show_create_modal = show_create_modal.clone(); | ||||
| @@ -172,6 +197,8 @@ pub fn Calendar(props: &CalendarProps) -> Html { | ||||
|                 on_prev={on_prev} | ||||
|                 on_next={on_next} | ||||
|                 on_today={on_today} | ||||
|                 time_increment={Some(*time_increment)} | ||||
|                 on_time_increment_toggle={Some(on_time_increment_toggle)} | ||||
|             /> | ||||
|              | ||||
|             { | ||||
| @@ -212,6 +239,7 @@ pub fn Calendar(props: &CalendarProps) -> Html { | ||||
|                             on_calendar_context_menu={props.on_calendar_context_menu.clone()} | ||||
|                             on_create_event={Some(on_create_event)} | ||||
|                             context_menus_open={props.context_menus_open} | ||||
|                             time_increment={*time_increment} | ||||
|                         /> | ||||
|                     }, | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Connor Johnstone
					Connor Johnstone