Calendar/src/index.ts

91 lines
3.4 KiB
TypeScript
Raw Normal View History

// Main entry point for Calendar Plantempus
import { eventBus } from './core/EventBus.js';
import { CalendarManager } from './managers/CalendarManager.js';
import { NavigationManager } from './managers/NavigationManager.js';
import { ViewManager } from './managers/ViewManager.js';
import { EventManager } from './managers/EventManager.js';
import { EventRenderer } from './managers/EventRenderer.js';
import { GridManager } from './managers/GridManager.js';
import { ScrollManager } from './managers/ScrollManager.js';
2025-08-07 00:15:44 +02:00
import { calendarConfig } from './core/CalendarConfig.js';
import { CalendarTypeFactory } from './factories/CalendarTypeFactory.js';
/**
* Initialize the calendar application with new state-driven approach
*/
async function initializeCalendar(): Promise<void> {
console.log('🗓️ Initializing Calendar Plantempus with state management...');
// Declare managers outside try block for global access
let calendarManager: CalendarManager;
let navigationManager: NavigationManager;
let viewManager: ViewManager;
let eventManager: EventManager;
let eventRenderer: EventRenderer;
let gridManager: GridManager;
let scrollManager: ScrollManager;
try {
// Use the singleton calendar configuration
const config = calendarConfig;
// Initialize the CalendarTypeFactory before creating managers
console.log('🏭 Phase 0: Initializing CalendarTypeFactory...');
CalendarTypeFactory.initialize();
// Initialize managers in proper order
console.log('📋 Phase 1: Creating core managers...');
calendarManager = new CalendarManager(eventBus, config);
navigationManager = new NavigationManager(eventBus);
viewManager = new ViewManager(eventBus);
console.log('🎯 Phase 2: Creating data and rendering managers...');
// These managers will now respond to state-driven events
eventManager = new EventManager(eventBus);
eventRenderer = new EventRenderer(eventBus);
console.log('🏗️ Phase 3: Creating layout managers...');
scrollManager = new ScrollManager(); // Will respond to GRID_RENDERED
gridManager = new GridManager(); // Will respond to RENDERING_STARTED
// Enable debug mode for development
eventBus.setDebug(true);
// Initialize all managers using state-driven coordination
console.log('🚀 Phase 4: Starting state-driven initialization...');
await calendarManager.initialize(); // Now async and fully coordinated
console.log('🎊 Calendar Plantempus initialized successfully!');
console.log('📊 Initialization Report:', calendarManager.getInitializationReport());
} catch (error) {
console.error('💥 Calendar initialization failed:', error);
// Could implement fallback or retry logic here
throw error;
}
// Expose to window for debugging
(window as any).calendarDebug = {
eventBus,
calendarManager,
navigationManager,
viewManager,
eventManager,
eventRenderer,
gridManager,
scrollManager
};
}
// Initialize when DOM is ready - now handles async properly
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
initializeCalendar().catch(error => {
console.error('Failed to initialize calendar:', error);
});
});
} else {
initializeCalendar().catch(error => {
console.error('Failed to initialize calendar:', error);
});
}