diff --git a/src/components/week_view.rs b/src/components/week_view.rs index d240157..f5f97f2 100644 --- a/src/components/week_view.rs +++ b/src/components/week_view.rs @@ -2,7 +2,6 @@ use yew::prelude::*; use chrono::{Datelike, NaiveDate, Duration, Weekday, Local, Timelike, NaiveDateTime, NaiveTime}; use std::collections::HashMap; use web_sys::MouseEvent; -use wasm_bindgen::JsCast; use crate::services::calendar_service::{CalendarEvent, UserInfo}; #[derive(Properties, PartialEq)] @@ -126,11 +125,14 @@ pub fn week_view(props: &WeekViewProps) -> Html { let relative_y = e.layer_y() as f64; let relative_y = if relative_y > 0.0 { relative_y } else { e.offset_y() as f64 }; + // Snap to 15-minute increments + let snapped_y = snap_to_15_minutes(relative_y); + drag_state.set(Some(DragState { is_dragging: true, start_date: date_for_drag, - start_y: relative_y, - current_y: relative_y, + start_y: snapped_y, + current_y: snapped_y, })); e.prevent_default(); }) @@ -145,7 +147,10 @@ pub fn week_view(props: &WeekViewProps) -> Html { let relative_y = e.layer_y() as f64; let relative_y = if relative_y > 0.0 { relative_y } else { e.offset_y() as f64 }; - current_drag.current_y = relative_y; + // Snap to 15-minute increments + let snapped_y = snap_to_15_minutes(relative_y); + + current_drag.current_y = snapped_y; drag_state.set(Some(current_drag)); } } @@ -323,16 +328,19 @@ pub fn week_view(props: &WeekViewProps) -> Html { if let Some(drag) = (*drag_state).clone() { if drag.is_dragging && drag.start_date == *date { let start_y = drag.start_y.min(drag.current_y); + let end_y = drag.start_y.max(drag.current_y); let height = (drag.current_y - drag.start_y).abs().max(20.0); - // Debug logging + // Convert pixels to times for display + let start_time = pixels_to_time(start_y); + let end_time = pixels_to_time(end_y); html! {