Enables all-day event conversion on column hover
Allows users to convert all-day events to timed events by dragging them over a day column. This implementation adds logic to the DragDropManager to detect when an all-day event is dragged over a column. It then emits a new event, 'drag:mouseenter-column', carrying the event data and target column information. The event rendering service handles this event.
This commit is contained in:
parent
7a79297854
commit
78ca23c07a
5 changed files with 69 additions and 125 deletions
|
|
@ -88,17 +88,6 @@ export class EventRenderingService {
|
|||
// Handle all drag events and delegate to appropriate renderer
|
||||
this.setupDragEventListeners();
|
||||
|
||||
// Listen for conversion from all-day event to time event
|
||||
this.eventBus.on('drag:convert-to-time_event', (event: Event) => {
|
||||
const { draggedElement, mousePosition, column } = (event as CustomEvent).detail;
|
||||
console.log('🔄 EventRendererManager: Received drag:convert-to-time_event', {
|
||||
draggedElement: draggedElement?.dataset.eventId,
|
||||
mousePosition,
|
||||
column
|
||||
});
|
||||
this.handleConvertToTimeEvent(draggedElement, mousePosition, column);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -301,60 +290,7 @@ export class EventRenderingService {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle conversion from all-day event to time event
|
||||
*/
|
||||
private handleConvertToTimeEvent(draggedElement: HTMLElement, mousePosition: { x: number; y: number }, column: string): void {
|
||||
// Use the provided draggedElement directly
|
||||
const allDayClone = draggedElement;
|
||||
const draggedEventId = draggedElement?.dataset.eventId?.replace('clone-', '') || '';
|
||||
|
||||
|
||||
// Use SwpEventElement factory to create day event from all-day event
|
||||
const dayElement = SwpEventElement.fromAllDayElement(allDayClone as HTMLElement);
|
||||
|
||||
// Remove the all-day clone - it's no longer needed since we're converting to day event
|
||||
allDayClone.remove();
|
||||
|
||||
// Set clone ID
|
||||
dayElement.dataset.eventId = `clone-${draggedEventId}`;
|
||||
|
||||
// Find target column
|
||||
const columnElement = document.querySelector(`swp-day-column[data-date="${column}"]`);
|
||||
if (!columnElement) {
|
||||
console.warn('EventRendererManager: Target column not found', { column });
|
||||
return;
|
||||
}
|
||||
|
||||
// Find events layer in the column
|
||||
const eventsLayer = columnElement.querySelector('swp-events-layer');
|
||||
if (!eventsLayer) {
|
||||
console.warn('EventRendererManager: Events layer not found in column');
|
||||
return;
|
||||
}
|
||||
|
||||
// Add to events layer
|
||||
eventsLayer.appendChild(dayElement);
|
||||
|
||||
// Position based on mouse Y coordinate
|
||||
const columnRect = columnElement.getBoundingClientRect();
|
||||
const relativeY = Math.max(0, mousePosition.y - columnRect.top);
|
||||
dayElement.style.top = `${relativeY}px`;
|
||||
|
||||
// Set drag styling
|
||||
dayElement.style.zIndex = '1000';
|
||||
dayElement.style.cursor = 'grabbing';
|
||||
dayElement.style.opacity = '';
|
||||
dayElement.style.transform = '';
|
||||
|
||||
console.log('✅ EventRendererManager: Converted all-day event to time event', {
|
||||
draggedEventId,
|
||||
column,
|
||||
mousePosition,
|
||||
relativeY
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Re-render affected columns after drag to recalculate stacking/grouping
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue