2025-08-17 23:44:30 +02:00
|
|
|
import { IEventBus } from '../types/CalendarTypes';
|
|
|
|
|
import { CalendarConfig } from '../core/CalendarConfig';
|
|
|
|
|
import { EventManager } from '../managers/EventManager';
|
|
|
|
|
import { EventRenderingService } from '../renderers/EventRendererManager';
|
|
|
|
|
import { GridManager } from '../managers/GridManager';
|
|
|
|
|
import { ScrollManager } from '../managers/ScrollManager';
|
|
|
|
|
import { NavigationManager } from '../managers/NavigationManager';
|
|
|
|
|
import { ViewManager } from '../managers/ViewManager';
|
|
|
|
|
import { CalendarManager } from '../managers/CalendarManager';
|
2025-08-27 22:50:13 +02:00
|
|
|
import { DragDropManager } from '../managers/DragDropManager';
|
2025-08-17 23:44:30 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Factory for creating and managing calendar managers with proper dependency injection
|
|
|
|
|
*/
|
|
|
|
|
export class ManagerFactory {
|
|
|
|
|
private static instance: ManagerFactory;
|
|
|
|
|
|
|
|
|
|
private constructor() {}
|
|
|
|
|
|
|
|
|
|
public static getInstance(): ManagerFactory {
|
|
|
|
|
if (!ManagerFactory.instance) {
|
|
|
|
|
ManagerFactory.instance = new ManagerFactory();
|
|
|
|
|
}
|
|
|
|
|
return ManagerFactory.instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create all managers with proper dependency injection
|
|
|
|
|
*/
|
|
|
|
|
public createManagers(eventBus: IEventBus, config: CalendarConfig): {
|
|
|
|
|
eventManager: EventManager;
|
|
|
|
|
eventRenderer: EventRenderingService;
|
|
|
|
|
gridManager: GridManager;
|
|
|
|
|
scrollManager: ScrollManager;
|
|
|
|
|
navigationManager: NavigationManager;
|
|
|
|
|
viewManager: ViewManager;
|
|
|
|
|
calendarManager: CalendarManager;
|
2025-08-27 22:50:13 +02:00
|
|
|
dragDropManager: DragDropManager;
|
2025-08-17 23:44:30 +02:00
|
|
|
} {
|
|
|
|
|
|
|
|
|
|
// Create managers in dependency order
|
|
|
|
|
const eventManager = new EventManager(eventBus);
|
|
|
|
|
const eventRenderer = new EventRenderingService(eventBus, eventManager);
|
|
|
|
|
const gridManager = new GridManager();
|
|
|
|
|
const scrollManager = new ScrollManager();
|
2025-08-20 00:39:31 +02:00
|
|
|
const navigationManager = new NavigationManager(eventBus, eventRenderer);
|
2025-08-17 23:44:30 +02:00
|
|
|
const viewManager = new ViewManager(eventBus);
|
2025-08-27 22:50:13 +02:00
|
|
|
const dragDropManager = new DragDropManager(eventBus, config);
|
2025-08-17 23:44:30 +02:00
|
|
|
|
|
|
|
|
// CalendarManager depends on all other managers
|
|
|
|
|
const calendarManager = new CalendarManager(
|
|
|
|
|
eventBus,
|
|
|
|
|
config,
|
|
|
|
|
eventManager,
|
|
|
|
|
gridManager,
|
|
|
|
|
eventRenderer,
|
|
|
|
|
scrollManager
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
eventManager,
|
|
|
|
|
eventRenderer,
|
|
|
|
|
gridManager,
|
|
|
|
|
scrollManager,
|
|
|
|
|
navigationManager,
|
|
|
|
|
viewManager,
|
2025-08-27 22:50:13 +02:00
|
|
|
calendarManager,
|
|
|
|
|
dragDropManager
|
2025-08-17 23:44:30 +02:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Initialize all managers in the correct order
|
|
|
|
|
*/
|
|
|
|
|
public async initializeManagers(managers: {
|
|
|
|
|
calendarManager: CalendarManager;
|
|
|
|
|
[key: string]: any;
|
|
|
|
|
}): Promise<void> {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await managers.calendarManager.initialize();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|