From 57e434e4ff9fb52051e9cf132bb89126c7f2e30a Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Tue, 2 Sep 2025 10:55:39 -0400 Subject: [PATCH] Fix drag interaction issues in week view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix drag-to-create being blocked by existing events - Add creating-event CSS class that disables pointer events on existing events - Fix single clicks creating temporary event boxes - Add mouse button state check to prevent post-mouseup movement being treated as drag - Ensure temp event boxes only appear during actual drag operations (has_moved=true) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- frontend/src/components/week_view.rs | 22 ++++++++++++++++++++-- frontend/styles.css | 14 ++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/week_view.rs b/frontend/src/components/week_view.rs index 772356c..6a5f366 100644 --- a/frontend/src/components/week_view.rs +++ b/frontend/src/components/week_view.rs @@ -399,6 +399,13 @@ pub fn week_view(props: &WeekViewProps) -> Html { let drag_state = drag_state_clone.clone(); let time_increment = props.time_increment; Callback::from(move |e: MouseEvent| { + // Only process mouse move if a button is still pressed + if e.buttons() == 0 { + // No mouse button pressed, clear drag state + drag_state.set(None); + return; + } + if let Some(mut current_drag) = (*drag_state).clone() { if current_drag.is_dragging { // Use layer_y for consistent coordinate calculation @@ -568,9 +575,20 @@ pub fn week_view(props: &WeekViewProps) -> Html { }) }; + // Check if currently dragging to create an event + let is_creating_event = if let Some(drag) = (*drag_state).clone() { + matches!(drag.drag_type, DragType::CreateEvent) && drag.is_dragging + } else { + false + }; + html! {
Html { // Temporary event box during drag { if let Some(drag) = (*drag_state).clone() { - if drag.is_dragging && drag.start_date == *date { + if drag.is_dragging && drag.has_moved && drag.start_date == *date { match &drag.drag_type { DragType::CreateEvent => { let start_y = drag.start_y.min(drag.current_y); diff --git a/frontend/styles.css b/frontend/styles.css index c517ca3..879bbda 100644 --- a/frontend/styles.css +++ b/frontend/styles.css @@ -802,6 +802,20 @@ body { white-space: nowrap; } +/* Disable pointer events on existing events when creating a new event */ +.week-day-column.creating-event .week-event { + pointer-events: none; + opacity: 0.6; /* Visual feedback that events are not interactive */ +} + +.week-day-column.creating-event .week-event .event-content { + pointer-events: none; +} + +.week-day-column.creating-event .week-event .resize-handle { + pointer-events: none; +} + .week-event:hover { filter: brightness(1.1); z-index: 4;