Fix context menu click-outside behavior to prevent underlying actions
When a context menu is open, clicking outside should only close the menu without triggering underlying actions (like drag-to-create in week view). Implementation: - Enhanced global click handler to prevent default actions when menus are open - Added context menu state propagation through component hierarchy - Modified interactive components to check context menu state before acting - Provides double protection at both global and component levels 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -26,6 +26,8 @@ pub struct RouteHandlerProps { | ||||
|     pub view: ViewMode, | ||||
|     #[prop_or_default] | ||||
|     pub on_create_event_request: Option<Callback<crate::components::EventCreationData>>, | ||||
|     #[prop_or_default] | ||||
|     pub context_menus_open: bool, | ||||
| } | ||||
|  | ||||
| #[function_component(RouteHandler)] | ||||
| @@ -37,6 +39,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|     let on_calendar_context_menu = props.on_calendar_context_menu.clone(); | ||||
|     let view = props.view.clone(); | ||||
|     let on_create_event_request = props.on_create_event_request.clone(); | ||||
|     let context_menus_open = props.context_menus_open; | ||||
|      | ||||
|     html! { | ||||
|         <Switch<Route> render={move |route| { | ||||
| @@ -47,6 +50,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|             let on_calendar_context_menu = on_calendar_context_menu.clone(); | ||||
|             let view = view.clone(); | ||||
|             let on_create_event_request = on_create_event_request.clone(); | ||||
|             let context_menus_open = context_menus_open; | ||||
|              | ||||
|             match route { | ||||
|                 Route::Home => { | ||||
| @@ -72,6 +76,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|                                 on_calendar_context_menu={on_calendar_context_menu} | ||||
|                                 view={view} | ||||
|                                 on_create_event_request={on_create_event_request} | ||||
|                                 context_menus_open={context_menus_open} | ||||
|                             />  | ||||
|                         } | ||||
|                     } else { | ||||
| @@ -94,6 +99,8 @@ pub struct CalendarViewProps { | ||||
|     pub view: ViewMode, | ||||
|     #[prop_or_default] | ||||
|     pub on_create_event_request: Option<Callback<crate::components::EventCreationData>>, | ||||
|     #[prop_or_default] | ||||
|     pub context_menus_open: bool, | ||||
| } | ||||
|  | ||||
| use gloo_storage::{LocalStorage, Storage}; | ||||
| @@ -254,6 +261,7 @@ pub fn calendar_view(props: &CalendarViewProps) -> Html { | ||||
|                                 on_calendar_context_menu={props.on_calendar_context_menu.clone()} | ||||
|                                 view={props.view.clone()} | ||||
|                                 on_create_event_request={props.on_create_event_request.clone()} | ||||
|                                 context_menus_open={props.context_menus_open} | ||||
|                             /> | ||||
|                         </div> | ||||
|                     } | ||||
| @@ -268,6 +276,7 @@ pub fn calendar_view(props: &CalendarViewProps) -> Html { | ||||
|                             on_calendar_context_menu={props.on_calendar_context_menu.clone()} | ||||
|                             view={props.view.clone()} | ||||
|                             on_create_event_request={props.on_create_event_request.clone()} | ||||
|                             context_menus_open={props.context_menus_open} | ||||
|                         /> | ||||
|                     } | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Connor Johnstone
					Connor Johnstone