Improves all-day event rendering and handling
Refactors all-day event container handling to improve rendering and event delegation. Ensures all-day containers are consistently created and managed, preventing issues with event display and drag-and-drop functionality. Moves event listener setup into dedicated methods for better organization and reusability.
This commit is contained in:
parent
f2763ad826
commit
07402a07d9
6 changed files with 142 additions and 44 deletions
|
|
@ -3,6 +3,8 @@ import { CoreEvents } from '../constants/CoreEvents';
|
|||
import { CalendarConfig } from '../core/CalendarConfig';
|
||||
import { DateCalculator } from '../utils/DateCalculator';
|
||||
import { EventRenderingService } from './EventRendererManager';
|
||||
import { CalendarTypeFactory } from '../factories/CalendarTypeFactory';
|
||||
import { eventBus } from '../core/EventBus';
|
||||
|
||||
/**
|
||||
* NavigationRenderer - Handles DOM rendering for navigation containers
|
||||
|
|
@ -170,6 +172,13 @@ export class NavigationRenderer {
|
|||
|
||||
header.appendChild(headerElement);
|
||||
});
|
||||
|
||||
// Always ensure all-day containers exist for all days
|
||||
const headerRenderer = CalendarTypeFactory.getHeaderRenderer(this.config.getCalendarMode());
|
||||
headerRenderer.ensureAllDayContainers(header as HTMLElement);
|
||||
|
||||
// Add event delegation listener for drag & drop functionality
|
||||
this.setupHeaderEventListener(header as HTMLElement);
|
||||
|
||||
// Render day columns for target week
|
||||
dates.forEach(date => {
|
||||
|
|
@ -183,4 +192,38 @@ export class NavigationRenderer {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup event delegation listener for header mouseover (same logic as GridRenderer)
|
||||
*/
|
||||
private setupHeaderEventListener(calendarHeader: HTMLElement): void {
|
||||
calendarHeader.addEventListener('mouseover', (event) => {
|
||||
const target = event.target as HTMLElement;
|
||||
|
||||
// Check what was hovered - could be day-header OR all-day-container
|
||||
const dayHeader = target.closest('swp-day-header');
|
||||
const allDayContainer = target.closest('swp-allday-container');
|
||||
|
||||
if (dayHeader || allDayContainer) {
|
||||
const hoveredElement = dayHeader || allDayContainer;
|
||||
const targetDate = (hoveredElement as HTMLElement).dataset.date;
|
||||
|
||||
console.log('NavigationRenderer: Detected hover over:', {
|
||||
elementType: dayHeader ? 'day-header' : 'all-day-container',
|
||||
targetDate,
|
||||
element: hoveredElement
|
||||
});
|
||||
|
||||
// Get the header renderer for addToAllDay functionality
|
||||
const calendarType = this.config.getCalendarMode();
|
||||
const headerRenderer = CalendarTypeFactory.getHeaderRenderer(calendarType);
|
||||
|
||||
eventBus.emit('header:mouseover', {
|
||||
element: hoveredElement,
|
||||
targetDate,
|
||||
headerRenderer
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue