import { EventBus } from '../core/EventBus'; import { IEventBus, CalendarEvent } from '../types/CalendarTypes'; import { EventTypes } from '../constants/EventTypes'; import { StateEvents } from '../types/CalendarState'; import { calendarConfig } from '../core/CalendarConfig'; import { CalendarTypeFactory } from '../factories/CalendarTypeFactory'; /** * EventRenderer - Render events i DOM med positionering using Strategy Pattern * Håndterer event positioning og overlap detection */ export class EventRenderer { private eventBus: IEventBus; constructor(eventBus: IEventBus) { this.eventBus = eventBus; this.setupEventListeners(); } /** * Public method to render events - called directly by CalendarManager */ public async renderEvents(events: CalendarEvent[]): Promise { console.log('EventRenderer: Direct renderEvents called with', events.length, 'events'); // Debug: Check if we have any events if (events.length === 0) { console.warn('EventRenderer: No events to render'); return; } // Debug: Log first event details console.log('EventRenderer: First event details:', { title: events[0].title, start: events[0].start, end: events[0].end, allDay: events[0].allDay }); // Get the appropriate event renderer strategy const calendarType = calendarConfig.getCalendarMode(); const eventRenderer = CalendarTypeFactory.getEventRenderer(calendarType); console.log(`EventRenderer: Using ${calendarType} event renderer strategy`); // Debug: Check if columns exist const columns = document.querySelectorAll('swp-day-column'); console.log(`EventRenderer: Found ${columns.length} day columns in DOM`); // Use strategy to render events eventRenderer.renderEvents(events, calendarConfig); console.log(`EventRenderer: Successfully rendered ${events.length} events`); } private setupEventListeners(): void { // Keep only UI-related event listeners this.eventBus.on(EventTypes.VIEW_RENDERED, () => { // Clear existing events when view changes this.clearEvents(); }); // Handle calendar type changes this.eventBus.on(EventTypes.CALENDAR_TYPE_CHANGED, () => { // Re-render would need to be triggered by CalendarManager now this.clearEvents(); }); } private clearEvents(): void { console.warn(`🗑️ EventRenderer: clearEvents() called from EventRenderer manager`); const calendarType = calendarConfig.getCalendarMode(); const eventRenderer = CalendarTypeFactory.getEventRenderer(calendarType); eventRenderer.clearEvents(); } public refresh(): void { // Refresh would need to be coordinated by CalendarManager now this.clearEvents(); } public destroy(): void { this.clearEvents(); } }