import { CoreEvents } from '../constants/CoreEvents'; /** * CalendarManager - Main coordinator for all calendar managers */ export class CalendarManager { constructor(eventBus, eventManager, gridManager, eventRenderingService, scrollManager, config) { this.currentView = 'week'; this.currentDate = new Date(); this.isInitialized = false; this.eventBus = eventBus; this.eventManager = eventManager; this.gridManager = gridManager; this.eventRenderer = eventRenderingService; this.scrollManager = scrollManager; this.config = config; this.setupEventListeners(); } /** * Initialize calendar system using simple direct calls */ async initialize() { if (this.isInitialized) { return; } try { // Step 1: Load data await this.eventManager.loadData(); // Step 2: Render grid structure await this.gridManager.render(); this.scrollManager.initialize(); this.setView(this.currentView); this.setCurrentDate(this.currentDate); this.isInitialized = true; // Emit initialization complete event this.eventBus.emit(CoreEvents.INITIALIZED, { currentDate: this.currentDate, currentView: this.currentView }); } catch (error) { throw error; } } /** * Skift calendar view (dag/uge/måned) */ setView(view) { if (this.currentView === view) { return; } const previousView = this.currentView; this.currentView = view; // Emit view change event this.eventBus.emit(CoreEvents.VIEW_CHANGED, { previousView, currentView: view, date: this.currentDate }); } /** * Sæt aktuel dato */ setCurrentDate(date) { const previousDate = this.currentDate; this.currentDate = new Date(date); // Emit date change event this.eventBus.emit(CoreEvents.DATE_CHANGED, { previousDate, currentDate: this.currentDate, view: this.currentView }); } /** * Setup event listeners for at håndtere events fra andre managers */ setupEventListeners() { // Listen for workweek changes only this.eventBus.on(CoreEvents.WORKWEEK_CHANGED, (event) => { const customEvent = event; this.handleWorkweekChange(); }); } /** * Calculate the current period based on view and date */ calculateCurrentPeriod() { const current = new Date(this.currentDate); switch (this.currentView) { case 'day': const dayStart = new Date(current); dayStart.setHours(0, 0, 0, 0); const dayEnd = new Date(current); dayEnd.setHours(23, 59, 59, 999); return { start: dayStart.toISOString(), end: dayEnd.toISOString() }; case 'week': // Find start of week (Monday) const weekStart = new Date(current); const dayOfWeek = weekStart.getDay(); const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // Sunday = 0, so 6 days back to Monday weekStart.setDate(weekStart.getDate() - daysToMonday); weekStart.setHours(0, 0, 0, 0); // Find end of week (Sunday) const weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); weekEnd.setHours(23, 59, 59, 999); return { start: weekStart.toISOString(), end: weekEnd.toISOString() }; case 'month': const monthStart = new Date(current.getFullYear(), current.getMonth(), 1); const monthEnd = new Date(current.getFullYear(), current.getMonth() + 1, 0, 23, 59, 59, 999); return { start: monthStart.toISOString(), end: monthEnd.toISOString() }; default: // Fallback to week view const fallbackStart = new Date(current); fallbackStart.setDate(fallbackStart.getDate() - 3); fallbackStart.setHours(0, 0, 0, 0); const fallbackEnd = new Date(current); fallbackEnd.setDate(fallbackEnd.getDate() + 3); fallbackEnd.setHours(23, 59, 59, 999); return { start: fallbackStart.toISOString(), end: fallbackEnd.toISOString() }; } } /** * Handle workweek configuration changes */ handleWorkweekChange() { // Simply relay the event - workweek info is in the WORKWEEK_CHANGED event this.eventBus.emit('workweek:header-update', { currentDate: this.currentDate, currentView: this.currentView }); } } //# sourceMappingURL=CalendarManager.js.map