Improves drag-and-drop event positioning logic

Refactors element positioning during drag operations to:
- Use getBoundingClientRect for precise Y positioning
- Move events to events-layer for consistent dragging
- Ensure proper absolute positioning across different event layouts

Addresses positioning inconsistencies for grouped and stacked events
This commit is contained in:
Janus C. H. Knudsen 2025-12-11 19:05:50 +01:00
parent 70172e8f10
commit 1a4c22d37f

View file

@ -175,7 +175,27 @@ export class DragDropManager {
const columnElement = element.closest('swp-day-column') as HTMLElement;
if (!columnElement) return;
const startY = parseFloat(element.style.top) || 0;
// Calculate absolute Y position using getBoundingClientRect
const elementRect = element.getBoundingClientRect();
const columnRect = columnElement.getBoundingClientRect();
const startY = elementRect.top - columnRect.top;
// If event is inside a group, move it to events-layer for correct positioning during drag
const group = element.closest('swp-event-group');
if (group) {
const eventsLayer = columnElement.querySelector('swp-events-layer');
if (eventsLayer) {
eventsLayer.appendChild(element);
}
}
// Set consistent positioning for drag (works for both grouped and stacked events)
element.style.position = 'absolute';
element.style.top = `${startY}px`;
element.style.left = '2px';
element.style.right = '2px';
element.style.marginLeft = '0'; // Reset stacking margin
// Create ghost clone
const ghostElement = element.cloneNode(true) as HTMLElement;
@ -190,7 +210,6 @@ export class DragDropManager {
element.classList.add('dragging');
// Calculate initial target from mouse position
const columnRect = columnElement.getBoundingClientRect();
const targetY = e.clientY - columnRect.top - mouseOffset.y;
// Initialize drag state