Fix time snapping for event drag operations in week view
- Apply snapping to final event position after accounting for click offset - Ensure preview position matches snapped final position - Maintain time increment alignment during drag operations - Fix scope issue for time_increment in mouseup handler 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -204,6 +204,7 @@ pub fn week_view(props: &WeekViewProps) -> Html {
|
|||||||
let drag_state = drag_state_clone.clone();
|
let drag_state = drag_state_clone.clone();
|
||||||
let on_create_event = props.on_create_event.clone();
|
let on_create_event = props.on_create_event.clone();
|
||||||
let on_event_update = props.on_event_update.clone();
|
let on_event_update = props.on_event_update.clone();
|
||||||
|
let time_increment = props.time_increment;
|
||||||
Callback::from(move |_e: MouseEvent| {
|
Callback::from(move |_e: MouseEvent| {
|
||||||
if let Some(current_drag) = (*drag_state).clone() {
|
if let Some(current_drag) = (*drag_state).clone() {
|
||||||
if current_drag.is_dragging && current_drag.has_moved {
|
if current_drag.is_dragging && current_drag.has_moved {
|
||||||
@@ -236,7 +237,9 @@ pub fn week_view(props: &WeekViewProps) -> Html {
|
|||||||
},
|
},
|
||||||
DragType::MoveEvent(event) => {
|
DragType::MoveEvent(event) => {
|
||||||
// Calculate new start time based on drag position (accounting for click offset)
|
// Calculate new start time based on drag position (accounting for click offset)
|
||||||
let event_top_position = current_drag.current_y - current_drag.offset_y;
|
let unsnapped_position = current_drag.current_y - current_drag.offset_y;
|
||||||
|
// Snap the final position to maintain time increment alignment
|
||||||
|
let event_top_position = snap_to_increment(unsnapped_position, time_increment);
|
||||||
let new_start_time = pixels_to_time(event_top_position);
|
let new_start_time = pixels_to_time(event_top_position);
|
||||||
|
|
||||||
// Calculate duration from original event
|
// Calculate duration from original event
|
||||||
@@ -601,7 +604,9 @@ pub fn week_view(props: &WeekViewProps) -> Html {
|
|||||||
},
|
},
|
||||||
DragType::MoveEvent(event) => {
|
DragType::MoveEvent(event) => {
|
||||||
// Calculate the event's new position accounting for click offset
|
// Calculate the event's new position accounting for click offset
|
||||||
let preview_position = drag.current_y - drag.offset_y;
|
let unsnapped_position = drag.current_y - drag.offset_y;
|
||||||
|
// Snap the final position to maintain time increment alignment
|
||||||
|
let preview_position = snap_to_increment(unsnapped_position, props.time_increment);
|
||||||
let new_start_time = pixels_to_time(preview_position);
|
let new_start_time = pixels_to_time(preview_position);
|
||||||
let original_duration = if let Some(end) = event.end {
|
let original_duration = if let Some(end) = event.end {
|
||||||
end.signed_duration_since(event.start)
|
end.signed_duration_since(event.start)
|
||||||
|
|||||||
Reference in New Issue
Block a user