Calendar/src/managers/EventRenderer.ts

86 lines
3 KiB
TypeScript
Raw Normal View History

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';
2025-08-07 00:15:44 +02:00
import { CalendarTypeFactory } from '../factories/CalendarTypeFactory';
/**
2025-08-07 00:15:44 +02:00
* 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();
}
2025-08-09 01:16:04 +02:00
/**
* Public method to render events - called directly by CalendarManager
*/
public async renderEvents(events: CalendarEvent[]): Promise<void> {
console.log('EventRenderer: Direct renderEvents called with', events.length, 'events');
2025-08-09 01:16:04 +02:00
// Debug: Check if we have any events
if (events.length === 0) {
console.warn('EventRenderer: No events to render');
return;
}
2025-08-07 00:15:44 +02:00
2025-08-09 01:16:04 +02:00
// 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
});
2025-08-07 00:15:44 +02:00
// Get the appropriate event renderer strategy
const calendarType = calendarConfig.getCalendarMode();
2025-08-07 00:15:44 +02:00
const eventRenderer = CalendarTypeFactory.getEventRenderer(calendarType);
2025-08-02 23:59:52 +02:00
2025-08-07 00:15:44 +02:00
console.log(`EventRenderer: Using ${calendarType} event renderer strategy`);
2025-08-02 23:59:52 +02:00
2025-08-09 01:16:04 +02:00
// Debug: Check if columns exist
const columns = document.querySelectorAll('swp-day-column');
console.log(`EventRenderer: Found ${columns.length} day columns in DOM`);
2025-08-07 00:15:44 +02:00
// Use strategy to render events
eventRenderer.renderEvents(events, calendarConfig);
2025-08-09 01:16:04 +02:00
console.log(`EventRenderer: Successfully rendered ${events.length} events`);
}
2025-08-02 23:59:52 +02:00
2025-08-09 01:16:04 +02:00
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();
});
}
2025-08-09 01:16:04 +02:00
private clearEvents(): void {
2025-08-09 01:16:04 +02:00
console.warn(`🗑️ EventRenderer: clearEvents() called from EventRenderer manager`);
const calendarType = calendarConfig.getCalendarMode();
2025-08-07 00:15:44 +02:00
const eventRenderer = CalendarTypeFactory.getEventRenderer(calendarType);
eventRenderer.clearEvents();
}
public refresh(): void {
2025-08-09 01:16:04 +02:00
// Refresh would need to be coordinated by CalendarManager now
this.clearEvents();
}
public destroy(): void {
this.clearEvents();
}
}