2025-07-24 22:17:38 +02:00
|
|
|
import { EventBus } from '../core/EventBus';
|
|
|
|
|
import { IEventBus, CalendarEvent } from '../types/CalendarTypes';
|
|
|
|
|
import { EventTypes } from '../constants/EventTypes';
|
2025-08-09 00:31:44 +02:00
|
|
|
import { StateEvents } from '../types/CalendarState';
|
2025-07-24 22:17:38 +02:00
|
|
|
import { calendarConfig } from '../core/CalendarConfig';
|
2025-08-07 00:15:44 +02:00
|
|
|
import { CalendarTypeFactory } from '../factories/CalendarTypeFactory';
|
2025-07-24 22:17:38 +02:00
|
|
|
|
|
|
|
|
/**
|
2025-08-07 00:15:44 +02:00
|
|
|
* EventRenderer - Render events i DOM med positionering using Strategy Pattern
|
2025-07-24 22:17:38 +02:00
|
|
|
* 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 00:31:44 +02:00
|
|
|
|
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');
|
2025-08-09 00:31:44 +02:00
|
|
|
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-05 00:41:59 +02:00
|
|
|
|
2025-08-07 00:15:44 +02:00
|
|
|
// Get the appropriate event renderer strategy
|
2025-08-09 00:31:44 +02:00
|
|
|
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-07-24 22:17:38 +02:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-09 01:16:04 +02:00
|
|
|
|
2025-07-24 22:17:38 +02:00
|
|
|
private clearEvents(): void {
|
2025-08-09 01:16:04 +02:00
|
|
|
console.warn(`🗑️ EventRenderer: clearEvents() called from EventRenderer manager`);
|
2025-08-09 00:31:44 +02:00
|
|
|
const calendarType = calendarConfig.getCalendarMode();
|
2025-08-07 00:15:44 +02:00
|
|
|
const eventRenderer = CalendarTypeFactory.getEventRenderer(calendarType);
|
|
|
|
|
eventRenderer.clearEvents();
|
2025-07-24 22:17:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public refresh(): void {
|
2025-08-09 01:16:04 +02:00
|
|
|
// Refresh would need to be coordinated by CalendarManager now
|
|
|
|
|
this.clearEvents();
|
2025-07-24 22:17:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public destroy(): void {
|
|
|
|
|
this.clearEvents();
|
|
|
|
|
}
|
|
|
|
|
}
|