From 1d04f0ce0ab26abedaf2a4c2406b2ade7689c573 Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Mon, 13 Oct 2025 22:17:17 +0200 Subject: [PATCH] Improves drag and drop conversion behavior Resets scroll state and stops edge scrolling when a drag event converts between all-day and timed events, preventing unexpected scrolling behavior during conversion. --- src/managers/DragDropManager.ts | 13 +++++++++++++ src/managers/EdgeScrollManager.ts | 10 ++++++++++ src/renderers/EventRenderer.ts | 1 - 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/managers/DragDropManager.ts b/src/managers/DragDropManager.ts index 6076874..8a8a7a6 100644 --- a/src/managers/DragDropManager.ts +++ b/src/managers/DragDropManager.ts @@ -143,6 +143,19 @@ export class DragDropManager { console.log('🛑 DragDropManager: Edge-scroll stopped'); }); + // Reset scrollDeltaY when event converts (new clone created) + this.eventBus.on('drag:mouseenter-header', () => { + console.log('🔄 DragDropManager: Event converting to all-day - resetting scrollDeltaY'); + this.scrollDeltaY = 0; + this.lastScrollTop = 0; + }); + + this.eventBus.on('drag:mouseenter-column', () => { + console.log('🔄 DragDropManager: Event converting to timed - resetting scrollDeltaY'); + this.scrollDeltaY = 0; + this.lastScrollTop = 0; + }); + } private handleGridRendered(event: CustomEvent) { this.scrollableContent = document.querySelector('swp-scrollable-content'); diff --git a/src/managers/EdgeScrollManager.ts b/src/managers/EdgeScrollManager.ts index 77a2ec6..ae71de0 100644 --- a/src/managers/EdgeScrollManager.ts +++ b/src/managers/EdgeScrollManager.ts @@ -60,6 +60,16 @@ export class EdgeScrollManager { this.eventBus.on('drag:end', () => this.stopDrag()); this.eventBus.on('drag:cancelled', () => this.stopDrag()); + + // Stop scrolling when event converts to/from all-day + this.eventBus.on('drag:mouseenter-header', () => { + console.log('🔄 EdgeScrollManager: Event converting to all-day - stopping scroll'); + this.stopDrag(); + }); + + this.eventBus.on('drag:mouseenter-column', () => { + this.startDrag(); + }); } private startDrag(): void { diff --git a/src/renderers/EventRenderer.ts b/src/renderers/EventRenderer.ts index 706be34..9e995d1 100644 --- a/src/renderers/EventRenderer.ts +++ b/src/renderers/EventRenderer.ts @@ -91,7 +91,6 @@ export class DateEventRenderer implements EventRendererStrategy { */ public handleDragMove(payload: DragMoveEventPayload): void { - console.log('handleDragMove', payload) const swpEvent = payload.draggedClone as SwpEventElement; const columnDate = this.dateService.parseISO(payload.columnBounds!!.date); swpEvent.updatePosition(columnDate, payload.snappedY);